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

أولاً ، تخيل ما نريد تحقيقه. نريد الحصول على معلومات حول ما يحدث في إحدى مثيلات برنامج النسخ الاحتياطي في إحدى قنوات الأوامر الخاصة بنا. الوظيفة مفيدة ، ستكون مفيدة للأطفال والبالغين على حد سواء ، وسوف تسعد توأم روحك وستكون بمثابة زخرفة ممتازة للطاولة الاحتفالية. بمعنى آخر ، يمكنك التوصل إلى حالة مستخدم محددة بنفسك. لا أريد بأي حال من الأحوال الحد من خيالك - سننظر في نموذج أولي.
سنقوم بحل المشكلة بأبسط طريقة ممكنة: لسرقة البيانات من قاعدة بيانات Veeam SQL ، قم بتحليلها قليلاً وإرسالها إلى القناة باستخدام موصل WebHook الوارد. هنا خطة العمل:
- نقوم بالاتصال بقاعدة بيانات Veeam ونحصل على معلومات من [dbo]. [Backup.Model.JobSessions].
- نقوم بإنشاء موصل WebHook الوارد في القناة حيث نريد إرسال الرسائل.
- ضع كل ذلك معًا بمساعدة سحر الثعبان لجعله يعمل.
- لف الرسم الناتج في حاوية عامل ميناء.
- يعمل فقط!
الاتصال بقاعدة بيانات 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')
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:
يقوم 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 نفسه ، بدون أي وسيطات.
لقد حان الوقت بالنسبة لي لملء فنجان من القهوة ، وإذا كنت مهتمًا ، يمكنك إنهاء رسم تخطيطي لاحتياجات إنتاجك. "أنت تدفع مقابل التوصيل فقط" ، بتعبير أدق ، ما عليك سوى تنفيذ هذا التسليم على قناتك المفضلة.
سأجمع روابط مفيدة:
- مشروعي على جيثب
- سائق بايثون SQL - pyodbc
- إنشاء رابط WebHook الوارد
- كيفية تمكين رابط WebHook الوارد لفرق MS
- مكتبة Pymsteams
- دروس Docker للمبتدئين