توفير الوقت والأعصاب وساعات الرجل

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

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

اسمي رسلان وأنا منخرط في مرافقة أنظمة معلومات مجموعة BARS وتطوير روبوت قاتل لسلسلة DBA الوحشية . الصيام ليس لضعف القلب - العديد من الحروف والصور.



/ awr


تعمل بعض تطبيقاتنا على Oracle DBMS. هناك مشروعات في نظام PostgreSQL DBMS. تمتلك Oracle شيئًا رائعًا - جمع الإحصائيات حول الحمل على نظام إدارة قواعد البيانات (DBMS) ، والذي يسلط الضوء على المشكلات الحالية وحتى يعطي توصيات للتخلص - مستودع عبء العمل التلقائي (AWR). في مرحلة ما (أي وقت حدوث الألم) ، طلب المطورون باستمرار جمع تقارير AWR لتحليل الأداء . لقد ذهبنا بصدق إلى خادم DBMS ، وجمعنا التقارير ، وجرناها إلينا وأرسلناها للتحليل إلى الإنتاج. مرة واحدة بعد الخامسة بدأت في الضغط ... بعد العاشرة - لتسبب تهيج ...

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

ثم فكرت: "لا حاجة للمشرفين لإنشاء تقرير ..." . بعد كل شيء ، جمع تقرير هو تنفيذ سكريبت سكربل @ $ ORACLE_HOME / rdbms / admin / awrrpt.sql وأخذ التقرير من الخادم إلى أنفسنا ... أوه نعم ، نحن لا ندع التطوير يذهب للبيع.

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

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

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

لقد بدأت التنفيذ. لقد فعلت ذلك ، كما قمت بإدارته ، في PHP (في الواقع طلبنا في PHP ، أفهمه أكثر من Python). برنامج التشفير مني سهل ، لذا لن أعرض الكود الخاص بي :)

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

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

نحن نتبع الرابط وهنا تقرير AWR:



كما هو متوقع ، تعامل المطورون مع هذا التقرير ، حتى أن أحدهم شكر.

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

في وقت لاحق ، كتب زملاء من CIT حول كيفية جمع التقارير ، أرادوا أيضًا. لم أضيفها إلى دردشاتنا ، لقد أنشأت دردشة منفصلة مع إنشاء التقارير وفقًا لجدول زمني وعند الطلب.

/ pgBadger


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

/ مهمة


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

/ tnls


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

تشير إحصائيات المكالمات إلى أنه في كثير من الأحيان ، بعد سقوط أحد الأنفاق (في حالة حدوث مشاكل في الشبكة ، على سبيل المثال ، مهلة ، على سبيل المثال) ، يتحولون لاستعادة الوصول إلى المشروع. في معظم الحالات ، يكفي إعادة تشغيل الاتصال ويصبح كل شيء على ما يرام. فلنفعل ذلك بنفسك. هنا هو الأمر:


"فال من خلال" لعنصر القائمة المطلوب، حدد مشروعك، انتظر لحظة والجميع سعداء وراضون ...

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

/ ecp_to_pem


علاوة على ذلك ، أظهرت الإحصائيات أنه من الضروري في كثير من الأحيان تحويل توقيع Crypto Pro الرقمي إلى تنسيق pem ( Base64 ) لعمليات التكامل المختلفة ، ولدينا الكثير منها. المهمة: يمكنك أخذ الحاوية ونسخها إلى جهاز كمبيوتر يعمل بنظام Windows مع تثبيت الأداة المساعدة P12FromGostCSP (بالمناسبة ، الدفع) ، وتحويلها إلى pfx ، وتحويل pfx باستخدام OpenSSL (مع دعم تشفير GOST) إلى pem. ليست مريحة للغاية ، لكني أريدها بنقرة إصبع.

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


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

ملف Dockerfile فجأة يحتاج إلى:
FROM ubuntu:16.04                                                                                                                                                                        
RUN apt update && apt -y install git sudo wget unzip gcc g++ make && \                       
   cd /srv/ && git clone https://github.com/kov-serg/get-cpcert.git && \                    
   cd get-cpcert && chmod +x *.sh && ./prepare.sh && ./build.sh && \                        
   mkdir -p /srv/{in,out} && \                                                              
   echo '#!/bin/bash' > /srv/getpem.sh && \                                                 
   echo 'cd /srv/get-cpcert' >> /srv/getpem.sh && \                                         
   echo './get-cpcert /srv/in/$CONT.000 $PASS > /srv/out/$CONT.pem' >> /srv/getpem.sh && \  
   chmod +x /srv/getpem.sh                                                                  ENTRYPOINT /srv/getpem.sh


للتحويل ، تحتاج إلى وضع الحاوية المصدر (دليل للنموذج xxx.000) في الدليل / srv / in ، والتقاط pem النهائي في / srv / out.

لتحويل:

 docker run -t -i -e CONT='<   ( ".000")>' -e PASS='<  >' -v /srv/in:/srv/in -v /srv/out:/srv/out --name ecptopem <  >/med/ecptopem:latest 

/ emstop و / emstart


ذات مرة ، حصلت شركتنا على Oracle DBA رائع للغاية ، مع المزيد من الخبرة في إدارة DBMS وفي التطوير. ولم يحدث هذا على الفور مع اتصال ssh بخوادم DBMS: إما أنه لا يعرف مكان الاتصال وكيف ، ثم لم يتم وصف عمليات الوصول بوضوح ، فمن المستحيل إعادة توجيه شيء إلى نفسه. حسنًا ، يسعدنا تقديم المساعدة وتحدثنا عن كيفية الاتصال وإعادة توجيه Enterprise Manager لذلك. ولكن مع ssh ما زالت لا تعمل. شرح أحد الزملاء الأمر ببساطة: DBA حصان أصيل :) قررنا إذا كنا بحاجة إلى تشديد شيء ما على الخادم ، فسنفعل ذلك بأنفسنا.

تعطل EM تحت الحمل الثقيل ، وإعادة تشغيله ... تحتاج إلى الاتصال عبر ssh وإعادة التشغيل من خلال المحطة. قرر زميلنا الجديد أن "المسؤولين يعرفون ذلك جيدًا". الأحمال الكبيرة على نظام إدارة قواعد البيانات (DBMS) غير شائعة معنا ، كما أن طلبات إعادة تشغيل EM متكررة أيضًا. ثم نفس السيناريو: التوتر والتهيج والبحث عن حل للمشكلة. لذلك في نفس الدردشات الجماعية ظهر الأمر: / emstop و / emstart.



/ اقتل


في حالة المنافسة القوية في القاعدة ، وهذا يحدث أحيانًا ، تحتاج إلى إلغاء تحميل قاعدة البيانات بسرعة. أسرع طريقة هي إنهاء العملية الإشكالية ... للقيام بذلك ، اتصل عبر ssh ، واقتل -9 ... سيساعد البوت!



قدر أليكسي الفريق وأعطاه اسمًا حنونًا - "Kilyalka" أو مسدس.
ذات مرة ، بعد رؤية كيف يحاول أليكس معاناته ومعاناته ، في كل مرة تدخل / تقتل xxx لكل عملية ، قررت أن أضيف "تعددية الأطراف" إلى سلاحنا:



هذا أفضل! كل شيء لك يا أليكس ، مجرد عمل عزيزي!

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

/ alertlog


حسنًا ، فقط في حالة ما إذا قمت بعمل أمر:
/ alertlog <عدد الخطوط> - احصل على العدد المحدد من الخطوط Alertlog'a يقوم
البوت بسحب سجل التنبيه وإرساله إلى خدمتنا ، مثل Pastebin ، المسمى pyste ، ويرسل رابطًا للصق إلى دردشة الطلب.

/ الفحوصات


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



يعرض الأمر / check قائمة مباشرة وخالية من الغموض ، تعلم رجالنا هذه المرة كيفية استخدام هذا الأمر بدون تعليمات!

عند تحديد العنصر المطلوب ، بدلاً من القائمة ، يظهر إشعار حول بداية الاختبار حتى لا يقوم المستخدمون غير الصبورين باختبارنا 100500 مرة:



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

بعد الانتهاء من الاختبار واستلام السجل ، يقوم البوت بتحليله ويعرض النتيجة في نموذج "قابل للقراءة البشرية":



مجموعة المقاييس


لقد "دخلت" الوظيفة ومديري المشروع الذين يرغبون في تلقي مثل هذه الوظيفة لمناطقهم. وقال مدير مشروع رحيمة: "أريد الحصول على إحصائيات في الوقت المحدد!" أخبرها شخص من CIT أنه سيكون من المناسب مراقبة كل هذا في Zabbix. Zabbix ، لذلك Zabbix ...

اعتقدت أنه كان من الضروري الاستعداد لضرورة تكرار الحل ... صممت الفكرة في حاوية عامل ميناء. في الحاوية ، وفقًا للجدول الزمني (كل 10 دقائق) ، يتم إطلاق jmeter ، ويضيف السجل في مكان معين ، ويحلل php ويعرض البيانات اللازمة في شكل صفحة ويب. يستخدم Zabbix مفتاح web.page.get للحصول على هذه الصفحة ، ويحدد بانتظام البيانات الضرورية لبعض العناصر التابعة ويبني رسمًا بيانيًا.



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

تطوير التطبيقات


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

الخطط


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

لكن أليكس لا ينسى إلقاء قائمة أمنياته. من الأخير:
/ kill_sql SQL_ID - قتل جميع الجلسات باستخدام استعلام SQL_ID
/ kill_block - قتل جلسة حظر الجذر
/ show_em - عرض صورة أداء EM
Trick ، ​​يريد DBA غرزة من الهاتف =)

هذه هي الطريقة التي نعمل بها من أجل خير الوطن!

وكيف تحمي نفسك من المهام الروتينية وغير المهمة؟

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

All Articles