كيف قمنا بتحديث Zabbix

صورة


لماذا نحب بروميثيوس ؟ لديه تكوين - لقد بدا كل شيء واضحًا ، والبرنامج يقوم بما قيل لها. يمكنك أتمتة إعدادات المراقبة وتخزينها في VCS ومراجعة الأمر. ضاقت MR الخاص بك ، خط أنابيب عملت ، التكوين الجديد المطبق على بروميثيوس. بشكل عام ، IaC بكل مجدها.


يتحدث عن بروميثيوس. هل تستخدمه في البنية التحتية الحديدية؟ لذلك نحن لا نستخدمها.


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


قبل التاريخ


في أكتوبر 2018 ، تم إصدار Zabbix-4.0 - وهو فرع LTS جديد. وفي منتصف شهر مارس ، بدأنا التخطيط لترقية تثبيت الإصدار 3.4 إليه.


لم تكن هناك أي مشاكل خاصة في الإصدار 3.4:


  • في بعض الأحيان ، لا يعمل بعض LLD في مكان ما وحدث المستحيل ، ومن غير الواضح كيفية تصحيح الأخطاء في إصدار غير مدعوم من قبل المطور
  • تتدفق ذاكرة ساحبات HTTP باستمرار - كنتيجة لذلك رصد النظام الذي تم تكوينه بعناية تسميرًا وبدأ تشغيله مرة أخرى. تم حجب المشكلة عن طريق كمية مناسبة من ذاكرة الخادم. المشكلة معروفة وموثقة .

وفي 4.0 كانت هناك ميزات مثيرة للاهتمام مثل عناصر HTTP الأصلية وفترات الخدمة وليس للمضيف بأكمله.


وأين ينظر إليه ، يجلس على إصدار غير ذي صلة من المراقبة ، ولا حتى على LTS؟ يجب علينا مواكبة.


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


تحديث الجبين


لا يوجد شيء معقد بشكل خاص في تحديث zabbix الآن. طلب خادم ، تكوينه ، دمج نسخة من قاعدة البيانات. ضع حزم المراقبة وأظهر لهم الأساس ، وقم بتشغيل الزباب - وسيعمل على تحديث كل شيء لك بنفسك ، وطرح جميع عمليات الترحيل. حسنًا ، نعم ، ربما تعرف مدى سهولة ترقية Zabbix.


في المجموع ، استغرق ترحيل قاعدة البيانات حوالي 15 دقيقة ، وحتى من دون الكثير من الإساءات. ويبدو أن كل شيء على ما يرام. نعم؟ لا يهم كيف! على الرغم من حقيقة أن عنوان IP الخاص بالخادم الجديد غير مدرج في قوائم الوكلاء البيضاء ، وأنه يجمع البيانات من مضيفات اختبار قليلة فقط ، فإن المستحيل ما زال يحدث.


يرجع الفضل في ذلك إلى مطوري Zabbix ، يجب أن أقول أنهم يحتفظون بكلمتهم - الإصدار 4.2 مدعوم في ذلك الوقت. بعد التحدث في تعقب المشروع ، نكتشف أن سبب المستحيل هو أنه لا يتزامن مع الهيكل المتوقع لأحد جداول قاعدة البيانات.


الشكوك غامضة زحف في. سيكون من المفيد أن نتذكر أنه من الناحية التاريخية تم تقسيم جداول قاعدة البيانات "الأثخن" في Zabbix. أولاً وقبل كل شيء ، لأسباب تتعلق بالأداء ، للتستر بطريقة ما على الكالس المفضل لديك - حذف البيانات التاريخية في RDBMS . قارنا هياكل جميع الجداول في صف واحد في قاعدة بيانات محدثة حديثا والسيطرة - التي أنشأتها الخادم نفسه من نقطة الصفر. تأكدت المخاوف. بالإضافة إلى عدم وجود بعض الثوابت في قاعدة البيانات ، في العديد من الجداول ، العديد من الأعمدة الرقمية من النوع الخطأ.


هذا ، في الواقع ، ليس لدينا مخطط أساسي يدعمه المطورين ، ولكن لدينا "شوكة" خاصة بنا. هناك نوع آخر من بيانات العمود ، وهو:


  • تكلفة التخزين الأخرى متري
  • دقة مختلفة من الأرقام
  • سرعة أخذ العينات / تسجيل مختلفة من المقاييس

فكر للأفضل؟ إنه أمر مشكوك فيه. وفقًا للتجربة السابقة في الدعم الفني ومطوري zabbix ، يمكنهم ضبط نظم إدارة قواعد البيانات.


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


و Zabbix لديه ذلك. لأنه في أبريل 2019 ، خرج zabbix-4.2


النهج الثاني للقذيفة


الميزة الرئيسية 4.2 بالنسبة لنا هي دعم التقسيم خارج الصندوق باستخدام TimescaleDB . بعد التحدث مع ممثلي Zabbix وتعريفنا بنتائج اختبار الدعم الفني لهذه الميزة ( الترجمة على المحور) ، نقرر اختبار التثبيت باستخدام timescaledb ، وبناءً على النتائج ، نتخذ قرارًا بشأن الانتقال. بشكل أكثر تحديدًا: لبعض الوقت ، ستتم كتابة جميع بيانات المراقبة بالتوازي مع الإصدار القديم والجديد. ثم نحول فقط إدخال DNS.


بالطبع ، هذا النهج لا يسمح لك بحفظ البيانات والاتجاهات التاريخية - يتم ملء قاعدة البيانات الجديدة من نقطة الصفر. ولكن هل هم حقا بحاجة؟ التاريخ مهم فقط هنا والآن ، سوف يتراكم بسرعة كبيرة مرة أخرى (انظر إلى prometheus نفسه). فقط فائدة بلا شك من اتجاهات لتخطيط القدرات لا يزال قائما. في أي حال ، يبقى الأرشيف الذي يحتوي على البيانات التي تم جمعها بالفعل معنا (بالنظر إلى الأمام - كان مفيدًا لبعض العملاء). ميزة أخرى لدعم timescaledb في zabbix هي أن فترات فردية من تخزين التاريخ / الاتجاه لم تعد صالحة.


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


إجمالاً ، ستكون الخطوات التالية مطلوبة للهجرة:


  1. تثبيت وتكوين تثبيت المراقبة الثاني
  2. احصل عليه جميعًا كما في التثبيت الأول
  3. التبديل!

يبدو سهلا ، أليس كذلك؟ في الواقع ، الأول ليس صعبًا للغاية ، لأنه خلال النهج السابق كتبنا دورًا لتثبيت خادم zabbix ، يكفي تحميل التكوين فقط. يبدو العنصر الثالث أيضًا بسيطًا - تبديل DNS وجميع وكلاء zabbiks والوكلاء ووكلاء واجهة برمجة التطبيقات والوصول المباشر إلى الإصدار الجديد. ولكن كيف نجعل النقطة الثانية؟


في البداية حاولنا اتباع نهج ساذج. المستوردة من المراقبة الحالية زوجين من القوالب الأكثر استخداما. باستخدام البرامج النصية المكتوبة بالفعل للعمل مع واجهة برمجة التطبيقات ، بدأنا نفس المشاريع في المراقبة الجديدة كما هو الحال في المرحلة الحالية ، وقمنا بالتحرير من خلال أنظمة SCM ، مضيفين عنوان IP الخاص بالجهاز الجديد إلى عامل تصفية الحزمة وإلى توجيهات وكلاء Server / ServerActive . لقد نجح الأمر - بدأ الكثير من المضيفين بالتسجيل في جهازين للمراقبة في وقت واحد ، حيث قام الجهاز الجديد بتعيين قوالب وبدأ بجمع البيانات بالتوازي مع النظام الحالي.


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


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


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


أم أنه ممكن؟


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


  • لا يقوم الكود بتصدير جميع كائنات المراقبة إلى ملفات YAML القابلة للقراءة البشرية (على وجه الخصوص ، وليس كل ما نحتاجه)
  • لا يدعم الكود استيراد الكائنات

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


https://github.com/centosadmin/zabbix-review-export-import


ما تم القيام به:


  • دعم إضافي للعديد من الكائنات الجديدة
  • تم تغيير تنسيق تصدير YAML لمعظم الكائنات الموجودة بحيث يمكن استيرادها
  • وأضاف القدرة على استيراد معظم الكائنات المصدرة
  • وظائف محدودة إضافية لتحويل الكائنات بين الإصدارات المختلفة من zabbix (كما في حالتنا)

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


./zabbix-import.py /path/to/file.yaml 

(من المفترض أن يتم تحديد معلمات المراقبة الهدف في متغيرات البيئة ، لمزيد من التفاصيل ، راجع - - الإخراج المساعد )


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


وهكذا ، ظهر مستودعتان في ملف التعريف الخاص بنا مع مقالب YAML محدثة دوريًا من نسختين للمراقبة ، الحالية والجديدة. وبالطبع ، القدرة على استعادة أي كائن مراقبة تقريبًا في أي وقت.


المراقبة المستمرة للنشر والهجرة نفسها


ونتيجة لذلك ، توصلنا إلى نتيجة مفادها أن gitlab في الموعد المحدد تطلق خط أنابيب على مستودع المراقبة الجديد ، والذي يستورد ، تدريجيًا ، نوعًا من الكائنات تلو الآخر من المراقبة القديمة. هذا سمح لنا باستيراد الغالبية العظمى من الكائنات ومنح فرقنا من المسؤولين وقتًا لإصلاح المشكلات التي ظهرت بهدوء - ولم تتراكم كثيرًا على مر السنين. لم يتم حذف كائنات "إضافية".


يمكن حل المشكلة المتعلقة بكلمات مرور المستخدم - كما يتم تصديرها / استيرادها ، ولكن يتم تعيين كلمة مرور عشوائية أثناء الإنشاء - عن طريق تحويل تفريغ SQL للجدول بأوراق اعتماد المراقبة الحالية إلى عبارات SQL لتعيين كلمات المرور الصحيحة في المراقبة الجديدة.


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


وبالتالي ، كان التبديل سهلًا جدًا ووصل إلى النقاط التالية:


  • حذف جميع الأجهزة المضيفة في المراقبة الجديدة (تتم كتابة نصين عبر واجهة برمجة التطبيقات لهذا)
  • اسحب SCMs لتحديث إصدار zabbix-proxy وتحويل الوكلاء إلى خادم جديد
  • انتظر استيراد المضيفين من تفريغ المراقبة القديمة
  • تبديل سجلات DNS

(خطة مختصرة لتبسيط)


ما التالي؟


بالطبع ، الكود ليس مثاليًا وليس جميلًا بشكل خاص. لا يستورد كل شيء ، على وجه الخصوص ، هناك مشاكل مع بعض القوالب - ابحث عن FIXME في التعليمات البرمجية. ولكن هذا كان كافيا بالنسبة لنا. ربما هذا الشوكة مفيد لشخص آخر. الامتداد المنطقي هو تطوير عملية مماثلة لأداة Terraform ، عندما يتم تقليل المراقبة المستهدفة تمامًا إلى النموذج المحدد ، على سبيل المثال ، بواسطة دليل مع مقالب YAML. بما في ذلك الحد من المرافق القائمة إلى الشكل المطلوب.


سيتيح لك ذلك الانتظار بهدوء للحصول على دعم HA "الأصلي" في zabbix ، مع وجود خادمين ، تتم مزامنة الإعدادات بينهما تلقائيًا. الآن يجب عليك الاحتفاظ بنسخة متماثلة ووكلاء وكتابة نصوص.


كامو قادم؟


بعد دراسة مواد المؤتمرات والاجتماعات وخريطة الطريق الرسمية ومتعقب الأخطاء والتجربة (المتواضعة) للاتصال الشخصي مع مطوري zabbix ، يبدو أنهم يتفهمون تمامًا الموقف الحالي. عندما بدأ zabbix ، لم يفكر المؤلفون في أي IaC أثناء حل مشاكلهم. بعد عقد من الزمان ، نضج المنتج وازدهر. الجانب الآخر للنجاح هو كتلة عملاء الشركة ، الذين يحل رصدهم مشاكلهم. والذين لا يحبون حقا الثورة. في الظروف الحديثة ، من ناحية ، يعارضون كسر كل شيء ويبدأون من نقطة الصفر. من ناحية أخرى ، فإنهم يفتقرون في بعض الأحيان إلى قدرات المراقبة ويبدون "إلى الجانب" ، ولا ينسون التعبير عن قائمة الأمنيات لمطوري Zabbix. الشركة لن تخاطر بهم ، على الرغم من أي تعاطف مع الشباب الجديد ، مريحة وعصرية.


لن نرى بروميثيوس جديدًا وصحيحًا من Zabbix في المستقبل القريب. لا يهم كيف أود. لكن العمل مستمر بوضوح - وإذا كنت ، مثل zabbix ، دقيقًا وصبورًا ، فإن المستقبل يتوقع أيضًا مستقبلاً صاخبًا.


المصادر المستخدمة:


  1. https://gitlab.com/devopshq/zabbix-review-export
  2. https://habr.com/ru/company/pt/blog/433126/
  3. https://habr.com/ru/company/zabbix/blog/458530/

Source: https://habr.com/ru/post/ar468207/


All Articles