كيفية دفع الأحداث من Veeam Backup & Replication إلى برامج المراسلة الفورية

مرحبا بالجميع! في هذا المنشور سأتحدث عن كيفية تقديم معلومات حول نتائج الإجراءات من Veeam Backup & Replication v9.5 إلى MS Teams. لن تعمل الطريقة الموضحة في المنشور في هذا فحسب ، ولكن أيضًا في أي برنامج مراسلة آخر - ما عليك سوى تنظيم تسليم الرسائل باستخدام واجهة برمجة تطبيقات الملف الشخصي.



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

سنقوم بحل المشكلة بأبسط طريقة ممكنة: لسرقة البيانات من قاعدة بيانات Veeam SQL ، قم بتحليلها قليلاً وإرسالها إلى القناة باستخدام موصل WebHook الوارد. هنا خطة العمل:

  1. نقوم بالاتصال بقاعدة بيانات Veeam ونحصل على معلومات من [dbo]. [Backup.Model.JobSessions].
  2. نقوم بإنشاء موصل WebHook الوارد في القناة حيث نريد إرسال الرسائل.
  3. ضع كل ذلك معًا بمساعدة سحر الثعبان لجعله يعمل.
  4. لف الرسم الناتج في حاوية عامل ميناء.
  5. يعمل فقط!

الاتصال بقاعدة بيانات Veeam Backup & Replication


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

من السهل القيام بذلك. تسجيل الدخول إلى المثيل بأي طريقة ممكنة لك وإرسال الطلب التالي مسبقًا:

CREATE LOGIN ms_teams_watcher WITH PASSWORD = '123@qwe' USE [VeeamBackup] CREATE USER ms_teams_watcher FOR LOGIN ms_teams_watcher GRANT SELECT ON [dbo].[Backup.Model.JobSessions] TO ms_teams_watcher 

لا تنس أن تستبدل اسم قاعدة البيانات ، اختر اسم مستخدم وكلمة مرور.

إذا قمت بكل شيء بشكل صحيح ، فستفشل محاولة الترقية ...:



لكن اختر - من فضلك:



المجد للائحة العامة لحماية البيانات - في إطار هذه العينة ، لم تتأثر أي قاعدة إنتاج واحدة! الآن لدينا مستخدم ms_teams_watcher ويمكننا البدء في جمع البيانات. سنقوم بالاتصال من خلال pyodbc - لا SQLAlchemy ، فقط المتشددين!

أولاً ، افتح الاتصال (انظر الفصل SQLConnectorVeeamDB ) واحصل على معلومات حول جميع الجلسات التي تم استكمالها خلال آخر تشغيل لبرنامجنا النصي:

ق. SQLConnectorVeeamDB.select_completed_job_sessions_during_latest_hour:

 query = 'select job_name,job_type, usn, end_time, result, reason ' \               'from [dbo].[Backup.Model.JobSessions] ' \               'where state = -1 and result != -1 and datediff(HH,[end_time],GETDATE()) <= 1 ' \               'order by usn' 

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

 query = 'select top 1 [usn] ' \                   'from [dbo].[Backup.Model.JobSessions] ' \                   'order by usn desc' 

إحصائيًا ، سيكون هذا المستخدم أعلى من أي طلب سيعود عند تنفيذ الطلب الأول ، لكن جلسات العمل التي لا تقع في الاختيار الأول ، ما زلنا لا نحتاجها. إذا لم نجد الجلسات المكتملة (الحالة = -1) والنتيجة ليست بلا (النتيجة! = -1) - فقط تذكر usn ، اكتبه في ملف ini وكرر الطلبات في بعض الفترات (ولكن بالفعل SQLConnectorVeeamDB.select_completed_job_sessions_after_usn).

إنشاء رابط WebHook الوارد لفرق MS


كل شيء بسيط هنا. اطلب من مسؤول MS Teams (الاحترام ، إذا كنت أنت) تمكين هذه الميزة ، كما هو موضح هنا . الآن قم بإنشاء موصل من نوع WebHook الوارد . هل نجحت؟ أنت جميلة ، لا شيء آخر تفعله ، انسخ عنوان url واحفظه.

ضع كل ذلك معًا


هنا يمكنك تنزيل ملف Dockerfile النهائي ، أو الرسم نفسه ، والذي سننظر فيه أكثر من ذلك. تذكر فقط تنزيل config.py_ ، ضعه بجوار ملف Dockerfile ، واملأ وأزل التسطير من الإضافة.

إليك ما يبدو عليه مخطط الرسم المفاهيمي (الصورة قابلة للنقر):



كما ترى من الرسم البياني ، الشيء الأكثر إثارة للاهتمام هو تحليل التاريخ المستلم من قاعدة بيانات Veeam ، أثناء إنشاء كائنات من فئة VeeamEvent (مجرد مركز بيانات) وعملية إرسال الإشعارات نفسها.

class VeeamEvent (كائن)


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

  • 0 - وظيفة النسخ الاحتياطي
  • 1- وظيفة النسخ
  • 3 - عمل SureBackup
  • 24 - ملف على الشريط
  • 28 - عمل نسخة احتياطية من الشريط
  • 51 - وظيفة النسخ الاحتياطي
  • 100 - تكوين النسخ الاحتياطي

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

نتيجة لذلك ، نقوم بإنشاء كائن يخزن كل هذه البيانات في حد ذاته + اسم المهمة ، usn ، ووصف لحالة اكتمالها (إن وجدت) ووقت الاكتمال. هذا هو الكائن الذي يتم نقله لإرسال رسالة إلى الرسول.

send_notification_to_web_hook ()


لا يزال الأمر أبسط هنا - نحن نستخدم مكتبة pymsteams الجاهزة ، التي تجمع ببساطة رسالة وفقًا للمواصفات وترسلها من خلال request.post . في العينة الخاصة بي ، لم أستخدم وظائف بطاقات O365 ، والتي تدعمها WebHooks أيضًا ، ولكن ببساطة قمت بعمل العديد من قوالب الرسائل ، اعتمادًا على نتيجة المهمة.

 team_connection = pymsteams.connectorcard(web_hook_url)   if event_object.job_type_name is not None:       if event_object.result_text == 'success':           text = 'A Veeam ' + event_object.job_type_name + ' **"' + str(event_object.job_name) + '"** has finished **successfully** at ' + str(event_object.end_time)[:-7]           team_connection.color('005f4b')  # it's a brand color named "Veeam Sapphire", btw 

Fantasy مفيد هنا - أضف أي نص ، صور ، أزرار ، إلخ. فيما يلي أنواع الرسائل التي تلقيتها:


للحصول على وظيفة النسخ الاحتياطي حيث سار كل شيء بسلاسة


للمهام الفاشلة والتحذيرية

إنشاء حاوية عامل ميناء


إذا لم يكن لديك Docker بالفعل ، فراجع برنامج Docker التعليمي للمبتدئين . إذا كان هناك ، نحتاج إلى إنشاء ملف Dockerfile التالي:

 # Version: 1.0 FROM python:3.6.2 MAINTAINER Dmitry Rozhdestvenskiy <dremsama@gmail.com> RUN apt-get update && apt-get install -y --no-install-recommends apt-utils RUN apt-get -y install locales RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen RUN locale-gen RUN apt-get -y install apt-transport-https freetds-dev unixodbc-dev git RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN apt-get -y update && ACCEPT_EULA=Y apt-get install msodbcsql RUN mkdir /veeam_to_msteams RUN git clone https://github.com/daymer/Veeam-to-MS-Teams-notification-sender-app /veeam_to_msteams RUN pip install --upgrade pip RUN pip install -r /veeam_to_msteams/requirements.txt RUN mkdir /var/log/veeam_to_msteams/ ADD configuration.py /veeam_to_msteams/ RUN chmod +x /veeam_to_msteams/launch_veeam_to_msteams.sh CMD ["/bin/bash", "/veeam_to_msteams/launch_veeam_to_msteams.sh"] 

يقوم Docker نفسه بتنزيل كل شيء من المستودع (من python: 3.6.2) و Github (استنساخ RUN git ...) و package.microsoft.com. ضع ملف dockerfile في٪ directory_name٪ ، بجانب config.py (هل نسيت تنزيله وملئه؟). قم بتجميع الصورة بالأمر التالي:

 docker build -t veeam_to_msteams:1.0 -f /path/%directory_name%/Dockerfile /path/%directory_name%/ 

قم بتشغيل الحاوية:

 docker run  --restart=always  -it --name veeam_to_msteams -d veeam_to_msteams:1.0  bin/bash /veeam_to_msteams/launch_veeam_to_msteams.sh 

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


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

سأجمع روابط مفيدة:

  1. مشروعي على جيثب
  2. سائق بايثون SQL - pyodbc
  3. إنشاء رابط WebHook الوارد
  4. كيفية تمكين رابط WebHook الوارد لفرق MS
  5. مكتبة Pymsteams
  6. دروس Docker للمبتدئين

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


All Articles