
قد تحتاج أحيانًا إلى تطبيق نظام مراقبة سريع لخدمة جديدة، ولكنك تفتقر إلى البنية التحتية أو الخبرة اللازمة. في هذا الدليل، سنشرح كيفية تطبيق أداة لمراقبة أي خدمة ويب في غضون نصف ساعة، باستخدام الأدوات المدمجة فقط. ubuntuسنستخدم bash و cron و curl. وسنستخدم Telegram لإرسال الإشعارات.
سيكون أهم ما يميز الكعكة هو المشاركة العاطفية للمستخدمين. تم اختباره على الأشخاص - إنه يعمل.
عندما أنشأنا روبوت محادثة في خدمة التطبيب عن بعد Doctor Nearby لتحديد مستوى ضغط المستخدمين ، احتجنا إلى المراقبة. في غضون ساعتين ، تم إنشاء مشروع صغير ، والذي لا يعمل بشكل رائع فحسب ، بل يضيف أيضًا إيجابية مع رسائله.
أولاً ، دعنا نحصل على مستودع يحتوي على نصوص برمجية:
git clone https://github.com/rshekhovtsov/msms.gitانتقل إلى مجلد msms ثم اعمل فيه.
إذا تم حظر التلغرام ، فاستخدم الوكيل. الخيار الأبسط والأكثر موثوقية هو torsocks:
sudo apt install tor
sudo apt install torsocksكمثال ، لنقم بإعداد مراقبة صفحة البداية google.com في ثلاث خطوات
الخطوة 1. قم بإنشاء روبوت في Telegram واحصل على معرف المستخدم
- في شريط البحث عن جهات الاتصال في Telegram ، نبحث عن :

- نقوم بتشغيله بالزر "ابدأ" ، وأدخل الأمر / newbot وأجب عن الأسئلة. ضع في اعتبارك أن الاسم هو اسم الروبوت الذي سيتم عرضه للمستخدمين ، بينما اسم المستخدم فريد ويجب أن ينتهي بـ "الروبوت":

من بين أشياء أخرى ، سيصدر الروبوت رمزًا مميزًا سريًا لواجهة برمجة تطبيقات HTTP ، والتي تحتاج إلى نسخها وحفظها في ملف telegram-api-key.txt في مجلد msms. - نكتب اسم الروبوت الخاص بنا في شريط بحث التلغرام ، ونشغّله.
- كلمسة أخيرة ، دعنا نضيف أنفسنا إلى قائمة مستلمي إشعارات المراقبة:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shسيعرض البرنامج النصي قائمة بالمكالمات الأخيرة إلى الروبوت ، يجب أن يكون هناك سطر واحد مع معرفنا واسمنا في برقية. نأخذ هذا المعرّف ونحفظه في ملف services / google-Receients.txt. تنسيق الملف: كل سطر هو معرف واحد. مثال:
123456789 987654321
لإضافة مستلم جديد ، عليك أن تطلب منه بدء تشغيل الروبوت في telegram وتشغيل المستلمين setup.sh وإضافة المعرف إلى الملف.
الخطوة 2. إعداد المراقبة
يتم وصف الخدمة من خلال إنشاء ملف ini في مجلد الخدمات. تحتاج إلى تعيين خمس معلمات:
- MSMS_SERVICE_NAME: اسم الخدمة - سيتم استخدامه في التنبيهات وسجل المراقبة.
- MSMS_SERVICE_ENDPOINT: نقطة نهاية الخدمة التي سنتصل بها مع curl.
- MSMS_CURL_PARAMS: خيارات إضافية لـ curl ، انظر المثال أدناه.
- MSMS_EXPECTED: استجابة الخدمة المتوقعة. تستخدم عندما تكون الإجابة قصيرة.
- MSMS_EXPECTED_FILE: اسم الملف مع استجابة الخدمة المتوقعة. إذا تم تحديده ، فسيتم الكتابة فوق MSMS_EXPECTED.
- MSMS_RECIPIENTS: ملف بقائمة مستلمي الإخطار.
يُرجع الطلب إلى google.com ملف html ثابتًا مع إعادة توجيه ، وسنستخدمه كاستجابة الخادم المتوقعة:
curl google.com > services/google-response.htmlلنقم بإنشاء ملف services / google.ini:
MSMS_SERVICE_NAME='google front page'
# service endpoint
MSMS_SERVICE_ENDPOINT='google.com'
# curl parameters
MSMS_CURL_PARAMS='-s --connect-timeout 3 -m 7'
# expected service response
MSMS_EXPECTED_FILE='google-response.html'
# recipients list file
MSMS_RECIPIENTS='google-recipients.txt' В MSMS_CURL_PARAMS يمكنك ضبط كل ما يمكن أن يفعله curl ، بما في ذلك:
- تعطيل رسائل curl حتى لا تتناثر في وحدة التحكم والسجل:
-s - اضبط مهلة الاتصال بالخدمة المحددة (بالثواني):
--connect-timeout 3 - ضبط مهلة الاستجابة:
-m 7 - تعطيل التحقق من الشهادة لـ SSL (على سبيل المثال ، إذا تم استخدام شهادة موقعة ذاتيًا):
--insecure - حدد نوع طلب http:
-X POST - حدد الرؤوس:
-H "Content-Type: application/json" - حدد نص الطلب كسلسلة أو ملف. مثال لملف:
-d @request.json
قمنا بتعطيل التنبيهات وضبطنا المهلات على 3 ثوانٍ. لكل اتصال و 7 ثوان. لتلقي رد من الخدمة.
اهتمام: تحديد قيم المعلمات في علامات الاقتباس الفردية ، كما في المثال. لسوء الحظ ، فإن bash هشة إلى حد ما بهذا المعنى ، ويمكن أن تؤدي فراشة بطريق الخطأ في الاقتباس الخاطئ إلى موت الكون بأخطاء يصعب تشخيصها.
قمنا بإعداد المراقبة. دعنا نتحقق من أن كل شيء على ما يرام:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shيجب أن يعرض البرنامج النصي رسالة مثل:
2020-01-10 12:14:31
health-check "google front page": OKالخطوة 3. قم بإعداد الجدول
قم بإعداد جدول مراقبة في cron:
sudo crontab -eدعنا نضيف سطرًا للتحقق من google.com كل دقيقة:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1دعنا نضيف إشعارًا كل يوم عند الساعة 11.00 ، يؤكد أداء المراقبة نفسها. للقيام بذلك ، قم بتمرير المعلمة اليومية إلى البرنامج النصي:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 هي خدعة قياسية تعيد توجيه الأخطاء إلى تدفق الإخراج الرئيسي. نتيجة لذلك ، سيتم تضمينهم أيضًا في سجل المراقبة.
احفظ التغييرات واخترها بالأمر:
sudo service cron reloadيمكنك قراءة المزيد حول إعداد cron ، على سبيل المثال ، .
وبالتالي ، سيتم إطلاق برنامج نصي للمراقبة كل دقيقة ، والذي سيتصل بـ google.com عبر curl. إذا كانت الاستجابة المستلمة تختلف عن الاستجابة المتوقعة ، فسيرسل البرنامج النصي إشعارًا إلى قائمة المستلمين في برقية. يتم الاحتفاظ بسجل الشيكات في ملف Monitoring.log
إذا احتجنا إلى إضافة خدمة أخرى ، فنحن ببساطة ننشئ ملف ini جديدًا لها في مجلد الخدمات ، وإذا لزم الأمر ، نشكل قائمة منفصلة بالمستلمين. كل شيء آخر سيعمل تلقائيًا.
إذا أصبحت الخدمة التي يتم فحصها غير متاحة ، فسيتم إرسال إشعار كل دقيقة. إذا لم تتمكن من استعادة الخدمة بسرعة ، فيمكنك تعطيل الإشعارات مؤقتًا في خصائص الروبوت في Telegram.
الآن دعونا نلقي نظرة فاحصة على الميزات الإضافية وتنفيذ البرنامج النصي.
قوالب الرسائل والمشاركة العاطفية
لجعل التواصل مع الروبوت أكثر حيوية ، أطلقنا عليه اسم Manechka ، وأضفنا صورة رمزية مناسبة ، وقمنا بإشراك أشخاص محترفين في العلاقات العامة لإنشاء نصوص رسائل. يمكنك استخدام تطوراتنا أو التغيير حسب ذوقك.
على سبيل المثال مثل هذا:

أو حتى مثل هذا:

ولماذا لا؟
يتم تعيين اسم الروبوت والصورة الرمزية عبر .
توجد قوالب الرسائل في المجلد النماذج:
- حليقة Fail.txt: يتم إرسال الرسالة عندما يقوم curl بإرجاع رمز خطأ غير صفري. عادة ما يشير إلى استحالة الوصول إلى الخدمة.
- daily.txt: رسالة يومية تؤكد عمل مراقبة الخدمة.
- فشل الخدمة.txt: الرسالة المرسلة عندما تكون استجابة الخدمة مختلفة عما هو متوقع.
دعنا نحلل إمكانيات التخصيص باستخدام قوالب الرسائل المدمجة كمثال.
تستخدم القوالب الرموز التعبيرية. لسوء الحظ ، لا يعرضها habr.
لتحديد الرموز التعبيرية ، من الملائم استخدام البحث :

يمكنك ببساطة نسخ ولصق الحرف المناسب في نص القالب (هذا هو يونيكود عادي).
- حليقة Fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`استخدمنا اسم الخدمة الذي حددناه (متغير
MSMS_SERVICE_NAME) ومتغير نصي داخلي برمز خروج curl (EXIT_CODE). قمنا أيضًا بتنسيق الرسالة باستخدام الترميز : الأحرف "" تحيط بنص ذي عرض ثابت. نظرًا لأن علامات التنصيص والفاصلات العليا هي أحرف خاصة لـ bash ، فإننا نتخلص منها بـ "". أسماء المتغيرات مسبوقة بعلامة "$".النتيجة:

- فشل الخدمة.txt:
Котёнок, помоги мне... Сервис "$MSMS_SERVICE_NAME" меня расстроил Он работает неправильно, вот что он мне отвечает: `$RESPONSE`النتيجة:

هنا نستخدم متغير نصي آخر:RESPONSE. يحتوي على استجابة الخدمة. - يوميا.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?النتيجة:

دعنا ننتقل إلى تنفيذ البرامج النصية.
نص المراقبة
المراقبة يقوم باكتشاف تلقائي بسيط - يأخذ جميع ملفات ini من مجلد الخدمات وينفذ البرنامج النصي الرئيسي لكل منها مع منطق للتحقق من التنبيهات وإرسالها:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneلإنشاء رسالة يومية حول حالة المراقبة ، يمكن تمرير المعلمة اليومية إلى البرنامج النصي.
يرجى ملاحظة أنه عند بدء البرنامج النصي ، يتغير المجلد الحالي إلى الخدمات. يسمح هذا لملفات ini بتحديد مسارات الملفات المتعلقة بالخدمات.
البرنامج النصي للتحقق وإرسال التنبيهات
msms.sh يحتوي على المنطق الرئيسي للتحقق من الخدمة وإرسال التنبيهات.
العمل مع Telegram:
# telegram endpoint
TG_API_URL="https://api.telegram.org/bot$(cat ../telegram-api-key.txt)/sendMessage"
#################################################################
# send message to telegram
# parameter: message text
#################################################################
function send_message {
for chat_id in $(cat ../$MSMS_RECIPIENTS); do
curl -s -X POST --connect-timeout 10 $TG_API_URL -d chat_id=$chat_id -d parse_mode="Markdown" -d text="$1"
echo
done
}
نقوم بإنشاء عنوان URL للوصول إلى واجهة برمجة تطبيقات Telegram REST باستخدام المفتاح السري المخزن في الملف.
تستخدم وظيفة send_message curl لإرسال رسائل إلى واجهة برمجة تطبيقات REST هذه ، مع أخذ معرف المستلمين من الملف الذي حددناه في ملف ini. في البيانات المرسلة ، نشير إلى أننا نستخدم ترميز الرسائل: parse_mode="Markdown".
دعونا نعرض التاريخ والوقت الحالي ونقوم بتحميل ملف ini.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
سلسلة سحرية . $2 ينفذ ملف ini الذي تم تمريره كمعامل ثاني كبرنامج نصي عادي ، مضيفًا القيم المحددة فيه إلى متغيرات البيئة.
قم بتحميل الاستجابة المتوقعة من الملف إذا تم توفير المعلمة MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
دعنا نتحقق من الخدمة بإرسال الإشعارات ، إذا لزم الأمر:
RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
echo health-check "$MSMS_SERVICE_NAME" FAILED: CURL EXIT WITH $EXIT_CODE
MESSAGE="$(cat ../templates/curl-fail.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then
echo health-check "$MSMS_SERVICE_NAME" FAILED: "$RESPONSE"
MESSAGE="$(cat ../templates/service-fail.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
else
echo health-check "$MSMS_SERVICE_NAME": OK
fi
أولا إسناد إلى متغير RESPONSE نتيجة تنفيذ الأمر curl للخدمة المقدمة.
التعبير EXIT_CODE=$? يضع نتيجة تنفيذ الأمر الأخير في متغير ، أي لفة. إذا كان من الضروري إرسال إشعار ، تتم قراءة النموذج من الملف المقابل وإرساله إلى المستلمين باستخدام send_message.
الكتلة الأخيرة تتعامل مع المعلمة اليومية:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiيرسل رسالة تؤكد صحة المراقبة نفسها.
الحصول على قائمة بهويات المستخدمين
المستلمون-setup.sh يستدعي Telegram API للحصول على أحدث الرسائل الموجهة إلى الروبوت:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyهذا هو المكان الذي يتم فيه استخدام سحر python لعمل إخراج قائمة جميل. هذا اختياري ، يمكنك فقط أخذ المعرف المطلوب من json الذي سيعرضه الأمر:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesاختتام
وبالتالي ، يمكنك استخدام النصوص الجاهزة وقوالب الرسائل ، وإعداد الخدمات التي يمكن ملاحظتها وقوائم الإشعارات فقط ؛ يمكنك إنشاء "شخصية" جديدة للروبوت ؛ ويمكنك اتخاذ قرارك الخاص بناءً على المقترح.
كخيارات لمزيد من التطوير ، فإنه يقترح تكوين وإدارة المراقبة في الروبوت نفسه ، ولكن هنا لا يمكنك الاستغناء عن Python. إذا قام شخص ما بوضعه قبلي ، فأنت تعرف مكان تحميل طلب السحب
المصدر: www.habr.com



