Grafana: دعم لقائمة التشغيل مع المتغيرات القوالب

تم إنشاؤها على ٨ سبتمبر ٢٠١٤  ·  132تعليقات  ·  مصدر: grafana/grafana

واسمحوا لي أن أقدم لكم مثالا بسيطا:
لدينا لوحة تحكم بها متغير $ HOST تم تكوينه.
لدينا رسم بياني يستخدم aws. $ HOST.request.count
عند النظر إلى لوحة القيادة ، يمكننا تحديد Host1 و Host2 وما إلى ذلك ، وعرض المقاييس المناسبة.
الآن ، سيكون من الجيد تحويل هذا إلى قائمة تشغيل بحيث تعرض grafana كل دقيقة المقاييس لكل مضيف.

تصبح الأمور أكثر تعقيدًا عندما يكون لدينا مرشحان أو أكثر. هناك مجموعة من التركيبات ، بعضها قد لا يكون ذا فائدة لمراقب لوحة العدادات.
لهذا السبب ، سيكون من الجيد أن يكون لديك طريقة لتحديد قائمة مجموعات عوامل التصفية / المتغيرات التي تهم المستخدم. ستنقل قائمة التشغيل بعد ذلك عبر هذه المجموعات وتعرض لوحة المعلومات بالمقاييس المناسبة.
سيكون من الجيد أيضًا إتاحة تحديد مجموعات مختلفة للنطاق الزمني أيضًا في قائمة التشغيل (على سبيل المثال ، آخر 6 ساعات ، آخر 24 ساعة وما إلى ذلك).

aredashboard prioritnice-to-have typfeature-request

التعليق الأكثر فائدة

: cake: للاحتفال بالذكرى السنوية الخامسة لهذا الإصدار.

هل يمكننا الحصول على تحديث؟

ال 132 كومينتر

costimuraru اقتراحات جيدة جدا!

: +1: سيجعل ميزة قائمة التشغيل أكثر فائدة

: +1: هذه الميزة مطلوبة لأنك لا تملك تلك الشاشة الضخمة لوضع جميع الرسوم البيانية هناك.

: +1: في الواقع ، هذه الميزة ستكون رائعة لمشاريع مثل مشروعنا حيث لدينا العديد من لوحات المعلومات التي يمكن ضغطها في شاشة واحدة.

يبدو هذا مفيدًا جدًا بالفعل ، ولكنه أيضًا معقد جدًا ويستغرق وقتًا طويلاً لفضح الإعدادات المتغيرة والوقت في عرض قائمة التشغيل (وتنفيذ المنطق للتعامل مع هذه الإعدادات ومتغيرات الإعداد وما إلى ذلك عند تحميل / دورة لوحة القيادة). لذلك ستكون بالتأكيد ميزة ذات أولوية كبيرة في المستقبل ولكنها ليست شيئًا يمكن الضغط عليه لـ v1.8

شكرا torkelo واستمر في العمل الجيد!

: +1: سيكون من الرائع أن يكون لديك هذه الميزة

أثناء وجود هذا في قائمة انتظار dev - هل هناك طريقة لتحديد متغير القالب في عنوان url؟ يمكنني على الأقل استخدام امتداد متصفح للتدوير عبر مجموعة من عناوين url في الوقت الحالي.

rishid نعم ، باستخدام ?var-<variable_name>=value

+1 ، أنا أيضًا مهتم جدًا بطلب الميزة هذا

+1

+1

+1 مع القوالب ، هذا أمر لا بد منه.

العلاقات العامة قريبا جدا ...

costimuraru لقد نفذت قائمة تشغيل لمتغير واحد ، والآن أعمل على مجموعات متعددة المتغيرات. يجب أن يكون التنفيذ سريعًا. قد يكون تحديد نطاق زمني مختلف ميزة ترقية علاوة على ذلك. بالنسبة لهذا التكرار ، أقوم فقط بعمل قائمة تشغيل مجموعات متغيرة للقالب.

هذا رائع ، utkarshcmu !

هنا PR - # 2841 وبعض لقطات الشاشة:

انتقل إلى "النماذج" والآن من المفترض أن تتمكن من رؤية علامة التبويب "قائمة التشغيل" الجديدة تمامًا:
screen shot 2015-09-29 at 3 14 13 am

انقر فوق علامة التبويب قائمة التشغيل وستظهر لك الشاشة التالية مع جميع المتغيرات المدرجة.
screen shot 2015-09-29 at 3 14 16 am

اخترت متغيرين من أصل 3 ثم نقرت على "ابدأ". (السبب في أنني اخترت 2 هو أنني أريد تشغيل جميع مجموعات هذين المتغيرين مع الحفاظ على المتغير الثالث ثابتًا. يرجى ملاحظة: ستحصل المتغيرات الثابتة على قيمها المحفوظة الافتراضية).
screen shot 2015-09-29 at 3 14 22 am

يمكنك الآن أن ترى أنني احتفظت بالمتغير الأول الثابت وستبدأ قائمة التشغيل بكل التركيبات الممكنة للمتغيرين الثاني والثالث.
screen shot 2015-09-29 at 3 14 36 am

يرجى تقديم الملاحظات والتغييرات إذا لزم الأمر.

رهيبةutkarshcmu

عمل جيد! لست متأكدًا من وجود ميزة قائمة التشغيل كعلامة تبويب في إعدادات النموذج. يوجد بالفعل عرض لقائمة التشغيل ، يجب أن يكون إنشاء قائمة تشغيل للوحة معلومات نموذجية جزءًا من هذا العرض.

بالاتفاق مع

يمكن تشغيل قائمة التشغيل التي تستند إلى متغيرات النموذج من عرض قائمة التشغيل الآن. يجب اتباع الخطوات التالية لبدء قائمة التشغيل:

انقر فوق قائمة التشغيل:
screen shot 2015-09-30 at 10 59 44 am

سترى عرض قائمة التشغيل التالي مع خيار إضافي لاختيار نوع قائمة التشغيل:
screen shot 2015-09-30 at 10 59 50 am
كل شيء يعمل بنفس الطريقة لقوائم التشغيل بناءً على لوحات المعلومات.

الآن بالنسبة لقائمة التشغيل التي تستند إلى متغيرات النموذج ، تحتاج إلى تحديد "المتغيرات" من القائمة المنسدلة:
screen shot 2015-09-30 at 11 07 37 am

بعد ذلك سوف تبحث عن لوحة القيادة التي تحتاج إلى تشغيل قائمة التشغيل الخاصة بها بناءً على متغيرات القالب الخاصة بها وتحديدها:
screen shot 2015-09-30 at 11 00 13 am

بمجرد تحديد لوحة القيادة ، سيتم تلقائيًا عرض قائمة متغيرات القالب:
screen shot 2015-09-30 at 11 00 16 am

الآن الخطوة التالية هي تحديد متغيرات القالب التي تريد تشغيل قائمة التشغيل بها ، والنقر فوق ابدأ:
screen shot 2015-09-30 at 11 00 44 am

وهنا تذهب مع قائمة التشغيل بناءً على متغيرات القالب:
screen shot 2015-09-30 at 11 00 51 am
screen shot 2015-09-30 at 11 00 58 am

اسمحوا لي أن أعرف ما هو رأيكم يا رفاق بشأن هذا التغيير في عرض قائمة التشغيل.

تبدو جيدا

+1

+1 ، هل من أخبار حول هذه الميزة utkarshcmu ؟

@ evandro-portugal لقد قمت بتطبيق ميزة قائمة التشغيل لـ grafana ولكن لم يتم دمجها سابقًا. أعتقد الآن أنه يجب علي إعادة بعض الأعمال لأن الكود قد تغير كثيرًا.

utkarshcmu صحيح ، أين يمكنني الحصول على الرموز الأخيرة الخاصة بك لهذا؟ أود إلقاء نظرة ومحاولة القيام بشيء ما من أجلي ، في حالتي ، إنها أولوية عالية وأحتاج فقط إلى جعل المتغيرات تغير الموضع في نهاية كل دورة ، ثم يمكنني فعل شيء ما حتى نحصل على فرعك مندمجة

@ ايفاندرو البرتغال
هذا هو الكود القديم:
يرجى الانتقال إلى مفترق غرافانا الخاص بي - https://github.com/justforkit/grafana
وحاول بناء Grafana من فرع "قائمة التشغيل المتغيرة"

utkarshcmu ، شكرًا ،

@ evandro-portugal بالتأكيد ، تفضل وأعد العمل إذا كنت تريد ذلك. أنا لا أخطط للعمل هنا لمدة أسبوع على الأقل. استمتع بالكرنفال. :)

torkelo هل يمكن دمج هذه الميزة في الجرافانا الأساسي؟ يبدو أن هذا تحسين مفيد للغاية لتشغيل نفس لوحة القيادة بمتغيرات قالب مختلفة.

أيضًا ، إذا وافقتbergquist / torkelo على دمج هذه الميزة ،

digrich ماذا تقصد دمج؟ هذه ليست علاقات عامة :)

كنت أحاول الإشارة إلى العلاقات العامة القديمة الخاصة بـ utkarshcmu (# 2841) ولكن كما ذكر في تعليقه الأخير ، يجب عليه إعادة العمل وتقديم

+1

مرحبًا torkelo . أثناء انتظار هذه الميزة المفيدة ، أود البحث عن أي حل بديل.

هل يمكن إنشاء شيء مثل قائمة التشغيل بناءً على لوحة معلومات مكتوبة؟

يجب أن تكون لوحة القيادة النصية هذه قادرة على تحميل لوحات معلومات نموذجية أخرى وتمرير المتغيرات بطريقة ما ، ربما من عنوان url؟

+1

هل من أخبار عن هذا منذ نصف عام؟

لا أخبار :(

يبدو أنني بحاجة إلى قضاء بعض الوقت في طلب الميزة هذا!

+1

+1

+1

+1

نظرًا لأنه يمكنك تمرير المتغيرات عبر عنوان URL ، فإن الحل المؤقت الخاص بي هو صفحة iframe carousel / rotator html البسيطة ، والتي أسميها دائري Grafana Dashboards.

تحتاج فقط إلى تحديد المصفوفة BASE_URL و dashboards_list ، والتي تحتوي على لوحات المعلومات التي تريد عرضها.

هذا سؤال غير ذي صلة إلى حد ما ولكن هل هناك طريقة للحصول على زر مضيف "التالي" / "السابق" (أو متغير نموذجي بالفعل) على لوحة المعلومات؟
عندما أرغب في التمرير يدويًا عبر مجموعة كاملة من المضيفين باستخدام القائمة المنسدلة ، يصبح الأمر مرهقًا للغاية.

أي إجراءات هنا؟ جميع لوحات المعلومات لدينا مقولبة - لذا فإن ميزات / إمكانيات النموذج غير القابل للتمرير تكون ميزة قائمة التشغيل غير قابلة للاستخدام إلى حد كبير بالنسبة لنا.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1، utkarshcmu هل ما زلت تعمل على هذا؟ سآخذ طعنة في ذلك إذا لم يكن الأمر كذلك ، لكنني جديد تمامًا على تطوير grafana

tolleyguy -

+1
اقتراح لأن لوحات المعلومات أطول ، هل يمكننا التمرير التلقائي أيضًا. وبخلاف ذلك تظل معظم اللوحات مخفية في قائمة التشغيل (على التلفزيون)

+1

+1

+1

أي أخبار عن هذه الميزة؟

إنه لأمر مدهش أن يذهب مثل هذا العمل إلى سلة المهملات.

لم يكن لدي الوقت للعمل على هذا. أنا أيضًا لست معتادًا على كود grafana ، لذا إذا كان شخص آخر مهتمًا ، فلا تتردد في أخذه. إذا لم يكن الأمر كذلك ، فسأخذ طعنة عندما أحصل على الوقت.

+1

+1

+1

torkelo أي فرصة للحصول على هذا في الإصدار القادم؟ سيكون من الرائع جدًا أن تدع الفرق تدور في طريقها عبر جميع التطبيقات التي تشغلها.

davidkarlsen ، لا يوجد طلب سحب لهذه الميزة ونحن في مرحلة تجريبية ، وهذا أمر مستبعد جدًا. لا يتم تنفيذ طلبات الميزات ما لم يعمل عليها شخص ما ، وليس على علم بأي شخص يعمل على ذلك.

آه - لقد كنت سريعًا بعض الشيء - يبدو أن https://github.com/grafana/grafana/pull/2841 حصلت على شوط بعيد ولكن تم التخلي عنها بعد ذلك ؛- (

+1

+1

+1

+1

+1

ماذا عن استخدام سلسلة استعلام لوحة القيادة PLUS في قائمة التشغيل؟
سيؤدي هذا "تلقائيًا" إلى إضافة جميع المتغيرات والنطاق الزمني.

في المثال الخاص بي سيكون هذا
?orgId=1&var-DATACENTER=dc1&var-FQDN=All&from=now-2d&to=now

ما حدث ... استغرق الأمر ما يقرب من 4 سنوات والميزة لا تضيف رمزًا رئيسيًا ..... هذا سخيف للغاية

هذا أمر لا بد منه!

+1

لا أفهم لماذا لم يتم إطلاق هذه الميزة حتى الآن ...

+1

+1

أي تقدم في هذه الميزة؟ هذا أمر لا بد منه. بدون هذا ، تكون قوائم التشغيل جيدة تقريبًا مثل عديمة الفائدة ، على الأقل في حالتي.

أود أيضًا أن أرى هذه الميزة - أضطر حاليًا إلى تكرار لوحات المعلومات لهذا الغرض

كما هو مذكور أعلاه ، اضطررت إلى تكرار عدة شاشات فقط لجعل قائمة التشغيل قابلة للاستخدام. هذه الميزة ستكون رائعة.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

بالنظر إلى مدى الاهتمام الذي تتمتع به هذه الميزة ، من العار أنه لم يتم إحراز أي تقدم.
costimuraruutkarshcmu، هل تعرف حالة من هذا الطلب؟ هل يجب أن نفكر في انتظار هذه الميزة أم يجب أن نبحث عن بدائل؟

فقط ادخل ليقول إننا نرغب حقًا في دمج هذه الميزة أيضًا!

سأجربها مرة أخرى هذا الشهر!

الحل البديل إذا كنت بحاجة إلى عرض لوحات معلومات متعددة مع المعلمات هو إنشاء ملف html يعرض لوحات المعلومات في إطارات iframes وتدويرها باستخدام نص JS بسيط. هذا ما أستخدمه لتدوير لوحات معلومات grafana على جهاز الراسبي الخاص بي.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Grafana dashboard rotator</title>

    <style>
        #title {
            position: fixed;
            right: 20px;
            top: 10px;
            color: rgba(255, 0, 0, 0.5);
            background-color: rgba(0, 0, 0, 0.7);
            padding: 10px;
            font-weight: bold;
            font-size: 6em;
            font-family: sans-serif;
            margin: 0;
        }

        body,
        html {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            position: relative;
        }

        iframe {
            width: 100%;
            height: 100%;
            border: 0;
        }

        #timer {
            position: fixed;
            bottom: 10px;
            right: 20px;
            color: rgba(255, 0, 0, 0.5);
            background-color: rgba(0, 0, 0, 0.7);
            padding: 10px;
            font-weight: bold;
            font-size: 2em;
            font-family: sans-serif;
            margin: 0;
        }
    </style>
</head>

<body>

    <h1 id="title"></h1>
    <iframe x-name="SLA PROD EU" src="https://mygrafana.example.com/services-availability?orgId=1&var-ds=Graphite-EU&var-env=prod-eu&var-package=cds-red-bull-high-touch&var-service=All&refresh=30s&from=now-1h&to=now"></iframe>
    <iframe x-name="SLA PROD US" src="https://mygrafana.example.com/services-availability?services-availability?from=now-1h&orgId=1&refresh=30s&to=now&var-ds=Graphite&var-env=prod&var-package=cds-cds&var-service=All"></iframe>
    <iframe x-name="REQUESTS EU" src="https://mygrafana.example.com/services-details?orgId=1&from=now-24h&to=now&var-ds=Graphite-EU&var-env=prod-eu&var-service=All&refresh=30s"></iframe>

    <small id="timer"></small>
    <!-- ROUND ROBIN SCRIPT -->
    <script>

        ; (function (globals) {

            //UMD
            if (typeof define !== 'undefined' && define.amd) { //require.js / AMD
                define([], function () {
                    return rr
                })
            } else if (typeof module !== 'undefined' && module.exports) { //CommonJS
                module.exports = rr
            } else { //script / browser
                globals.rr = rr
            }

            function rr(arr, lastIndex) {
                if (!Array.isArray(arr)) throw new Error("Input is not an array.")
                if (arr.length === 0) return null

                if (arr._rr == null) {
                    arr._rr = 0
                    return arr[0]
                }

                if (arr.length === 1)
                    return arr[0]

                if (typeof lastIndex == 'number')
                    arr._rr = lastIndex

                //is outside of range?
                if (arr._rr >= arr.length - 1 || arr._rr < 0) {
                    arr._rr = 0
                    return arr[0]
                } else {
                    arr._rr += 1
                    return arr[arr._rr]
                }
            }

            rr.splice = function (arr, idx, len) {
                if (!Array.isArray(arr)) throw new Error("Input is not an array.")
                if (arr.length === 0) return

                arr.splice(idx, len);

                if (arr._rr == null) {
                    arr._rr = 0
                    return;
                }

                if (arr._rr >= idx)
                    arr._rr -= 1
            }

            rr.spliceCurrent = function (arr, len) {
                rr.splice(arr, arr._rr, len)
            }

        })(this);
    </script>


    <!-- ROTATOR -->
    <script>
        const interval = 10000; //dashboard switch interval
        const initializingTime = 60000; //initializing time
        const iframes = document.getElementsByTagName('iframe')
        const arr = [...iframes];
        let last = null;

        let count = initializingTime / 1000;
        document.getElementById('title').innerText = `Initializing... (${count}s)`

        const initializingTimer = setInterval(() => {
            count = count > 0 ? count -= 1 : 0;
            document.getElementById('title').innerText = `Initializing... (${count}s)`
        }, 1000)


        let switcherTimer;
        const switcher = () => {
            if (switcherTimer) {
                clearInterval(switcherTimer);
            }

            let count = interval / 1000;
            switcherTimer = setInterval(() => {
                count = count > 0 ? count -= 1 : 0;
                document.getElementById('timer').innerText = `(${count}s)`
            }, 1000)

            const curr = rr(arr)
            curr.scrollIntoView();
            document.getElementById('title').innerText = `${curr.attributes['x-name'].value} (${arr._rr + 1}/${arr.length})`
        }

        setTimeout(() => {
            clearInterval(initializingTimer);

            document.getElementById('title').innerText = `${arr[0].attributes['x-name'].value} (1/${arr.length}) `

            switcher();
            setInterval(switcher, interval)

        }, initializingTime /*give dashboards some time to load*/)

    </script>


    <script>
        //Interval to refresh whole page once per 2 hours. To prevent memory leaks.
        setInterval(() => {
            window.location.reload()
        }, 7200000)
    </script>

</body>

</html>

يمكنك تعيين عنوان url محدد للوحة التحكم في سمة src الخاصة بـ iframe.

    <iframe x-name="SLA PROD EU" src="https://mygrafana.example.com/services-availability?orgId=1&var-ds=Graphite-EU&var-env=prod-eu&var-package=cds-red-bull-high-touch&var-service=All&refresh=30s&from=now-1h&to=now"></iframe>

تم تعيين الفاصل الزمني للدوران بالمللي في const interval = 10000 .
بالطبع يمكنك إضافة المزيد من إطارات iframe أيضًا.

5 سنوات مفتوحة ، هل سيتم إصدار هذا الرمز في أي وقت؟

كنت أتمنى أن أرى هذا في 6 ، لأكون صادقًا .. :)

+1 آخر ، أي تحديث على هذا؟

: cake: للاحتفال بالذكرى السنوية الخامسة لهذا الإصدار.

هل يمكننا الحصول على تحديث؟

مرحبًا ، إنها ميزة مهمة جدًا ، هل هناك أي تحديثات على هذا؟

أنا متأكد من أن هذا لن يحدث أبدًا

أرغب في استخدام grafana لمراقبة حوالي 30 خادمًا باستخدام نموذج لوحة dahboard واحد.
بدون ذلك ، لا بد لي من تغيير 30 نموذجًا كل مرة أريد تحديثًا للقالب الخاص بي.

سيكون هذا الخيار مفيدًا جدًا

:) في عالم الخدمات المصغرة ، سيكون من الصعب جدًا أن يكون لديك لوحة تحكم لكل خدمة .. سيكون هذا الخيار مفيدًا جدًا وسهل مراقبة خدماتنا بدلاً من وجود العشرات من لوحات التحكم فقط لتتمكن من عرضها في قائمة التشغيل.

سيكون حقا ميزة مفيدة.

+1

+1 - ستكون ميزة مفيدة

+1

+1

+1 ؛ ما هو الوضع على هذا؟

+1

+1

+1

+1

+1

+1
سيكون هذا مفيدًا جدًا حقًا .. من المحزن أن هذا الطلب قد مضى عليه 5 سنوات بالفعل

+1

+1 لهذا.

سيكون من الجيد أيضًا أن يكون لديك ربط باكتشاف خدمة Prometheus بحيث يمكن ملء مثيل $ وتوسيعه تلقائيًا في قائمة التشغيل. بهذه الطريقة عندما تكون المثيلات في وضع التشغيل / غير متصل ، ستتم إضافتها / إزالتها تلقائيًا من قائمة التشغيل.

ستكون هذه ميزة مفيدة جدًا أيضًا في وضع Kiosk.

+1

هل يمكن لأي شخص أن يخبرني إذا تمت إضافة هذه الميزة؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات