مرحبا يا هبر!
أنا أعمل حاليًا على مشروع messchain blockchain مع فريق من زملائي. من يهتم - راجع الروابط في الملف الشخصي أو اسأل في التعليقات.
يعتبر تطوير Blockchain حقلًا جديدًا وغير معروف ، لذا عليك أحيانًا استخدام أدوات غير قياسية للغاية. أين هو المجهر والأظافر! لذلك ، قررت الاحتفاظ بهذه المدونة لإخبار مختلف الحالات المثيرة للاهتمام عن الممارسة. تدور منشورات اليوم حول كيفية إعداد إشعارات فورية حول حالة العقدة الخاصة بي ، وفي هذه الحالة يمكنني إعادتها بسرعة إلى الحياة.

الخطة التي اتبعتها
كانت المهمة التي حددتها لنفسي هي: في كل مرة تتعطل فيها عقدة أو تتوقف عن العمل ، يجب أن أتلقى إعلامات فورية حول هذا الموضوع. لكننا نعيش في عصر تدريجي ، ونحن معتادون على تلقي جميع المعلومات المهمة على الفور ، أليس كذلك؟
قررت أنه لإنجاز هذه المهمة ، سأربط Zabbix إلى Slack (لدينا أداة مشروع عمل). وفقًا لذلك ، ستقوم Zabbix بمراقبة العقدة وإرسال رسائل خطأ إلي في Slack's PM.
التنفيذ: خطوة بخطوة
الخطوة 1: Zabbix
بالطبع ، ليس لدى Zabbix أدوات مراقبة قياسية مُعدة مسبقًا للعقدة الخاصة بنا. لذلك ، كانت الرغبة الأولى هي تحديد مدى توفر منفذ العقدة باستخدام المفتاح
net.tcp.listen[port].
ولكن هناك واحد "لكن": يحدث أن العقدة نشطة ، وأنها تستمع على المنفذ ، لكنها لا تعمل بشكل صحيح. وهنا واجهت حقيقة أنك تحتاج إلى تحديد العلامة الرئيسية لأداء العقدة.
ماذا يجب أن تفعل نودا؟ صحيح ، تنمو. هنا النمو سيكون العلامة الرئيسية. لذلك ، قررت استخدام المفتاح
system.run[command, mode]
.
جنبا إلى جنب مع
curl -s http://127.0.0.1:36666/api/blocks/getHeight
.
نتيجة لذلك ، تلقينا سلسلة تنسيق JSON من النموذج
{"success":true,"nodeTimestamp":XXXXXXX,"height":XXXXXXX}
جاءت حزمة jq (https://stedolan.imtqy.com/jq/) للمساعدة في حل مشكلة تحليل JSON. نقل نتيجة بسيطة عبر أنبوب
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
{6666 / api / blocks / getHeight
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
.
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
، وبدلاً من الارتفاع الذي طال انتظاره ، تلقينا ردًا يحتوي على معلومات حول أمر
curl
.

المعلومات المكررة تحتاج إلى إزالتها ، ثم جاء المساعد - رمز
-s
، الملقب-
-silent
. نتيجة لذلك ، باستخدام نظام Zabbix
system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height]
system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height]
نحصل على ارتفاع العقدة المطلوب والمريح لمراقبة المشاهدة XXXXXXXXX.

مطلوب مشغل أيضا لتكوين التنبيه المخطط. كانت الخطة على النحو التالي: مقارنة القيم الأخيرة والسابقة ، بحيث يعمل المشغل إذا كان النمو أقل من واحد.
{ADAMANT Node Monitoring:system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height].change()}<1
الخطوة 2. Zabbix إلى سلاك

المهمة التالية هي إعلام المشغل في Slack. كأساس ، أخذت المادة
https://github.com/ericoc/zabbix-slack-alertscript .
التعليمات واضحة ، ولكن استخدام الرموز للتمييز بين درجة الخطورة ليس أمرًا خطيرًا. تسليط الضوء على اللون هو أكثر إثارة للاهتمام. بعد معالجة البرنامج النصي ، يبقى هذا:
url='********************************' username='Server' to="$1" subject="$2" recoversub='^RECOVER(Y|ED)?$' if [[ "$subject" == 'Warning' ]]; then color='#EBFF00' elif [ "$subject" == 'Not classified' ]; then color='#D8E3FF' elif [ "$subject" == 'Information' ]; then color='#0049FF' elif [ "$subject" == 'Average' ]; then color='#FFC200' elif [ "$subject" == 'High' ]; then color='#FF5500' elif [ "$subject" == 'Disaster' ]; then color='#FF0000' else color='#00FF06' fi message="${subject} \n $3" payload="payload={\"attachments\": [{\"color\": \"${color}\", \"text\": \"${message}\"}]}" curl -m 5 --data-urlencode "${payload}" $url
الاستنتاجات
كمعنوي ، بضع كلمات ، لماذا الرصد المريح مهم جدا. كلما علمت عن الموقف بشكل أسرع ، كلما قمت بتصحيحه بشكل أسرع وكلما قلت العواقب. كما يقولون ، لا يعتبر الوقت الذي أثيرت قد انخفض. وفي Slack ، من بين أشياء أخرى ، هناك محادثات جماعية ، بحيث يمكن للفريق الاتصال لحل المشكلة وتنسيق الإجراءات. بالمناسبة ، يحتوي مشروعنا على شفرة مفتوحة المصدر ، ونحن نحترم للغاية المشاريع الأخرى مفتوحة المصدر. أثبتت تجربتي مرة أخرى أن المصدر المفتوح جيد.