لمراقبة أداء الخوادم عن بُعد ، يستخدم المحترفون أنظمة برامج خاصة ، مثل
Zabbix أو
Icinga . ولكن ، إذا كنت مالكًا مبتدئًا أو مسؤولًا عن موقع واحد أو موقعين على الإنترنت به حمولة صغيرة ، فلا داعي لأنظمة مراقبة كبيرة. المعلمة الرئيسية هي ما إذا كان الموقع يخدم المستخدمين بسرعة. لذلك ، يمكنك مراقبة عمل الموقع باستخدام برنامج بسيط من أي جهاز كمبيوتر متصل بالإنترنت.

دعنا نكتب هذا النص الآن - أبسط مراقبة لتوافر وسرعة الموقع. يمكن تشغيل هذا البرنامج على كمبيوتر منزلي وهاتف ذكي وما إلى ذلك. يحتوي البرنامج على وظيفتين فقط:
- يظهر على الشاشة الوقت الذي يمنح فيه موقعك صفحات المستخدمين ،
- في حالة الاستجابات البطيئة للموقع أو الأخطاء ، يكتب البرنامج البيانات إلى ملف ("سجل" ، أو ملف سجل). تستحق هذه البيانات التحقق من وقت لآخر لإصلاح المشكلات عندما تبدأ للتو. لذلك ، سنحرص على تسجيل هذه السجلات في شكل واضح ومناسب للعرض السريع.
سوف أصف كل خطوة بالتفصيل حتى يتمكن المبتدئ الذي لا يعرف سوى القليل من كتابة ملفات الدُفعات (الخفافيش و cmd على DOS و Windows ، على أنظمة مثل UNIX) من اكتشافها دون أي مشاكل ويكون قادرًا على تكييف البرنامج النصي مع احتياجاته.
لكنني أطلب منك عدم استخدام هذا البرنامج النصي بدون تفكير ، لأنه إذا تم استخدامه بشكل غير صحيح ، فقد لا يعطي نتائج مناسبة ، وبالإضافة إلى ذلك ، تلتهم الكثير من الحركة .
سوف أصف برنامج نصي لنظام التشغيل مثل Linux واستخدامه على جهاز كمبيوتر منزلي. من خلال نفس المبادئ ، يمكن القيام بذلك على منصات أخرى. وبالنسبة لأولئك الذين ينظرون للتو إلى إمكانيات Linux ، قد يكون مثال آخر مثيرًا للاهتمام ، ما هي الأداة البسيطة والقوية الموجودة في نصوصها.
1. المنظمة أولا
سنقوم بإنشاء مجلد منفصل لهذا البرنامج وإنشاء 3 ملفات فيه. على سبيل المثال ، لديّ هذا المجلد / home / me / Progs / iNet / monitor (هنا أنا اسم المستخدم الخاص بي ، Progs / iNet هو مجلدي للبرامج المتعلقة بالإنترنت ، والشاشة هي اسم هذا البرنامج ، من word monitor ، أي نظرًا لأنني المستخدم الوحيد لهذا الكمبيوتر ، فإنني أحتفظ بهذه الملفات بين مجلداتي الشخصية (/ الرئيسية) في قسم منفصل من القرص ، مما يسمح لي بحفظها عند إعادة تثبيت النظام). في هذا المجلد سيكون هناك ملفات:
- README.txt - فيما يلي وصف (في حالة التصلب): ما نوع البرنامج أو معلومات الخلفية الخاصة به ، إلخ.
- mon.sh - سيكون هناك برنامج يستطلع الموقع.
- server.log - هنا سوف تسجل مؤشرات حالة الموقع. في حالتنا ، هذا هو ببساطة تاريخ ووقت ومدة استجابة الموقع (بالإضافة إلى معلومات إضافية إذا كان الخادم يستجيب مع وجود خطأ في طلبنا).
(لتسهيل عملية التحرير واستعادة الملفات ، إن وجدت ، يمكنك إدراج هذا المجلد في نظام التحكم في إصدار Git ، ولن أصفه هنا).
2. بإصرار واسترخاء
سنقوم بتشغيل ملف mon.sh بفاصل زمني صغير منتظم ، على سبيل المثال ، 60 ثانية. لقد استخدمت الأداة القياسية التي يوفرها نظام التشغيل (بشكل أكثر دقة ، بيئة سطح المكتب).
بيئة سطح المكتب الخاص بي هي Xfce. هذا هو واحد من الخيارات الأكثر شعبية لنظام التشغيل Linux. يعجبني Xfce لأنه يتيح لك تخصيص البيئة بالكامل تقريبًا - بالطريقة التي تريدها تمامًا. في الوقت نفسه ، Xfce أكثر إحكاما وأسرع إلى حد ما من نظامين آخرين معروفين - Gnome و KDE. (هناك خيارات أخرى مهمة أيضًا - على سبيل المثال ، بيئة LXDE أسرع وأسهل من Xfce ، ولكنها ليست غنية بالميزات حتى الآن).
الأداة التي نحتاجها ، في حالة Xfce ، هي مكون إضافي للوحة عمل Generic Monitor. عادةً ما يكون مثبتًا بالفعل ، ولكن إذا لم يكن كذلك ، فسيجده برنامج التثبيت بسهولة: "Genmon" (الوصف:
xfce4-genmon-plugin ). هذا هو المكون الإضافي الذي يمكن إضافته إلى اللوحة وضبطه في الإعدادات: (1) الأمر المطلوب تنفيذه و (2) وتيرة تنفيذه في ثوانٍ. في حالتي ، الأمر:
/home/me/Progs/iNet/monitor/mon.sh
(أو ، على قدم المساواة ، ~ / Progs / iNet / monitor / mon.sh).

3. عندما لا يكون البرنامج بعد هناك بالفعل أخطاء
إذا كنت قد أكملت كل هذه الخطوات الآن - إنشاء ملفات وتشغيل المكون الإضافي في اللوحة - فسترى نتيجة بدء تشغيل برنامجنا هناك (رسالة الخطأ: file mon.sh ليس برنامجًا). ثم ، لجعل الملف قابل للتنفيذ ، انتقل إلى المجلد الخاص بنا وقم بتعيين إذن لتشغيل -
- أو مدير الملفات: خصائص - أذونات - السماح بتشغيل هذا الملف كبرنامج ؛
- أو أمر من المحطة: chmod 755 mon.sh
وفي الملف نفسه ، نكتب الأسطر الأولى:
بدلاً من "example.ru" ، استبدل اسم موقعك الذي ستلاحظ حالته. وإذا كان يعمل على http ، فضع http بدلاً من https. يشير السطر #! / Bin / bash إلى أن هذا البرنامج النصي سيتم تشغيله بواسطة برنامج Bash (ربما يكون
bash هو الأكثر شيوعًا لتنفيذ البرامج النصية على Linux). للعمل من خلال قذيفة أخرى ، تتم الإشارة إليه بدلاً من Bash. الأسطر المتبقية مع حادة في البداية هي التعليقات. السطر الأول من الكود نفسه هو
info = $ () وفي هذه الأقواس هو الأمر curl مع المعلمات. مثل هذا البناء - شيء = $ (شيء) - يعني "تنفيذ الأمر بين قوسين وتعيين النتيجة للمتغير على اليسار." في هذه الحالة ، قمت بتسمية المتغير "info". يرسل هذا الأمر بين قوسين - curl (في المصطلح المشار إليه من قبل البعض باسم "Kurl") - طلبًا إلى الشبكة على العنوان المحدد ويعيد استجابة الخادم إلينا. (قال أحد معارفي ، موضحًا: "كيف تهمس الرافعة - وتتلقى استجابة من رافعة أخرى في السماء.") النظر في الخيارات:
curl -I -o /dev/stdout -w '%{time_total}' --url https://example.ru/ -m 9 -s
- أنا يعني أننا لا نطلب الصفحة بأكملها ، ولكن فقط "رؤوس HTTP". في كل مرة لا نحتاج إلى نص الصفحة بالكامل للتأكد من أن الموقع يعمل. نظرًا لأننا سوف نتحقق من الموقع في كثير من الأحيان ، فمن المهم جعل حجم البيانات المرسلة أصغر ما يمكن. هذا يوفر كلاً من حركة المرور والكهرباء والحمل على الخادم والحياة البرية.
بالمناسبة ، انتبه إلى مقدار حركة المرور الزائدة لديك (غير المستخدمة شهريًا) على الاستضافة. أدناه سترى مقدار البيانات التي يتم إرسالها ويمكنك حساب ما إذا كان لديك احتياطيات كافية ؛ إذا كان هناك أي شيء ، يمكن زيادة فترة التحقق من الموقع إلى 5 أو 10 أو حتى 30-60 دقيقة. على الرغم من أنه في هذه الحالة ، لن تكون الصورة كاملة تمامًا - وقد تمر الانقطاعات الطفيفة دون أن يلاحظها أحد ؛ ولكن بشكل عام ، عند مراقبة موقع ما ، من المهم اكتشاف المشكلات طويلة المدى أكثر من مقاطعة واحدة. أيضا ، ما حركة المرور التي يمكنك تحملها على الكمبيوتر المتصل؟ في حالتي - كمبيوتر سطح مكتب مزود بحركة مرور غير محدودة - هذا ليس مهمًا جدًا ؛ لكن بالنسبة لجهاز محمول أو تعريفة ذات حدود ، فإن الأمر يستحق الحساب وربما يزيد من فترات التفتيش.
4. الخطوة تتبع الخطوة باستثناء الخطوة الأولى
دعنا نذهب أبعد من ذلك:
-o / dev / stdout تعني "إرسال الاستجابة التي تلقاها Kurl من الخادم إلى مثل هذا الملف ومثله." وفي هذه الحالة ، ليس هذا ملفًا على القرص ، ولكن / dev / stdout - جهاز إخراج قياسي. عادةً ما يكون "جهاز الإخراج القياسي" هو شاشتنا حيث يمكننا رؤية نتائج البرنامج. لكن في البرنامج النصي ، غالبًا ما نوجه هذا "الإخراج القياسي" لمزيد من المعالجة (الآن - احفظه في متغير المعلومات). وبعد ذلك ، سنرسل ، في معظم الأحيان ، نتائج الفرق إلى المتغيرات ، أو نمررها إلى الفرق التالية في سلسلة. لإنشاء سلاسل من الأوامر ، استخدم عامل توجيه الإخراج ("Pipe") ، يتم عرضه على هيئة شريط عمودي ("|").
-w '٪ {time_total} eyayu' : هنا -
w يعني "التنسيق وإعطاء مثل هذه المعلومات الإضافية إلى جهاز إخراج قياسي." على وجه التحديد ، نحن مهتمون بـ time_total - كم من الوقت استغرق نقل استجابة الطلب بيننا وبين الخادم. ربما تعلم أن هناك أمرًا أكثر بساطة ، ping ، لطلب خادم بسرعة والحصول على استجابة منه ، pong. لكن Ping يتحقق فقط من أن خادم الاستضافة قيد الحياة ، وأن الإشارة تتراجع جيئة وذهابا لفترة طويلة. يوضح هذا الحد الأقصى لسرعة الوصول ، لكنه لا يخبرنا بأي شيء عن مدى سرعة إنتاج المحتوى الحقيقي للموقع. يمكن أن يعمل Ping بسرعة ، وفي الوقت نفسه ، قد يتباطأ الموقع أو لا يعمل على الإطلاق - بسبب الحمل الكبير أو بعض المشكلات الداخلية. لذلك ، نحن نستخدم كورلا بالضبط ونحصل على الوقت الفعلي الذي يعرض فيه الخادم المحتوى الخاص بنا.
(ومن خلال هذه المعلمة ، يمكنك تحديد ما إذا كان الخادم يعمل بكفاءة لمهامك ، وما إذا كان وقت الاستجابة المعتاد مناسبًا للمستخدمين. لا توجد مشاكل - على سبيل المثال ، تباطأت مواقعي على العديد من مواقع الاستضافة بمرور الوقت ، واضطررت إلى البحث عن استضافة أخرى).
هل لاحظت الحروف الغريبة "eyu" بعد {time_total}؟ لقد أضفتهم كتسمية فريدة ، والتي ربما لن تكون في الرؤوس المرسلة إلينا من الخادم (على الرغم من افتراض أن مستخدمي برامجك سيكونون سيئين ولن يكونوا سيئين والطريق إلى الهاوية. لا تفعل هذا! .. أو عندما تفعل ، على الأقل تخجل منك). باستخدام هذا التصنيف (آمل) ، يمكننا بسهولة سحب قطعة المعلومات التي نحتاجها من مجموعة كاملة من الخطوط في متغير المعلومات. لذلك ، سوف يعطينا
حليقة -w '٪ {time_total} ehayu' (مع المعلمات المتبقية صحيحة) شيء من هذا القبيل:
0.215238eyayu
هذا هو عدد الثواني التي استغرقها الوصول إلى الموقع ، بالإضافة إلى التصنيف الخاص بنا. (بالإضافة إلى هذه المعلمة ، في متغير المعلومات ، سنهتم بشكل أساسي بـ "رمز الحالة" - رمز الحالة ، أو ببساطة رمز استجابة الخادم. عادة ، عندما يصدر الخادم الملف المطلوب ، يكون الرمز "200". عندما لا يتم العثور على الصفحة ، هذا هو 404 الشهير. عندما يكون هناك أخطاء على الخادم ، وغالبا ما يكون 500 مع شيء).

5. الإبداع - والد الاختبار الذاتي
المعلمات المتبقية من حليقة لدينا هي كما يلي:
--url https://example.ru/ -m 9 -s
ماذا يعني: أن تطلب مثل هذا العنوان ومثله ؛ الحد الأقصى لوقت الاستجابة هو 9 ثوانٍ (يمكنك تعيين وقت أقل ، لأن المستخدم النادر سينتظر استجابة من الموقع لفترة طويلة ، وسيجد الموقع سريعًا لا يعمل). و "-s" تعني الصمت ، أي أن الضفيرة لن تخبرنا بتفاصيل غير ضرورية.
بالمناسبة ، لا يوجد عادةً مساحة كبيرة على لوحة سطح المكتب ، لذلك ، من الأفضل تصحيحها من الجهاز الطرفي (في المجلد الخاص به باستخدام الأمر ./mon.sh) لتصحيح أخطاء البرنامج النصي. وللمكون الإضافي للوحة ، سنضع فترة توقف طويلة بين إطلاق الأوامر - على سبيل المثال ، 3600 ثانية.
للتصحيح ، يمكننا تشغيل هذا الضفيرة دون تأطير الأقواس ونرى ما ينتج. (من هذا وحساب استهلاك حركة المرور). سنرى بشكل رئيسي مجموعة من رؤوس HTTP ، مثل:
HTTP/1.1 302 Found Server: QRATOR Date: Sun, 11 Feb 2019 08:06:57 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Keep-Alive: timeout=15 X-Powered-By: PHP/7.2.14-1+ubuntu16.04.1+deb.sury.org+1 Location: https://habr.com/ru/ X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=63072000; includeSubDomains; preload X-Cache-Status: HIT 0.033113
السطر الأول هنا نرى "HTTP / 1.1 302 موجود" - مما يعني: بروتوكول نقل البيانات هو "HTTP / 1.1" ، رمز استجابة الخادم هو "302 موجود". عند طلب صفحة أخرى ، قد يكون هذا الرمز "301 نقل دائمًا" ، إلخ. في مثال آخر ، الاستجابة العادية لخادمي هي "HTTP / 2 200". إذا كان الخادم الخاص بك يستجيب عادةً بشكل مختلف ، فاستبدل هذه الإجابة بدلاً من "HTTP / 2 200" في هذا البرنامج النصي.
السطر الأخير ، كما نرى ، يعرب Kurl ، عن عدد الثواني التي تلقينا فيها استجابة الخادم ، مع التصنيف المخصص لنا.
مثير للاهتمام: يمكننا تهيئة الموقع بحيث يقدم تقارير عن طلباتنا (وفقط عليها!) معلومات إضافية حول حالته - على سبيل المثال ، في رأس HTTP "محلية الصنع". دعنا نقول ما هي الأحمال على معالجات الموقع ، وكم مساحة الذاكرة الخالية والذاكرة الموجودة به ، ومدى سرعة عمل قاعدة البيانات. (بالطبع ، يجب أن يكون الموقع ديناميكيًا ، أي ، يجب معالجة الطلبات بواسطة البرنامج - في PHP أو Node.JS ، وما إلى ذلك. هناك خيار آخر هو استخدام برنامج خاص على الخادم). لكن ربما لا نحتاج إلى هذه التفاصيل بعد. الغرض من هذا البرنامج هو ببساطة مراقبة الأداء العام للموقع بانتظام. في حالة حدوث مشاكل - سنتعامل بالفعل مع التشخيصات بوسائل أخرى. لذلك ، نكتب الآن أبسط البرامج النصية التي ستعمل مع أي موقع ، حتى أنه ثابت ، وبدون إعدادات إضافية على الخادم. في المستقبل ، إذا رغبت في ذلك ، سيكون من الممكن توسيع قدرات البرنامج النصي ؛ في غضون ذلك ، وجعل الأساس.
السلسلة
errr = $ (echo $؟) يعني: اكتب نتيجة الأمر "echo $؟" إلى متغير errr. يعني الأمر echo طباعة بعض النص على جهاز الإخراج القياسي (stdout) والأحرف "$؟" - هذا هو رمز الخطأ الحالي (المتبقي من الأمر السابق). لذلك ، إذا تعذر على حليقة لدينا الوصول إلى الخادم فجأة ، فسوف يقدم رمز خطأ غير صفري ، وسنتعرف على ذلك عن طريق التحقق من متغير errr.
6. النفعية
أنا هنا أريد أن أستنبط قليلاً من الأمور الفنية لجعل قراءة النص أكثر إثارة. (إذا كنت لا توافق ، تخطي ثلاث فقرات). سأقول إن كل نشاط بشري مناسب بطريقته الخاصة. حتى عندما يقوم شخص بضرب جبهته عن قصد ضد جدار (أو على الأرض ... على لوحة المفاتيح ...) ، فإن هذا له نفعه الخاص. على سبيل المثال ، يوفر منفذاً للطاقة العاطفية - ربما ليس بالطريقة "الأفضل" ، ولكن كيف يمكنه ذلك. (نعم ، ومفهوم "الأفضل" لا معنى له من وجهة نظر
هذه اللحظة في هذا المكان - لأن الأفضل والأسوأ ممكنان فقط بالمقارنة مع شيء آخر).
أنا أكتب هذا النص الآن ، بدلاً من الحالات الأكثر أهمية بالنسبة لي - لماذا؟ أولاً ، من أجل إجراء التقييم والمراجعة والفرز الداخلي من خلال أرفف ما تعلمته في كتابة البرامج النصية خلال هذين اليومين ... أخرجه من ذاكرة الوصول العشوائي وقم بتخزينه. ثانياً ، بهذه الطريقة لدي القليل من الراحة ... ثالثًا ، آمل أن يكون هذا التوضيح المضغ مفيدًا لشخص آخر (وأنا شخصياً ، ربما في يوم من الأيام). كيف ، لا يهم إذا كان الأفضل ، ولكن تذكير متميز حول موضوع البرامج النصية وطلبات الخادم.
شخص ما ، ربما ، سوف يصحح لي شيء ، والنتيجة ستصبح أفضل. سيحصل شخص ما على معلومات مفيدة. هل هو مناسب؟ ربما ... هذا ما يمكنني فعله الآن وأفعله. غدًا ، ربما سأستيقظ وأعيد تقييم الإجراءات الحالية ... لكن هذا التقييم سيوفر أيضًا شيئًا مفيدًا للحياة اللاحقة.
لذلك ، عند تلبية الطلب ، لدينا قسمان من البيانات:
- كتلة المعلومات الرئيسية من الخادم (إذا كانت استجابة الخادم بالطبع) ، فقد كتبناها في متغير المعلومات ؛
- رمز خطأ الأمر curl (0 ، في حالة عدم وجود أخطاء) - مكتوب إلى errr متغير.
على وجه التحديد لأن كل من الإجماليات - كل من المعلومات ورمز الخطأ - ضروريان ، لقد كتبتهما في متغيرات ، ولم يتم تمرير مجاميع كورل على الفور إلى فرق أخرى عبر الأنابيب. ولكن الآن في هذا السيناريو حان الوقت لتسلق الأنابيب:
code=$(echo "$info" | grep HTTP | grep -v 'HTTP/2 200') date=$(echo "$info" | grep -i 'date:') dlay=$(echo "$info" | grep | sed -e 's///')
في كل من هذه السطور نكتب متغيرًا آخر - نحفظ نتائج تنفيذ الأوامر. وفي كل حالة ليس فريقًا واحدًا ، بل سلسلة ؛ الرابط الأول هو نفسه في كل مكان:
echo "$ info" - يعود إلى دفق جهاز الإخراج القياسي (stdout) وهو كتلة المعلومات التي حفظناها ، تلقيناها من curl. أبعد من الأنبوب ، يتم تمرير هذا الدفق إلى أمر grep. يختار Grep من جميع الأسطر فقط الخطوط التي يطابق فيها النمط. (الخيار -i يعني "حالة غير حساسة"). كما ترون ، في الحالة الأولى نختار السطر الذي يحتوي على "HTTP". يتم تمرير هذا الخط ، الذي تم سحبه من كومة الباقي ، إلى أسفل توجيه الإخراج إلى الأمر
grep -v 'HTTP / 2 200' . هنا ،
الخيار -v هو عكس الخيار
-e ، فإنه يقوم بتصفية الخطوط حيث يوجد مثل هذا النمط. الإجمالي ، في متغير الرمز سيكون هناك خط مع رمز استجابة الخادم (مثل "HTTP / 1.1 302 موجود") ، ولكن فقط إذا لم يكن "HTTP / 2 200". لذلك أقوم بتصفية الخطوط التي يرسلها موقعي في الحالة العادية ، وحفظ فقط الإجابات "غير الطبيعية". (إذا كان لديك استجابة خادم عادية ، فاستبدلها هناك).
وبالمثل ، في التاريخ المتغير نكتب السطر الذي أصدر فيه الخادم التاريخ والوقت الحاليين. هذا شيء مثل "
date: Sun ، 11 Feb 2019 08:06:57 GMT " (عادةً في المنطقة الزمنية GMT ، ويعرف أيضًا باسم UTC). نحن بحاجة إلى كتابة التاريخ (ولكن مرة واحدة فقط في اليوم!) في ملف السجل الخاص بنا ("سجل حالة الخادم") - server.log. وفي نفس الوقت سوف نعرض هذه المرة على الشاشة. يمكنك كتابة وقت للتاريخ في السجل من جهاز الكمبيوتر الخاص بك ، ولكن للراحة نأخذ هذه ، لأن الخادم أرسلها على أي حال.
إنه مشابه لمتغيرنا الثالث ، dlay (من الكلمة الإنجليزية تأخير - تأخير). نختار السطر الموجود في تسمية المناقصات "eeyu" والذي أبقينا فيه على مدة انتظار الرد من الخادم. نقوم بإزالة هذا التصنيف ، الذي لم يعد مطلوبًا ، باستخدام الأمر
sed - وحفظ النتيجة.
الآن ، إذا قمنا بطباعة هذه المتغيرات للتحقق - على سبيل المثال ، أضف الأسطر إلى برنامجنا النصي:
printf 'errr: %s\n' "$errr" printf 'code: %s\n' "$code" printf '%s\n' "$date" printf 'dlay: %s\n' "$dlay"
يجب أن تحصل على شيء مثل:
errr: 0 code: date: Mon, 11 Feb 2019 12:46:18 GMT dlay: 0.236549
الإجمالي: رمز الخطأ curl هو صفر (مما يعني أنه سار على ما يرام). رمز حالة الخادم - لم يتم تسجيله (كما كان طبيعيًا). التاريخ والوقت. مدة الاستجابة. يبقى عرض ما تحتاجه بشكل صحيح على الشاشة ، وإذا لزم الأمر ، الكتابة إلى ملف.
هذا هو الأكثر إثارة للاهتمام: ماذا ، تحت أي ظروف وكيفية تسجيل؟
7. استنتاجات صعبة
حتى لا تظهر لك المزيد من التفاصيل ، سأخبرك بإيجاز (وهناك
أدلة جيدة كافية على كل هذه الأوامر على الإنترنت). بالمناسبة ، الإيجاز هو أحد الأهداف الرئيسية التي سنحققها عند الكتابة إلى هذا السجل. بعد ذلك سيكون مناسبًا للعرض ولن يشغل مساحة كبيرة على القرص (على عكس السجلات الأخرى التي تنمو بالميغابايت في اليوم).
أولاً: نتأكد من كتابة التاريخ إلى السجل مرة واحدة فقط وليس على كل سطر. للقيام بذلك ، حدد من التاريخ المتغير لدينا بشكل فردي التاريخ الحالي (الحالي) والوقت (الوقت):
curr=$(echo "$date" | sed -e 's/\(20[0-9][0-9]\).*$/\1/') time=$(echo "$date" | sed -e 's/^.*\ \([0-9][0-9]:.*\)\ GMT\r$/\1/')
وننظر أيضًا في الأسطر ذات التواريخ من ملف السجل ونأخذ آخر تاريخ (سابق):
prev=$(cat /home/me/Progs/iNet/monitor/site.log | grep -e 'date:' | tail -1)
إذا كان تاريخنا الحالي (curr) لا يساوي التاريخ السابق (من الملف ، السابق) ، فقد حان يوم جديد (أو ، على سبيل المثال ، كان ملف السجل فارغًا) ؛ ثم اكتب التاريخ الجديد للملف:
if [[ $curr != $prev ]]; then printf '%s\n' "$curr" >>/home/me/Progs/iNet/monitor/site.log printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
... وفي نفس الوقت نسجل المعلومات الحالية: الوقت ، التأخير في تلقي رد من الموقع ، رمز استجابة الموقع (إن لم يكن عاديًا):
printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
سيساعد هذا في التنقل: بدأ مثل هذا اليوم ومثل هذه السرعة للموقع. في حالات أخرى ، دعونا لا نلف الملف بإدخالات غير ضرورية. بالطبع ، سنكتبها إذا حصلنا على رمز حالة خادم غير عادي:
elif [[ -n $code ]]; then printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
واكتب أيضًا إذا كان وقت استجابة الخادم أطول من المعتاد. عادةً ما كان موقعي مسؤولاً عن 0.23-0.25 ثانية ، لذلك أسجل الإجابات التي استغرقت وقتًا أطول من 0.3 ثانية:
elif (( $(echo "$dlay > 0.3" | bc -l) )); then printf '%s %s\n' "$time" "$dlay" >>/home/me/Progs/iNet/monitor/site.log
أخيرًا ، مرة واحدة كل ساعة ، أقوم ببساطة بتسجيل الوقت المستلم من الخادم - كعلامة على أنه على قيد الحياة ، وفي نفس الوقت كنوع من ترميز الملف:
else echo "$time" | grep -e :00: | cat >>/home/me/Progs/iNet/monitor/site.log fi
نحصل على محتويات الملف حيث تساعد العلامات بالسجلات كل ساعة بصريًا ، دون قراءة ، لمعرفة متى يكون الحمل أعلى أو أقل (المزيد من السجلات في الساعة):
19:42:28 0.461214 19:53:29 0.443956 20:00:29 20:09:30 2.156462 20:10:29 0.358294 20:45:29 0.313378 20:51:30 0.563886 20:54:30 0.307219 21:00:30 0.722343 21:01:30 0.310284 21:09:30 0.379662 21:10:31 1.305779 21:12:35 5.799455 21:23:31 1.054537 21:24:31 1.230391 21:40:31 0.461266 21:42:37 7.140093 22:00:31 22:12:37 5.724768 22:14:31 0.303500 22:42:37 5.735173 23:00:32 23:10:32 0.318207 date: Mon, 11 Feb 2019 00:00:34 0.235298 00:01:33 0.315093 01:00:34 01:37:41 5.741847 02:00:36 02:48:37 0.343234 02:56:37 0.647698 02:57:38 1.670538 02:58:39 2.327980 02:59:37 0.663547 03:00:37 03:40:38 0.331613 04:00:38 04:11:38 0.217022 04:50:39 0.313566 04:55:45 5.719911 05:00:39
وأخيراً ، نعرض المعلومات على الشاشة. وأيضًا ، إذا فشل حليقة ، فنحن نعرض ونكتب رسالة حوله (وفي نفس الوقت نقوم بتشغيل Ping وتسجيل الدخول للتحقق مما إذا كان الخادم على قيد الحياة على الإطلاق):
printf '%s\n%s\n%s' "$time" "$dlay" "$code" if (( $errr != 0 )); then date >>/home/me/Progs/iNet/monitor/site.log date printf 'CURL Request failed. Error: %s\n' "$errr" >>/home/me/Progs/iNet/monitor/site.log printf 'CURL Request failed. Error: %s\n' "$errr" pung=$(ping -c 1 178.248.237.68) printf 'Ping: %s\n----\n' "$pung" >>/home/me/Progs/iNet/monitor/site.log printf 'Ping: %s\n' "$pung" fi
استبدل عنوان IP في سلسلة ping بعنوان IP الحقيقي لموقعك.
8. خاتمة
نتيجة العمل:

على اليسار على اللوحة ، يمكنك رؤية الوقت في UTC والاستجابة الحالية للموقع. على اليمين يوجد السجل: يكون مرئيًا للتجمع ، حتى مع التمرير السريع ، خلال الساعات التي كان الحمل فيها أكثر أو أقل. يمكنك أيضًا أن تلاحظ استجابات بطيئة بشكل غير طبيعي (على الرغم من أنه لم يتضح بعد من أين أتت).
هذا كل شيء. تبين أن البرنامج النصي بسيط ، بلوط ، ويمكن تحسينه: العمل على التحسين ، قابلية النقل ، تحسين الإشعارات والعروض ، مع مراعاة الوكيل وذاكرة التخزين المؤقت ...
ولكن بالفعل في هذا النوع من البرامج ، فمن المحتمل أن يعطي فكرة عن حالة موقعك. واجعله موقعًا مناسبًا بحكمة ومفيدًا للناس ولجميع المخلوقات!
النص الكامل للنص مع التعليقات. لا تنس إجراء التغييرات اللازمة! PS. بعد المناقشة (في 02/12/2019):
كما كنت آمل ، كتب الخبراء الكثير من التعليقات المثيرة للاهتمام.
بعد التفكير في الأمر ، يمكنني الإجابة على سؤال
rsashka ، ما هي ميزة هذا البرنامج النصي.
توفر أدوات أخرى ، مثل
NetData (بفضل
tchspprt للنصيحة !) ، مجموعة كبيرة من البيانات التي لن يتم تخزينها لفترة طويلة. NetData هي أداة جيدة عندما تعمل كل يوم ، واحتفظ بمواقع الويب بشكل احترافي. جيد لتشخيص المشاكل الحالية.
سيناريو مثل لي هو أن تراقب أثناء القيام بأشياء أخرى. البرنامج النصي لا يتطلب دراسة وإعدادات خاصة. هذا ليس سيئا للناس العاديين. وتشغل سجلاتها مساحة صغيرة جدًا بحيث لا يمكن مسحها على الإطلاق. يمكن أن تتراكم على مر السنين ، وفي السنوات N + 1 يمكنك أن ترى: "واو ، في عام 2019 ، كان وقت الاستجابة أقل مرة ونصف!"
وهذا هو ، مثل هذا الحل مكانته الخاصة - بشكل رئيسي للمسؤولين غير النظام باستمرار. (كما يقول tchspprt : "إنه يتعلق بكيفية إطعام قطة الجيران في إجازة"). نصحتandreymal طريقة مثيرة للاهتمام لأخذها في الاعتبار ثم عرض تحميل الموقع ، دون أموال إضافية ، وذلك ببساطة من خلال سجلات الوصول على الموقع. ويمكنك بناء رسومات جميلة عليها. من المحتمل أن أجرب هذا الخيار وأنشر على Github ما حدث. نصحunnforgiven بحل آخر مثير للاهتمام - ربما كان حلاً بسيطًا (تثبيت prometheus و blackbox و alermanager عبر ملحن docker) على بلدي بسيطة ، VPS رخيصة ليست كافية لهذه الذاكرة. و Linux مع نواة قديمة - لن يبدأ Docker. لكن شكرا للخيار!نصيحة أخرىtchspprt : الجرافيت + بروميثيوس + جرافانا. أو قم بتزويد البرنامج النصي برسومات جميلة (gnuplot أو rrdtool). توصيMcalexvrn بأداة بسيطة: uptimerobot . شكرا لك
أشكر الجميع على هذه المجموعة من المعلومات! فليكن مفيدًا للناس ...