Cara mendorong acara dari Veeam Backup & Replication ke dalam instant messenger

Halo semuanya! Dalam posting ini saya akan berbicara tentang bagaimana menyampaikan informasi tentang hasil tindakan dari Veeam Backup & Replication v9.5 ke MS Tim. Metode yang dijelaskan dalam pos tidak hanya berfungsi dalam hal ini, tetapi juga di messenger lain - Anda hanya perlu mengatur pengiriman pesan menggunakan API profil.



Pertama, bayangkan apa yang ingin kita capai. Kami ingin menerima informasi tentang apa yang terjadi pada salah satu instance perangkat lunak cadangan kami ke dalam salah satu saluran perintah kami. Fungsi ini berguna, akan berguna bagi anak-anak dan orang dewasa, itu akan menyenangkan belahan jiwa Anda dan akan berfungsi sebagai dekorasi yang sangat baik dari meja pesta. Dengan kata lain, Anda dapat membuat sendiri case pengguna tertentu. Tidak berarti saya ingin membatasi imajinasi Anda - kami akan mempertimbangkan prototipe.

Kami akan memecahkan masalah dengan cara yang sesederhana mungkin: untuk merampok data dari database Veeam SQL, mengurai sedikit dan mengirimkannya ke saluran menggunakan Incoming WebHook Connector. Berikut adalah rencana tindakan:

  1. Kami terhubung ke database Veeam dan mendapatkan informasi dari [dbo]. [Backup.Model.JobSessions].
  2. Kami membuat Konektor WebHook Masuk di saluran tempat kami ingin mengirim pesan.
  3. Menyatukan semuanya dengan bantuan sihir python untuk membuatnya bekerja.
  4. Bungkus sketsa yang dihasilkan dalam wadah buruh pelabuhan.
  5. Itu hanya bekerja!

Sambungkan ke database Veeam Backup & Replication


Pertama, buat pengguna di sisi instance MS SQL. Kami mempertimbangkan MS SQL, karena ini adalah opsi default yang sudah diinstal oleh perangkat lunak kami. Kami memberikan hak minimum kepada pengguna - hanya pilih dan hanya dari satu tabel.

Itu mudah dilakukan. Masuk ke instance dengan cara apa pun yang memungkinkan untuk Anda dan kirim dulu permintaan berikut:

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 

Jangan lupa untuk mengganti nama database , buatlah dengan nama pengguna dan kata sandi.

Jika Anda melakukan semuanya dengan benar, maka upaya untuk memutakhirkan ... akan gagal:



Tapi pilih - tolong:



Kemuliaan bagi GDPR - dalam kerangka sampel ini, tidak ada satu pun basis produksi yang menderita! Sekarang kami memiliki ms_teams_watcher pengguna dan kami dapat mulai mengumpulkan data. Kami akan terhubung melalui pyodbc - tidak ada SQLAlchemy, hanya hardcore!

Pertama, buka koneksi (lihat kelas SQLConnectorVeeamDB ) dan dapatkan informasi tentang semua sesi yang diselesaikan selama menjalankan terakhir skrip kami:

s. 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' 

Yang paling penting bagi kami adalah mendapatkan usn terakhir di meja, jadi waktu berikutnya sudah meminta darinya, dan bukan berdasarkan waktu. Jika Anda tidak menemukan apa pun, jalankan kueri berikut:

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

Secara statistik, usn ini akan lebih tinggi daripada yang akan kembali ketika permintaan pertama dieksekusi, tetapi JobSessions yang tidak termasuk dalam seleksi pertama, kita masih tidak perlu. Jika kami tidak menemukan sesi (negara = -1) yang diselesaikan dengan hasil bukan Tidak ada (hasil! = -1) - ingat saja usn, tuliskan ke file ini dan ulangi permintaan pada beberapa interval (tetapi sudah SQLConnectorVeeamDB.select_completed_job_sessions_after_usn).

Buat Konektor WebHook Masuk untuk Tim MS


Semuanya sederhana di sini. Tanyakan admin Tim MS Anda (Hormat, jika Anda) untuk mengaktifkan fitur ini, seperti dijelaskan di sini . Sekarang buat konektor tipe Incoming WebHook . Apakah itu berhasil? Anda cantik, tidak ada lagi yang harus dilakukan, salin url dan simpan.

Menyatukan semuanya


Di sini Anda dapat mengunduh Dockerfile yang sudah jadi, atau sketsa itu sendiri, yang akan kami pertimbangkan lebih lanjut. Hanya ingat untuk mengunduh configuration.py_ , letakkan di sebelah Dockerfile, isi dan hapus garis bawah dari ekstensi.

Inilah yang tampak seperti skema sketsa konseptual (gambar dapat diklik):



Seperti yang dapat Anda lihat dari diagram, hal yang paling menarik adalah mengurai tanggal yang diterima dari database Veeam, sembari membuat objek dari kelas VeeamEvent (hanya pusat data) dan proses pengiriman notifikasi itu sendiri.

class VeeamEvent (objek)


Di tabel tempat kami mengambil tanggal, semua tugas yang dilakukan Veeam dicatat.
Masing-masing dari mereka memiliki atribut job_type. Ada banyak dari mereka, tetapi saya menyoroti yang paling menarik bagi kita - bukankah kita ingin mengirim pesan bahwa seseorang telah membuka konsol program atau menyelesaikan pemulihan?

  • 0 - Pekerjaan cadangan
  • 1 - Pekerjaan replikasi
  • 3 - Pekerjaan SureBackup
  • 24 - File ke pekerjaan pita
  • 28 - Cadangkan ke pekerjaan pita
  • 51 - Pekerjaan Salin Cadangan
  • 100 - Cadangan Konfigurasi

Tulis di komentar, jika tertarik, saya akan menanyakan jenis tugas lain berdasarkan permintaan. Tugas yang sudah selesai dapat berupa keberhasilan atau peringatan, dan terkadang bahkan gagal.

Sebagai hasilnya, kami membuat objek yang menyimpan semua data ini dalam dirinya sendiri + nama tugas, usn, deskripsi status penyelesaiannya (jika ada) dan waktu penyelesaian. Objek inilah yang ditransfer untuk mengirim pesan ke kurir.

send_notification_to_web_hook ()


Ini masih lebih sederhana di sini - kami menggunakan pymsteams library yang sudah jadi, yang hanya mengumpulkan pesan sesuai dengan spesifikasi dan mengirimkannya melalui requests.post. Dalam sampel saya, saya bahkan tidak menggunakan fungsi kartu O365, yang juga didukung oleh WebHooks, tetapi hanya membuat beberapa templat pesan, tergantung pada hasil tugasnya.

 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 

Fantasi berguna di sini - tambahkan teks, gambar, tombol, dll. Berikut adalah jenis pesan yang saya dapat:


Untuk pekerjaan cadangan di mana semuanya berjalan lancar


Untuk tugas yang gagal dan peringatan

Buat wadah buruh pelabuhan


Jika Anda belum memiliki Docker, lihat Tutorial Docker untuk Pemula . Jika ada, kita perlu membuat Dockerfile berikut:

 # 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 sendiri mengunduh semuanya dari repositori (DARI python: 3.6.2), Github (RUN git clone ...) dan paket.microsoft.com. Masukkan dockerfile di% directory_name%, di sebelah configuration.py (apakah Anda lupa mengunduh dan mengisinya?). Pasang gambar dengan perintah berikut:

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

Jalankan wadah:

 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 

Jika Anda ingin menjalankan skrip di platform lain atau tidak ingin menggunakan wadah sama sekali - itu tidak masalah, jalankan saja file main.py itu sendiri, tanpa argumen.


Sudah waktunya bagi saya untuk mengisi secangkir kopi, dan jika Anda tertarik, Anda dapat menyelesaikan sketsa saya untuk kebutuhan produksi Anda. “Anda membayar hanya untuk pengiriman”, lebih tepatnya, Anda hanya perlu mengimplementasikan pengiriman ini ke saluran pilihan Anda.

Saya akan menyatukan tautan yang bermanfaat:

  1. Proyek saya di github
  2. Python SQL driver - pyodbc
  3. Membuat Konektor WebHook yang Masuk
  4. Cara mengaktifkan Incoming WebHook Connector untuk Tim MS
  5. Pymsteams library
  6. Tutorial Docker untuk Pemula

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


All Articles