Kami memiliki 14.000 objek, zabbix, api, python, dan keengganan untuk menambahkan objek dengan tangan. Di bawah potongan - tentang bagaimana manajer jaringan menerapkan pemantauan dengan penambahan otomatis node jaringan, dan sedikit tentang rasa sakit yang harus saya alami.
Artikel ini lebih berfokus pada insinyur jaringan dengan sedikit pengalaman python. Untuk membantu otomatisasi pemantauan dan peningkatan kualitas hidup dan pekerjaan, dengan tidak adanya kebutuhan untuk memperbarui secara manual seluruh armada benda.

Singkat cerita, kami telah membangun pemantauan
Hai Nama saya Alexander Prokhorov, dan bersama-sama dengan tim insinyur jaringan di departemen kami, kami mengerjakan jaringan di # ITX5. Departemen kami mengembangkan infrastruktur jaringan, pemantauan jaringan, dan otomatisasi. Ya, dan segala sesuatu yang terkait dengan transfer data.

Saya akan memecah sistem pemantauan menjadi 5 subtugas:
- Unduh Data Master
- Memperoleh informasi tentang keadaan benda
- Pemicu dan Peringatan
- Pelaporan
- Visualisasi
Dalam artikel ini kami ingin berbagi bagaimana kami melakukan integrasi pemantauan dengan data master di perusahaan kami.
Kami memiliki 14.000 properti ritel, dan tugas pertama yang kami selesaikan adalah penentuan objek yang tidak dapat diakses, jumlah dan distribusi geografisnya.
Pemantauan dilakukan pada
Zabbix . Singkatnya mengapa - beruntung dan warisan. Sisanya:
Ceritanya panjang.Semuanya dimulai dengan pemasangan pemantauan pada komputer di bawah meja ...
Ketika saya mulai bekerja untuk perusahaan pada tahun 2013, kami tidak memiliki pemantauan jaringan, meskipun jaringan itu pada saat itu besar, sekitar 4000 objek. Kami belajar tentang penurunan besar (dan tidak begitu) paling sering dari penerimaan aplikasi, pengguna, atau dari departemen lain seperti longsoran salju.

Yang pertama dipasang Zabbix 1.8, sebagai produk yang mendapatkan momentum (modis, modern, muda), ringan dan terjangkau untuk menginstal open source dengan komunitas besar. Kami hanya beruntung dengan pilihan itu.
Tidak ada sumber daya untuk instalasi, tidak ada yang meminta. Tidak jelas apakah ini akan berhasil, tidak ada yang punya pengalaman implementasi. Tetapi kami membutuhkan, dan kami menginstalnya di komputer "di bawah meja." Tingkat Redundansi - UPS.
Pertanyaan utama setelah instalasi adalah bagaimana cara menuangkan semua objek (4k!) Ke dalam pemantauan, dan pada saat yang sama berhasil membuat aplikasi yang sudah menggantung di Remedy. Zabbix sudah mendukung impor / ekspor xml dengan data pada host. Jumlah objek besar, tidak ada gunanya membuat grup terpisah untuk objek (dan itu tidak muncul), dan diputuskan untuk mengunggah router objek sebagai node jaringan. Lebih banyak peralatan jaringan tidak terkontrol (sudah dikelola).
Parsing file kami dengan host jaringan (IPAM di excel) telah selesai, dan diformat ulang menjadi xml, yang disetujui Zabbix untuk dicerna. Bukan yang pertama, tetapi semua host dimuat, memperbarui dilakukan setiap tiga bulan sekali, menghapus objek yang ditutup dan menambahkan yang baru. Seiring waktu, ternyata Zabbix menjadi sumber informasi utama dan satu-satunya bagi kami dan hotline tentang ketersediaan fasilitas dan, yang paling penting, tentang penurunan massa. Ini memungkinkan hotline untuk mengetahui tentang kecelakaan massal bahkan di malam hari, dan untuk membangunkan insinyur dengan panggilan (omong-omong, ketika tidak ada yang tahu tentang itu, lebih mudah untuk hidup). Tidak selalu pemadaman listrik malam hari di kantor memungkinkan UPS memelihara pemantauan jaringan kami secara memadai. Pada titik tertentu, kami mulai membuat cadangan. Karena pemantauan tidak stabil dan terputus-putus, perusahaan memutuskan untuk mengatur kelompok yang didedikasikan untuk tugas ini saja. Segera, dia mulai menerapkan Zabbix terpusat, yang memeriksa tidak hanya jaringan.
Zabbix tua kami terus hidup di bawah meja. Setelah menambahkan sejumlah item, basis data mulai melambat sedikit, web, antrian dan jajak pendapat bertambah, jadi saya harus segera mendapatkan dua komputer lagi sebagai proxy dan meletakkan semuanya di salib, sehingga reservasi sebenarnya (dan tempat di bawah meja sudah selesai) . Kehidupan di dalamnya didukung untuk dengan cepat menambahkan semacam parameter khusus ke pemantauan dan mengamatinya. Untuk sisanya, kami pindah ke yang terpusat.
Pemantauan terpusat bertanggung jawab atas semua peralatan TI - router, server, register kas, terminal. Setelah beberapa saat, dia ditumbuhi banyak barang. Untuk mengakses informasi aksesibilitas yang tak ternilai, Anda harus menunggu sedikit, mungkin bahkan minum kopi. Selain itu, kami memiliki lebih banyak persyaratan untuk pemantauan jaringan yang lebih spesifik dan khusus. Memiliki pada saat itu beberapa pengalaman bekerja dengan sistem, kami memutuskan untuk melakukan implementasi lama dari awal, tetapi memang demikian - dengan nama zabbix.noc.x5.ru Itu terletak di pusat data dengan implementasi fungsi yang diperlukan oleh diri kita sendiri. Tentang pengantar ini dan bagian utama dari artikel ini.
Versi Zabbix adalah 3.0
LTS . Diperbarui hanya dalam versi LTS.
Konfigurasi - 4 mesin virtual: Server + Database, Proxy, Proxy, Web
Dari sumber daya, kami mencoba mengikuti rekomendasi di
zabbix.com untuk
implementasi yang besar dan sangat besar.
Masalah pertama yang dihadapi kami adalah penambahan otomatis node jaringan ke pemantauan. Penemuan Biasa menghilang dengan segera. Jangkauan jaringan kami ada di semua ruang terbuka supernet 10/8. Banyak alamat yang harus disurvei dan penemuan otomatis akan memakan banyak sumber daya sistem, tetapi tidak akan menyelesaikan masalah dengan menambahkan informasi non-teknis tentang suatu objek.

Bagaimana cara menambahkan objek
Solusinya adalah menggunakan skrip eksternal untuk menambahkan objek. Data master tentang objek perdagangan ditemukan di SAP yang digunakan di perusahaan. Akses yang disinkronkan ke layanan
web untuk mengunggah data langsung dari SAP tidak keluar, permintaan untuk semua objek memakan waktu cukup lama. Melakukan panggilan asinkron. Tepat di tengah malam, ekspor penuh dari SAP ditambahkan ke ftp dalam bentuk
XML , dan pada siang hari
XML dengan perbedaan dari versi terbaru jatuh di atasnya.
Zabbix menggunakan
Zabbix API untuk memuat data, dan berinteraksi dengannya dari
Python .
Pada tahap pertama, kumpulan data yang kami butuhkan untuk membuat objek ditentukan. Kami menggunakan semua tanda yang diperoleh untuk klasifikasi objek yang benar dalam sistem atau untuk kenyamanan lebih lanjut. Tanda-tanda ini termasuk:
- Alamat IP - bidang yang paling penting untuk membuat antarmuka pemantauan
- SAP ID - kami memiliki pengidentifikasi objek yang unik
- Status - terbuka / tertutup
- Nama - nama atau nomor objek, sering digunakan oleh pengguna saat menghubungi
- Lokasi - alamat fisik
- Telepon - telepon kontak
- Grup - grup grup ini dibentuk berdasarkan jenis dan lokasi objek

Modul Sap-sync.py
XML dari SAP<?xml version="1.0" encoding="ISO-8859-1"?> <werks> <WERKS>1234</WERKS> <NAME1>4321-</NAME1> <PLANT_IP>192.168.1.50</PLANT_IP> <REGION>31</REGION> <PSTLZ>308580</PSTLZ> <CITY1>.</CITY1> <CITY2> .</CITY2> <STREET> .</STREET> <HOUSE_NUM1>1</HOUSE_NUM1> <TEL_NUMBER>(999)777-77-77</TEL_NUMBER> <BRANCH>CH</BRANCH> <REGION>CH_MSK</REGION> <REGION_NAME> </REGION_NAME> <FORMAT>CH_MSK_D</FORMAT> <STATUS> </STATUS> </werks>
Tujuan utama dari modul ini adalah parsing
XML dan terjemahan
JSON untuk Zabbix API. Sangat nyaman dalam hal ini untuk menggunakan kamus Python, sebagai tidak perlu memformatnya tambahan - menggunakan modul
zabbix.api ,
Anda cukup memberinya kamus dengan struktur yang benar.
JSON dengan strukturnya terlihat seperti ini:
{ 'host': 'Hostname' 'groups': [...] 'interfaces': [{},{},{}] 'inventory': {} 'templates': [{},{},{}] 'inventory_mode': '1' 'proxy_hostid': 'INT' 'status': '0' } [] - {} -
Di bidang kami dengan alamat IP di SAP, alamat server disimpan, bukan router, tetapi menggunakan modul
ipaddress kami menganggap alamat subnet pertama, yang dalam kasus kami selalu merupakan router.
str(ipaddress.ip_interface('%s/%s'%(di['PLANT_IP'].strip(),24)).network[1])
Tanggal pembaruan terakhir yang berhasil dicatat dalam
Inventaris , dalam situasi kontroversial membantu untuk memahami seberapa relevan informasi dalam sistem.
Maka sangat nyaman untuk melihat statistik pada tanggal pembaruan dalam data inventaris:

Bidang yang paling penting -
STATUS ,
"terbuka" - ditambahkan dan mulai dipantau, status lainnya - menonaktifkan host. Kami tidak menghapus objek untuk menjaga data historis dan statistik.
Setelah tes, saya harus menambahkan fungsi ping untuk memeriksa apakah host dapat diakses sebelum penambahan awal, karena dalam praktiknya, status
"Terbuka" mulai menjumpai, yang belum cukup terbuka, tetapi hampir.
def ping(ip): if os.system('ping -c 2 -W 1 %s > /dev/null'%ip) == 0: return True else: return False
Sebelumnya, Zabbix API memiliki fungsi
host.exist , tetapi dalam versi baru dikombinasikan dengan
host.get . Jika node ada, maka permintaan mengembalikan
hostid di database zabbix. Jika tidak ditemukan, mengembalikan 0. Untuk verifikasi, saya sekarang harus menambahkan
existhost , tetapi sebenarnya itu adalah
host.get .
Akhirnya, kami mengumpulkan informasi tentang pekerjaan yang dilakukan, menambahkannya ke log, melaporkan, dan memindahkan file yang diproses ke repositori di OLD.
Secara umum, basis pemantauan siap, jalankan skrip di cron untuk autorun dan lupakan.

Cara mengisi inventaris
Kita bukan lagi kita, kita adalah penggiat jejaring.Tahap kedua adalah mengisi objek dengan data yang perlu dilakukan oleh para insinyur. Penting untuk melihat semua data untuk menyelesaikan insiden dalam satu sistem, agar tidak berjalan di sistem yang berbeda, mengumpulkan informasi dalam potongan-potongan dari sumber yang berbeda. Dan karena data teknis utama dalam pemantauan, kami juga menarik sisanya ke dalam pemantauan.
Untuk mengumpulkan dan mengirimkan informasi yang diperlukan, Zabbix menulis
inventory.py , yang sebagian besar terlibat dalam pengumpulan data
SNMP dari peralatan, dan pada tingkat yang lebih rendah menguraikan file Excel.
Pertanyaannya adalah - mengapa tidak menggunakan
item bawaan dan memasukkan hasilnya dalam
inventaris menggunakan alat Zabbix itu sendiri? Ada tiga jawaban:
- Tindakan bersarang tidak memadai, seperti seringkali perlu untuk menarik nilai keluar dari SNMP dan menggunakan hasilnya dalam kueri berikutnya.
- Menjalankan pengumpulan data sekali sehari pada semua node dengan skrip eksternal tidak memuat aktivitas pemantauan utama dan tidak ada antrian untuk item'am
- Ada data yang tidak dapat dikumpulkan melalui SNMP
Data penyedia, yang tidak bisa dilakukan oleh insinyur garis 1 dan 2, disimpan dalam file excel pada drive jaringan bersama dan diperbarui oleh manajer yang melakukan kontrak komunikasi. Integrasi dengan file menyebabkan keraguan besar - excel parsing, diisi secara manual, yang dapat mengubah struktur, nama, lokasi, dll., Kemungkinan besar akan terus-menerus melakukan kesalahan. Tetapi karena kurangnya sumber lain yang relevan dari data tersebut, saya harus menggunakannya. Untuk melindungi diri dari penyuntingan naskah yang konstan, kami sepakat dengan manajer tentang struktur dan pengisian yang benar, menjelaskan bagaimana pembongkaran otomatis akan dilakukan dan penting untuk mengamati struktur saat ini. Dalam praktiknya, tentu saja, kesalahan terjadi, tetapi kami dengan cepat melacaknya, mengutuk, tetapi memperbaikinya.
BGP-AS-BASE.cfg3216:Beeline
9002:Retn
2854:Orange
~omit~
8359:MTS
File
BGP-AS-BASE.cfg mewakili korespondensi dari nomor
AS dan nama penyedia. Penting untuk menentukan penyedia dengan mana
BGP diinstal (tiba-tiba ada kesalahan dalam file dengan kontrak). Basis eksternal tidak digunakan, seperti Ada banyak nomor
AS pribadi.
Dalam hal
SNMP :
- kami meminta dari subnet router oleh OID 1.3.6.1.2.1.4.20.1.1 dan subnet mask oleh OID 1.3.6.1.2.1.4.20.1.3 dalam satu permintaan. Kami memprosesnya, menerjemahkannya ke xxxx / xx dan menulisnya di sel host_networks .
- kami meminta data pada alamat ip dari rekan BGP , serta ASN mereka, kami menemukan nama penyedia dengan nomor dalam database yang kami buat. Kami menulisnya di bidang host_router dan host_netmask . Penting untuk segera membatasi 38 karakter, karena bidang ini tidak mendukung lebih banyak. Nama bidang kami dalam database tidak selalu bertepatan dengan data yang mereka simpan, karena menggunakan bidang yang ada di database Zabbix, agar tidak mengacaukan dengan membuat bidang baru di tabel. Nama bidang yang benar dikoreksi dalam WEB, tidak ada kebingungan.
- kami mengunggah data pada vendor, model, dan peralatan perangkat lunak. Parsim, tulis ke variabel. Desain yang terkait dengan penulisan model perangkat keras disebabkan oleh fakta bahwa untuk beberapa model, Cisco memiliki nama yang ditulis dalam OID yang berbeda (paling sering untuk sasis), jadi saya harus melakukan pemeriksaan data tambahan.
Seluruh blok yang terkait dengan SNMP terlampir dalam
try-kecuali , sehingga jika tidak ada SNMP pada peralatan, skrip tidak jatuh, dan kami setidaknya mendapatkan data dari Excel oleh penyedia. Untuk memahami bagian skrip mana yang telah selesai dan yang tidak, kami menuliskan keberhasilan blok SNMP di bidang
date_hw_expiry , ditambah menuliskan tanggal ketika terakhir kali kami bisa menghapus semua data SNMP, dan tanggal kapan terakhir kali kami bisa menemukan data dalam file Excel.

Semua ini kembali dalam bentuk
JSON yang siap untuk Zabbix.
Memperbarui semua data inventaris dimulai sekali sehari, membongkar semua host dan memulai
inventory.py untuk setiap objek.
Multiprocessing digunakan (contoh diambil dari bentangan luas Internet). Untuk mencari, kami menggunakan
SAP ID , yang kami miliki dengan nama host. Output yang dihasilkan adalah
pembaruan tertulis 'ohm di Zabbix.
Ringkasan
Untuk implementasi semua integrasi, pembaruan otomatis dan pembaruan mekanisme bawaan, Zabbix API lebih dari cukup. Fungsi utama yang digunakan adalah
host.get ,
host.create dan
host.update , yang bersama-sama memungkinkan Anda untuk sepenuhnya mengontrol pembuatan dan pemutakhiran database objek pemantauan. Data input dari fungsi-fungsi ini dapat dikirimkan dari sistem dan sumber apa pun yang tersedia.
Modul python utama yang membantu kami mengatasi tugas ini:
pysnmp ,
xlrd ,
zabbix.api ,
xml ,
ipaddress ,
json .
xlrd - parsing excel.
xml - parsing XML.
pysnmp - menarik data SNMP dari peralatan.
Interaksi SNMP lebih mudah daripada SSH, setidaknya karena dalam praktiknya perangkat keras merespons SNMP lebih cepat daripada SSH, parsing respons SNMP praktis tidak diperlukan, meskipun CLI vendor yang berbeda sering sangat bervariasi, dan kesimpulannya sama. tim dapat berbeda bahkan dalam model yang berbeda dari vendor yang sama.
OID utama yang diterapkan:
iso.3.6.1.2.1.4.20.1.1 - alamat semua antarmuka router
iso.3.6.1.2.1.4.20.1.3 - subnet mask dari semua antarmuka router
iso.3.6.1.2.1.15.3.1.7 - semua rekan BGP dari router
iso.3.6.1.2.1.15.3.1.9 - SEBAGAI semua rekan BGP dari router
iso.3.6.1.2.1.47.1.1.1.1.1.1.1.1 - model
iso.3.6.1.2.1.47.1.1.1.1.10.1 - versi singkat dari perangkat lunak
iso.3.6.1.2.1.47.1.1.1.1.1.12.1 - vendor
iso.3.6.1.2.1.1.1.0 - versi perangkat lunak terperinci
iso.3.6.1.2.1.47.1.1.1.1.7.1 - model, tipe sasis
Dashboard harus ditambahkan sedikit untuk membagi masalah pada jaringan distribusi dan tidak mengganggu mereka dalam tumpukan. Juga tambahkan beberapa bidang, misalnya ip, nama dan alamat penyedia, sehingga jika terjadi kecelakaan massal cukup untuk menyalin-tempel dari peramban ke dalam pesan semua objek dengan masalah, segera dengan semua data yang diperlukan untuk penyedia.
"Workview" ditulis
secara terpisah , di mana kami dapat menemukan semua informasi yang dikumpulkan, ditambah grafik yang dikumpulkan untuk objek ini.
