Halo semuanya!
Hari ini saya ingin memberi tahu Anda tentang cara mengelola
Veeam Agent untuk Linux menggunakan baris perintah, dan tentang kemungkinan apa yang terbuka di tangan terampil seorang programmer.
Saya diminta untuk menulis artikel dengan komentar di
artikel sebelumnya. Mengutip kejutan pengguna: “Ya, bagaimana bisa begitu? Server tidak menulis surat yang menyatakan telah disimpan! ” Selain itu, menurut analis, dia bukan satu-satunya, kalau tidak,
utasnya tidak akan muncul di forum. Dan karena orang menulis, itu berarti seseorang membutuhkannya!
Dalam artikel tersebut saya akan menjelaskan mengapa fitur ini tidak ada dalam produk. Tapi kami tidak akan berhenti di situ, kami akan menambahkan fungsi ini! Kami adalah programmer, jadi kami akan menulis surat dan menghasilkan laporan dalam bentuk halaman html.
Selain itu, saya akan menunjukkan perintah yang paling berguna, menurut saya, yang dapat memfasilitasi pekerjaan administrator.
Bersiap-siap: banyak kode, tidak ada gambar.
Pertama, mari kita jawab pertanyaan: "Mengapa Veeam Agent untuk Linux tidak menulis surat?"
Anda mungkin tidak suka jawabannya, jangan salahkan saya. Tetapi kenyataannya adalah bahwa pengguna perusahaan besar atau kecil tidak membutuhkan ini, dan inilah alasannya:
- Pertama, untuk bekerja dengan surat, Anda harus meletakkan server smpt di mesin lokal, atau menggunakan seseorang di jaringan. Dengan implementasi yang paling sederhana (perintah
mail
), Anda perlu menginstal paket mailutils . Dan banyak administrator sistem tidak ingin membuat kerentanan potensial pada server produksi mereka dalam bentuk layanan yang dapat mengirim surat ke mana saja. Ya, dan kemungkinan tidak disebabkan oleh port yang ditutup, independensi subnet, dan banyak lagi ... - Kedua, karena paket mailutils mungkin tidak ada di sistem (untuk alasan pertama), tidak masuk akal untuk mencoba menggunakannya. Kalau tidak, kita bisa mendapatkan fungsi yang tampaknya ada di sana, tetapi "out of the box" tidak berfungsi, yang berarti bahwa akan ada utas di forum tentang topik seperti: "Cara mengonfigurasi server sehingga surat dikirim."
- Dan ketiga, secara umum, tidak ada pemberitahuan tambahan yang diperlukan, karena lebih banyak atau lebih sedikit pelanggan perusahaan menggunakan Veeam Backup & Replication . Konsolnya mengumpulkan informasi tentang semua cadangan yang dibuat untuk repositori terkenal. Lihat sendiri.
Dalam versi
Veeam Backup & Replication 9.5 Update 4 , dimungkinkan untuk menggunakan produk ini secara gratis, tetapi dengan pembatasan pada mesin virtual / fisik yang dilayani.
Jika Anda memiliki hingga 3 server fisik (inklusif) - fungsi VBR gratis akan lebih dari cukup untuk Anda.
Jika Anda memiliki lebih dari 3 mesin, tidak ada cara untuk membayar perangkat lunak, tetapi Anda masih ingin memonitor server secara terpusat, saya sarankan menambahkan beberapa skrip sendiri. Saya suka menghibur diri dengan python setelah bekerja untuk C / C ++.
veeamconfig
kami akan membungkus
veeamconfig
perintah
veeamconfig
. Tim
veeamconfig
menyediakan akses ke semua fungsionalitas produk. Tidak diragukan lagi, antarmuka pseudografis yang dibuat menggunakan
perpustakaan ncurses jauh lebih menyenangkan bagi mata, namun, jika Anda perlu menautkan program ke sesuatu yang baru, maka CLI adalah segalanya bagi kami.
Deskripsi
Veeam Agent untuk perintah
Linux valid untuk versi 3.0. Saya tidak memeriksa versi sebelumnya, jadi mungkin ada perbedaan.
Antarmuka CLI di
Veeam Agent untuk Linux cukup nyaman dan didokumentasikan dengan baik. Cukup masukkan
veeamconfig --help
dan Anda akan mendapatkan daftar perintah yang tersedia:
$sudo veeamconfig --help Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig [command] Commands: repository - Backup repositories management vbrserver - Veeam Backup and Replication servers management job - Backup jobs management backup - Backups management point - Restore points management license - License management agreement - End User License Agreement management config - Import/export configuration schedule - Jobs schedule configuration cloud - Cloud provider management mode - Operation mode session - Sessions management ui - User interface aap - Application-aware processing version, --version, -v - Product version help, --help, -h - Short help
Untuk melihat apa yang setiap perintah memungkinkan Anda lakukan, cukup panggil
veeamconfig config --help
. Kami mendapatkan:
Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig config [command] Commands: import - Import repositories and jobs into database export - Export repositories and jobs from database grabLogs - Collect support logs bundle patchiso - Create custom Veeam Recovery Media adding all hardware drivers from this system help, --help, -h - Short help
Di sini, omong-omong, kita bisa melihat
grabLogs
pengumpulan log
grabLogs
. Ini akan memungkinkan Anda untuk dengan cepat mengumpulkan semua log yang diperlukan untuk dukungan. Ini kalau-kalau terjadi kesalahan.
Ada juga tim menarik yang muncul di versi 3.0:
$ sudo veeamconfig agreement --help Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig agreement [command] Commands: acceptEula - Accept Veeam End User License Agreements acceptThirdPartyLicenses - Accept Veeam 3rd party License Agreement show - Show End User License Agreements acceptance status help, --help, -h - Short help
Faktanya adalah bahwa mulai dengan versi 3.0, pengguna diharuskan untuk secara eksplisit menyetujui perjanjian lisensi. Itu terlihat seperti ini:
$ sudo veeamconfig job list I accept Veeam Software End User License Agreement: /usr/share/doc/veeam/EULA (yes/no | y/n): yes I accept the terms of the following 3rd party software components license agreements: /usr/share/doc/veeam/3rd_party (yes/no | y/n):
Dengan demikian, operasi skrip Anda dapat terganggu. Agar tidak memasuki setiap mesin dan tidak melakukan prosedur ini secara manual, perintah berikut diberikan:
veeamconfig agreement acceptEula veeamconfig agreement acceptThirdPartyLicenses
Mereka memungkinkan Anda untuk menerima perjanjian lisensi tanpa pertanyaan lebih lanjut.
Tapi kami menyimpang dari topik menulis surat.
Untuk tugas pemantauan status server, kita memerlukan perintah
veeamconfig session list
. Ini menghasilkan sesuatu seperti:
Job name Type ID State Started at Finished at bj-home Backup {dbe48e88-3df7-4712-a472-09af8fed4e80} Success 2018-12-05 15:43 2018-12-05 15:44 bj-home Backup {c178a799-2935-4bd6-883b-b11278000076} Success 2018-12-05 16:26 2018-12-05 16:26 bj-home Backup {3405dad3-0016-4a00-933e-60ef66b30324} Success 2018-12-06 06:00 2018-12-06 06:00
Nah, ada informasi di sini ketika server dicadangkan dan apa keberhasilannya. Pada prinsipnya, sudah dimungkinkan untuk mengumpulkan "knalpot" ke dalam file dan mengirimkannya melalui surat. Namun, dalam setahun surat itu dapat tumbuh sekitar 365 baris. Dan mencari
Negara dengan kesalahan bisa terasa membosankan. Karenanya, kami akan menguraikan "pembuangan" ini dan mendapatkan daftar normal yang dengannya Anda sudah dapat melakukan sesuatu.
Lihat seluruh kode
di sini class CSession: @staticmethod def List(): return subproccall( ["veeamconfig", "session", "list"] ) class CSessionInfoList(object): def __init__(self, list): self.list = list def List(self): return self.list @staticmethod def Get(): text = CSession.List() lines = text.split("\n") list = []
Nah, sekarang mari kita membuat surat dan mengirimkannya kepada diri kita sendiri.
def SendMailsessions(): print "---" print "Sending statistic to administrator:" sessions = veeamlpb.session.CSessionInfoList.Get() recipient = "dear.admin@company.com" subject = "VAL status notification" text = "Statistic:\n" inx = 0; successCount = 0 warningCount = 0 errorCount = 0 for sessionInfo in sessions.List(): if (sessionInfo.State() == "Success"): successCount += 1 elif (sessionInfo.State() == "Warning"): warningCount += 1 else: errorCount += 1 text += str(successCount)+"/"+str(warningCount)+"/"+str(errorCount)+" Success/Warning/Error\n" text += "Last 10 session:\n" for sessionInfo in reversed(sessions.List()): if inx == 10: text += "...\n" break; text += str(inx)+" | "+sessionInfo.State()+" | "+sessionInfo.JobName()+" | "+sessionInfo.StartTime()+" / "+sessionInfo.FinishTime() + "\n"
Akibatnya, setelah menginstal
mailutils, kita bisa mendapatkan surat berupa:
Statistic: 3/0/0 Success/Warning/Error Last 10 session: 0 | Success | bj-home | 2018-12-06 06:00 / 2018-12-06 06:00 1 | Success | bj-home | 2018-12-05 16:26 / 2018-12-05 16:26 2 | Success | bj-home | 2018-12-05 15:43 / 2018-12-05 15:44 -------------------------------------------------------------------------------- Yours sincerely, Veeam Agent for Linux Monitor
Surat itu hanya menampilkan 10 sesi terakhir. Pada saat yang sama, informasi tentang jumlah sesi yang berhasil dan tidak terlalu banyak ditampilkan pada awal surat itu. Cukup dengan melihat angka-angka dalam surat di awal hari kerja, memeriksa surat dan menyeruput pembuat kopi untuk memahami bahwa backup malam berhasil.
Jika Anda membutuhkan sesuatu yang lebih jelas, Anda dapat meminta informasi tentang sesi dalam format xml dan mentransfernya ke server Anda. Di sana, gabungkan data yang diperoleh ke dalam tabel ringkasan tunggal yang menampilkan semua informasi yang diperlukan dalam format yang nyaman atau layak untuk Anda.
Kami mendapatkan pasangan XML-baris:
sessionList = veeamlpb.session.CSessionList() text = sessionList.ToXml()
Simpan file yang dihasilkan
sessionListFileName = "session_list.xml" print "Store XML to file: ",sessionListFileName sessionListXmlFile = open(sessionListFileName, "w") sessionListXmlFile.write(text) sessionListXmlFile.close()
Kemudian kami mengirim XML yang diterima ke server. Opsi alternatif juga dimungkinkan - server mengumpulkan XML dari mesin yang dicadangkan. Siapa inisiator belum penting bagi kami. Adalah penting bahwa file XML dikumpulkan di server dengan daftar sesi dari semua mesin. Saya memilih opsi pertama:
hostname = os.uname()[1] target = "user@admin-desktop:/home/user" os.system("scp ./"+sessionListFileName+" "+target+"/backups/"+hostname+"/session_list.xml")
Sekarang, di sisi server, masih memproses data yang diterima dan membuat halaman html yang indah.
import veeamlpb import os import datetime import xml.etree.ElementTree as xml def main(): hosts = [] backupsDirectory = "/home/user/backups" for item in os.listdir(backupsDirectory): if item in [".", ".."]: continue if os.path.isdir(os.path.join(backupsDirectory,item)): hosts.append(item) print "item: ",item if len(hosts) == 0: return 0 backupSessionMap = {} for host in hosts: print "found host: ", host sessionInfoFile = os.path.join(os.path.join(backupsDirectory,host), "session_list.xml") sessionList = veeamlpb.session.CSessionInfoList.FromXmlFile(sessionInfoFile) backupSessionMap[host] = sessionList for sessionInfo in sessionList.List(): print "Session:",sessionInfo.ToString() html = xml.Element("html") body = xml.SubElement(html, "body", {"style":"background-color: #00b336;"}) xml.SubElement(body,"h1").text = "Report at "+datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") xml.SubElement(body,"h2").text = "Statistic:" for host in hosts: sessionList = backupSessionMap[host] success=0 warning=0 error=0 if len(sessionList.List()) == 0: continue for sessionInfo in sessionList.List(): if sessionInfo.State() == "Success": success +=1 elif sessionInfo.State() == "Warning": warning +=1 else: error +=1 latestSessionInfo = sessionList.List()[-1] attr = {} if latestSessionInfo.State() == "Success":
Hasilnya, laporan siap:

Saya tidak punya tugas untuk membuat produk yang indah. Tugasnya adalah menunjukkan bahwa masalah pengumpulan statistik dapat diselesaikan dalam skrip dalam satu hingga dua hari.
Pada prinsipnya, jika Anda mengembangkan ide-ide yang disajikan di sini, Anda dapat membuat "Open Backup Monitor for Veeam Agent for Linux". Menurut pendapat saya, topik yang baik untuk kursus di Python, atau mungkin bahkan untuk diploma, atau hanya alasan untuk berlatih pemrograman pada proyek open source. Setuju, lebih baik berlatih pemrograman daripada menjadi elf tingkat 80.
Semua kode dapat ditemukan di
http://www.github.com/CodeImp/veeampy/ . Unduh, gunakan, suplemen, dan garpu kesehatan.
Harap dicatat bahwa kode ini didistribusikan di bawah lisensi GPL-2, mungkin mengandung kesalahan dan banyak lagi. Semuanya seperti biasa di dunia opensource. Jadi sebelum digunakan dalam produksi - jangan lupa mengemudi di lab uji.