HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Konperénsi HighLoad++ salajengna bakal dilaksanakeun dina 6 sareng 7 April 2020 di St. Petersburg Rincian sareng tiket link. HighLoad ++ Moscow 2018. Aula "Moscow". Nopember 9, 15:00. Tésis jeung presentasi.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

* Ngawaskeun - online sareng analitik.
* Watesan dasar tina platform ZABBIX.
* Solusi pikeun skala neundeun analytics.
* Optimasi server ZABBIX.
* Optimasi UI.
* Pangalaman operasi sistem dina beban langkung ti 40k NVPS.
* Kacindekan singket.

Mikhail Makurov (saterusna - MM): - Halo sadayana!

Maxim Chernetsov (saterusna - MCH): - Wilujeng sonten!

MM: – Hayu atuh ngenalkeun Maxim. Max mangrupakeun insinyur berbakat, nu networker pangalusna kuring nyaho. Maxim aub dina jaringan sarta jasa, ngembangkeun sarta operasi maranéhanana.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MCH: – Jeung Abdi hoyong ngabejaan Anjeun tentang Mikhail. Mikhail mangrupikeun pamekar C. Anjeunna nyerat sababaraha solusi pamrosesan lalu lintas beban tinggi pikeun perusahaan urang. Urang hirup jeung gawe di Urals, di kota lalaki tangguh Chelyabinsk, di parusahaan Intersvyaz. Pausahaan kami mangrupikeun panyadia jasa Internét sareng televisi kabel pikeun sajuta jalma di 16 kota.

MM: - Sareng éta patut nyarios yén Intersvyaz langkung seueur tibatan panyadia, éta mangrupikeun perusahaan IT. Kalolobaan solusi urang dijieun ku departemen IT urang.

J: tina server ngolah lalu lintas ka pusat telepon sareng aplikasi mobile. Departemén IT ayeuna gaduh sakitar 80 urang kalayan kompeténsi anu béda-béda pisan.

Ngeunaan Zabbix jeung arsitéktur na

MCH: - Sareng ayeuna kuring bakal nyobian nyetél catetan pribadi sareng nyarios dina hiji menit naon Zabbix (saterusna disebut "Zabbix").

Zabbix nempatkeun dirina salaku sistem monitoring out-of-the-box tingkat perusahaan. Éta ngagaduhan seueur fitur anu ngagampangkeun kahirupan: aturan escalation canggih, API pikeun integrasi, ngagolongkeun sareng deteksi otomatis host sareng métrik. Zabbix ngagaduhan anu disebut alat skala - proxy. Zabbix mangrupikeun sistem open source.

Sakeudeung ngeunaan arsitektur. Urang bisa nyebutkeun yen eta diwangun ku tilu komponén:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

  • Server. Ditulis dina C. Kalayan pamrosésan anu rada rumit sareng transfer inpormasi antara benang. Sadaya pamrosésan lumangsung di jerona: tina nampi dugi ka nyimpen kana pangkalan data.
  • Sadaya data disimpen dina pangkalan data. Zabbix ngadukung MySQL, PostreSQL sareng Oracle.
  • Antarbeungeut wéb ditulis dina PHP. Dina kalolobaan sistem éta nganggo server Apache, tapi jalanna langkung éfisién dina kombinasi sareng nginx + php.

Dinten ieu kami hoyong nyarioskeun hiji carita tina kahirupan perusahaan kami anu aya hubunganana sareng Zabbix ...

Carita tina kahirupan perusahaan Intersvyaz. Naon anu urang gaduh sareng naon anu urang peryogikeun?

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server
5 atanapi 6 sababaraha bulan kapengker. Hiji dinten saatos damel ...

MCH: - Misha, halo! Abdi bungah tiasa néwak anjeun - aya obrolan. Urang deui ngagaduhan masalah sareng ngawaskeun. Dina mangsa kacilakaan utama, sagalana éta slow sarta euweuh informasi ngeunaan kaayaan jaringan. Hanjakalna, ieu sanés anu munggaran kajantenan. Abdi peryogi bantosan Anjeun. Hayu urang ngadamel monitoring urang dina kaayaan naon waé!

MM: - Tapi hayu urang nyingkronkeun heula. Abdi henteu ningali aya dina sababaraha taun. Sajauh anu kuring émut, urang ngantunkeun Nagios sareng ngalih ka Zabbix sakitar 8 sababaraha taun ka pengker. Sareng ayeuna urang sigana gaduh 6 server anu kuat sareng sakitar belasan proxy. Naha kuring ngabingungkeun naon waé?

MCH: - Méh. 15 server, sababaraha di antarana aya mesin virtual. Hal anu paling penting nyaéta yén éta henteu nyalametkeun urang dina waktos anu paling urang butuhkeun. Siga kacilakaan - server ngalambatkeun sareng anjeun teu tiasa ningali nanaon. Urang diusahakeun ngaoptimalkeun konfigurasi, tapi ieu teu nyadiakeun kanaékan kinerja optimal.

MM: - Éta jelas. Naha anjeun ningali hiji hal, naha anjeun parantos ngagali hal tina diagnostik?

MCH: - Hal kahiji anu anjeun kedah urus nyaéta pangkalan data. MySQL terus-terusan dimuat, nyimpen métrik anyar, sareng nalika Zabbix mimiti ngahasilkeun sababaraha acara, pangkalan data janten overdrive sacara harfiah sababaraha jam. Kuring parantos nyarioskeun ka anjeun ngeunaan ngaoptimalkeun konfigurasi, tapi sacara harfiah taun ieu aranjeunna ngamutahirkeun hardware: server ngagaduhan langkung ti saratus gigabytes mémori sareng susunan disk dina SSD RAID - teu aya gunana pikeun ngembangna sacara linier dina jangka panjang. Naon anu urang laksanakeun?

MM: - Éta jelas. Sacara umum, MySQL mangrupikeun pangkalan data LTP. Tétéla, éta henteu cocog deui pikeun nyimpen arsip métrik ukuran urang. Hayu urang angka eta kaluar.

MCH: - Hayu!

Integrasi Zabbix sareng Clickhouse salaku hasil tina hackathon

Saatos sababaraha waktos kami nampi data anu pikaresepeun:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Seuseueurna rohangan dina pangkalan data kami dijajah ku arsip métrik sareng kirang ti 1% dianggo pikeun konfigurasi, témplat sareng setélan. Ku waktos éta, kami parantos ngoperasikeun solusi data Big dumasar kana Clickhouse langkung ti sataun. Arah gerakan éta atra ka urang. Di musim semi Hackathon kami, kuring nyerat integrasi Zabbix sareng Clickhouse pikeun server sareng frontend. Dina waktos éta, Zabbix parantos ngagaduhan dukungan pikeun ElasticSearch, sareng kami mutuskeun pikeun ngabandingkeunana.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Babandingan Clickhouse na Elasticsearch

MM: - Pikeun babandingan, kami ngahasilkeun beban anu sami sareng server Zabbix nyayogikeun sareng ningali kumaha sistemna bakal kalakuanana. Urang nulis data dina bets 1000 garis, ngagunakeun CURL. Urang nganggap sateuacanna yén Clickhouse bakal langkung éfisién pikeun profil beban anu dilakukeun ku Zabbix. Hasilna malah ngaleuwihan ekspektasi urang:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Dina kaayaan tés anu sami, Clickhouse nyerat data tilu kali langkung seueur. Dina waktu nu sarua, duanana sistem dihakan pisan éfisién (sajumlah leutik sumberdaya) nalika maca data. Tapi Elastics peryogi seueur prosesor nalika ngarékam:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Dina total, Clickhouse sacara signifikan punjul ti Elastix dina hal konsumsi sareng kacepetan prosésor. Dina waktos anu sami, kusabab komprési data, Clickhouse nganggo 11 kali kirang dina hard drive sareng ngalaksanakeun operasi disk 30 kali langkung saeutik:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MCH: - Leres, karya Clickhouse sareng subsistem disk dilaksanakeun sacara éfisién. Anjeun tiasa nganggo disk SATA ageung pikeun pangkalan data sareng kéngingkeun kecepatan nyerat ratusan rébu garis per detik. Sistem out-of-the-box ngadukung sharding, réplikasi, sareng gampang pisan dikonpigurasikeun. Kami leuwih ti wareg jeung pamakéan na sapanjang taun.

Pikeun ngaoptimalkeun sumber daya, anjeun tiasa masang Clickhouse di gigireun pangkalan data utama anjeun anu tos aya sareng ku kituna ngahémat seueur waktos CPU sareng operasi disk. Kami parantos ngalihkeun arsip métrik kana klaster Clickhouse anu tos aya:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Urang lega database MySQL utama jadi loba nu urang bisa ngagabungkeun dina hiji mesin jeung server Zabbix sarta abandon dedicated server pikeun MySQL.

Kumaha polling jalan di Zabbix?

4 bulan katukang

MM: – Muhun, urang bisa poho ngeunaan masalah jeung dasarna?

MCH: - Éta pasti! masalah sejen urang kudu ngajawab nyaeta slow pendataan. Ayeuna sadaya 15 server proxy urang kabeuratan ku SNMP sareng prosés polling. Sareng teu aya deui jalan kecuali masang server énggal sareng énggal.

MM: - Hebat. Tapi ke heula, ngabejaan urang kumaha polling jalan di Zabbix?

MCH: - Pondokna, aya 20 jinis métrik sareng belasan cara pikeun kéngingkeunana. Zabbix bisa ngumpulkeun data boh dina mode "request-response", atawa ngadagoan data anyar ngaliwatan "Trapper Interface".

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Eta sia noting yén dina aslina Zabbix metoda ieu (Trapper) nu panggancangna.

Aya server proxy pikeun distribusi beban:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Proxies tiasa ngalakukeun fungsi koleksi anu sami sareng server Zabbix, nampi tugas ti dinya sareng ngirim métrik anu dikumpulkeun ngaliwatan antarmuka Trapper. Ieu mangrupikeun cara resmi anu disarankeun pikeun ngadistribusikaeun beban. Proksi ogé kapaké pikeun ngawaskeun infrastruktur jauh anu beroperasi ngaliwatan NAT atanapi saluran anu lambat:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Sadayana jelas sareng arsitéktur. Urang kedah ningali sumberna ...

Sababaraha poé sanggeusna

Carita kumaha nmap fping meunang

MM: "Kuring pikir kuring ngali hiji hal."

MCH: - Wartosan abdi!

MM: - Kuring manggihan yén nalika mariksa kasadiaan, cek Zabbix maksimum 128 host dina hiji waktu. Kuring nyobian ningkatkeun jumlah ieu ka 500 sareng ngahapus interval antar-pakét dina pingna (ping) - ieu ngagandakeun kinerja. Tapi Abdi hoyong angka nu leuwih gede.

MCH: - Dina prakna kuring kadang kudu pariksa kasadiaan rébuan host, sarta kuring geus pernah katempo nanaon gancang ti nmap pikeun ieu. Kuring yakin ieu jalan panggancangna. Hayu urang cobian! Urang kedah sacara signifikan ningkatkeun jumlah host per iterasi.

MM: – Cék leuwih ti lima ratus? 600?

MCH: - Sahenteuna sababaraha sarébu.

MM: - OKÉ. Hal anu paling penting anu kuring hoyong nyarios nyaéta kuring mendakan yén kalolobaan polling di Zabbix dilakukeun sacara sinkron. Urang pasti kudu ngarobah kana mode Asynchronous. Teras urang tiasa sacara dramatis ningkatkeun jumlah métrik anu dikumpulkeun ku poller, khususna upami urang ningkatkeun jumlah métrik per iterasi.

MCH: - Hebat! Sareng iraha?

MM: – Sakumaha biasa, kamari.

MCH: - Urang ngabandingkeun duanana versi fping sareng nmap:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Dina sajumlah ageung host, nmap diperkirakeun dugi ka lima kali langkung efektif. Kusabab nmap ukur cek kasadiaan sarta waktu respon, urang dipindahkeun itungan karugian ka micu sarta nyata ngurangan interval dipariksa kasadiaan. Kami mendakan jumlah host anu optimal pikeun nmap sakitar 4 rébu per iterasi. Nmap ngamungkinkeun urang ngirangan biaya cék kasadiaan CPU ku tilu kali sareng ngirangan interval tina 120 detik ka 10.

Optimasi polling

MM: "Teras urang ngamimitian ngalakukeun pollers. Kami utamina kabetot dina deteksi sareng agén SNMP. Di Zabbix, polling dilakukeun sacara sinkron sareng ukuran khusus parantos dilaksanakeun pikeun ningkatkeun efisiensi sistem. Dina modeu sinkron, teu sadia host ngabalukarkeun degradasi signifikan dina polling. Aya sakabéh sistem nagara, aya prosés husus - nu disebut unreachable pollers, nu gawéna ngan kalawan host inaccessible:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Ieu mangrupikeun koméntar anu nunjukkeun matriks kaayaan, sadaya pajeulitna sistem transisi anu diperyogikeun supados sistem tetep efektif. Salaku tambahan, polling sinkron sorangan rada lambat:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Éta sababna rébuan aliran poller dina puluhan proksi henteu tiasa ngumpulkeun jumlah data anu diperyogikeun pikeun urang. Palaksanaan Asynchronous direngsekeun teu ukur masalah jumlah threads, tapi ogé sacara signifikan nyederhanakeun sistem kaayaan host sadia, sabab pikeun angka nu mana wae nu dipariksa dina hiji iteration polling, waktos ngantosan maksimum nyaéta 1 timeout:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Salaku tambahan, kami ngarobih sareng ningkatkeun sistem polling pikeun pamundut SNMP. Kanyataanna nyaéta kalolobaan jalma henteu tiasa ngabales sababaraha pamundut SNMP dina waktos anu sami. Ku alatan éta, urang nyieun mode hibrid, nalika polling SNMP tina host sarua dipigawé asynchronously:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Hal ieu dilakukeun pikeun sakabéh pak host. Modeu ieu pamustunganana henteu langkung laun tibatan anu teu sinkron, sabab polling hiji satengah ratus nilai SNMP masih langkung gancang tibatan waktos 1 waktos.

Percobaan kami geus ditémbongkeun yén jumlah optimal requests dina hiji iteration nyaeta ngeunaan 8 sarébu kalawan polling SNMP. Dina total, transisi ka mode Asynchronous ngamungkinkeun urang pikeun nyepetkeun kinerja polling ku 200 kali, sababaraha ratus kali.

MCH: - Optimasi polling anu dihasilkeun nunjukkeun yén urang henteu ngan ukur tiasa nyingkirkeun sadaya proksi, tapi ogé ngirangan interval pikeun seueur cek, sareng proksi moal diperyogikeun deui salaku cara pikeun ngabagi beban.

Sakitar tilu bulan kapengker

Robah arsitéktur - ningkatkeun beban!

MM: - Muhun, Max, éta waktuna pikeun produktif? Abdi peryogi server anu kuat sareng insinyur anu saé.

MCH: - Oké, hayu urang rencanana. Geus waktuna pikeun mindahkeun tina titik maot 5 rébu métrik per detik.

Isuk sanggeus pamutahiran

MCH: - Misha, urang ngamutahirkeun diri, tapi isuk-isuk urang gulung deui ... Tebak naon laju anu urang junun ngahontal?

MM: – 20 rébu maksimum.

MCH: - Leuh, 25! Hanjakal, urang katuhu dimana urang dimimitian.

MM: - Naha? Dupi anjeun ngajalankeun sagala diagnostics?

MCH: - Sumuhun, tangtu! Di dieu, contona, hiji luhur metot:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Hayu urang lalajo. Kuring ningali yén kami parantos nyobian sajumlah ageung benang polling:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Tapi dina waktos anu sareng aranjeunna teu tiasa ngadaur mulangkeun sistem malah ku satengah:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sareng pagelaran umumna rada alit, sakitar 4 rébu métrik per detik:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Aya naon deui?

MCH: - Sumuhun, strace tina salah sahiji pollers:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Di dieu anjeun jelas tiasa ningali yén prosés polling ngantosan "semaphore". Ieu konci:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MCH: - Teu jelas.

MM: - Tingali, ieu sami sareng kaayaan dimana sakumpulan benang nyobian damel sareng sumber daya anu ngan ukur tiasa dianggo dina hiji waktos. Teras sadayana anu aranjeunna tiasa laksanakeun nyaéta ngabagi sumber daya ieu kana waktosna:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sareng total kinerja gawé bareng sumberdaya sapertos diwatesan ku laju hiji inti:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Aya dua cara pikeun ngajawab masalah ieu.

Ningkatkeun hardware mesin, pindah ka inti anu langkung gancang:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Atanapi robih arsitéktur sareng dina waktos anu sami robih beban:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MCH: - Ku jalan kitu, dina mesin uji urang bakal ngagunakeun cores pangsaeutikna ti dina tempur, tapi aranjeunna 1,5 kali leuwih gancang dina frékuénsi per inti!

MM: - Jelas? Anjeun kedah ningali kode server.

Jalur data dina server Zabbix

MCH: - Pikeun terang éta, urang mimiti nganalisis kumaha data ditransferkeun dina server Zabbix:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Gambar keren, leres? Hayu urang ngaliwat léngkah-léngkah supados langkung atanapi kirang jelas. Aya utas sareng jasa anu tanggung jawab pikeun ngumpulkeun data:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Aranjeunna ngirimkeun métrik anu dikumpulkeun via stop kontak ka manajer Preprocessor, dimana aranjeunna disimpen dina antrian:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

The "preprocessor manager" ngirimkeun data ka pagawe na, nu ngajalankeun parentah preprocessing sarta balik deui ngaliwatan stop kontak sarua:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Saatos ieu, manajer preprocessor nyimpen aranjeunna dina cache sajarah:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Ti dinya aranjeunna dicandak ku sinkers sajarah, anu ngalakukeun cukup loba fungsi: contona, ngitung micu, ngeusian cache nilai na, paling importantly, nyimpen metrics dina gudang sajarah. Sacara umum, prosésna rumit sareng ngabingungkeun pisan.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Hal kahiji urang nempo éta paling threads bersaing pikeun disebut "cache konfigurasi" (wewengkon memori dimana sakabeh konfigurasi server disimpen). Utas anu tanggung jawab pikeun ngumpulkeun data khususna seueur ngahalangan:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

... Kusabab konfigurasi nyimpen teu ukur metrics kalawan parameter maranéhna, tapi ogé antrian ti mana pollers nyandak informasi ngeunaan naon nu kudu salajengna. Nalika aya seueur polling sareng hiji ngahalangan konfigurasi, anu sanésna ngantosan pamundut:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Pollers teu kudu konflik

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Ku alatan éta, hal kahiji anu urang laksanakeun nyaéta ngabagi antrian kana 4 bagian sareng ngantepkeun poller pikeun meungpeuk antrian ieu, bagian-bagian ieu dina waktos anu sami, dina kaayaan anu aman:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

kompetisi ieu dihapus pikeun cache konfigurasi, sarta laju pollers ngaronjat sacara signifikan. Tapi teras urang mendakan kanyataan yén manajer preprocessor mimiti ngumpulkeun antrian padamelan:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Manajer preprocessor kedah tiasa prioritas

Ieu lumangsung dina kasus dimana anjeunna lacked kinerja. Teras sadayana anu anjeunna tiasa laksanakeun nyaéta ngumpulkeun pamundut tina prosés pangumpulan data sareng nambihan panyanggana dugi ka ngahakan sadaya mémori sareng nabrak:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Pikeun ngabéréskeun masalah ieu, kami nambihan stop kontak kadua anu dikhususkeun pikeun pagawé:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Ku kituna, manajer preprocessor miboga kasempetan pikeun prioritas karya na, upami panyangga tumuwuh, tugas téh ngalambatkeun turun panyabutan, mere kasempetan pikeun pagawe nyandak panyangga ieu:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Teras we manggihan yén salah sahiji alesan pikeun slowdown éta pagawe sorangan, sabab competing pikeun sumberdaya nu sagemblengna teu penting pikeun karya maranéhanana. Kami ngadokumentasikeun masalah ieu salaku perbaikan bug, sareng éta parantos direngsekeun dina vérsi énggal Zabbix:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Urang ningkatkeun jumlah sockets - urang meunang hasilna

Salajengna, manajer preprocessor sorangan janten bottleneck, sabab éta hiji thread. Ieu rested on speed core, mere laju maksimum ngeunaan 70 rébu métrik per detik:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Kituna, urang dijieun opat, kalawan opat sét sockets, pagawe:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sareng ieu ngamungkinkeun urang ningkatkeun kagancangan dugi ka 130 rébu métrik:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Non-linearitas pertumbuhan dijelaskeun ku kanyataan yén kompetisi pikeun cache sajarah parantos muncul. 4 manajer preprocessor na sinkers sajarah competed pikeun eta. Dina titik ieu, kami nampi kira-kira 130 rébu métrik per detik dina mesin uji, ngamangpaatkeun éta ku kira-kira 95% tina prosésor:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sakitar 2,5 sasih kapengker

Panolakan ti snmp-komunitas ngaronjat NVPs ku hiji satengah kali

MM: - Max, kuring peryogi mobil uji énggal! Urang henteu deui pas kana anu ayeuna.

MCH: - Naon anu anjeun gaduh ayeuna?

MM: - Ayeuna - 130k NVP sareng prosesor anu siap-rak.

MCH: - Wow! Geulis! Antosan, abdi gaduh dua patarosan. Numutkeun itungan kuring, kabutuhan urang sakitar 15-20 rébu métrik per detik. Naha urang peryogi langkung?

MM: "Abdi hoyong ngabéréskeun padamelan." Abdi hoyong ningali sabaraha urang tiasa squeeze kaluar tina sistem ieu.

MCH: - Tapi…

MM: "Tapi teu aya gunana pikeun bisnis."

MCH: - Éta jelas. Sareng patarosan anu kadua: naha urang tiasa ngadukung naon anu urang gaduh ayeuna nyalira, tanpa bantosan pamekar?

MM: - Teu sangka. Ngarobih kumaha cache konfigurasi jalanna mangrupikeun masalah. Mangaruhan parobahan dina paling threads sarta rada hese pikeun mulasara. Paling dipikaresep, éta bakal hésé pisan ngajaga eta.

MCH: "Lajeng urang peryogi sababaraha jinis alternatif."

MM: - Aya pilihan sapertos kitu. Urang bisa pindah ka cores gancang, bari abandoning sistem ngonci anyar. Kami masih bakal nampi prestasi 60-80 rébu métrik. Dina waktu nu sarua, urang bisa ninggalkeun sakabeh sesa kode. Clickhouse sareng polling asynchronous bakal jalan. Sarta eta bakal gampang pikeun ngajaga.

MCH: - Endah! Kuring nyarankeun urang eureun di dieu.

Saatos ngaoptimalkeun sisi server, kami tungtungna tiasa ngaluncurkeun kodeu énggal kana produksi. Urang ditinggalkeun sababaraha parobahan dina ni'mat switch ka mesin kalawan cores gancang sarta ngaminimalkeun jumlah parobahan kode. Kami ogé nyederhanakeun konfigurasi sareng ngaleungitkeun makro dina item data upami mungkin, sabab ngenalkeun konci tambahan.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Contona, abandoning snmp-komunitas makro, nu mindeng kapanggih dina dokuméntasi jeung conto, bisi urang ngamungkinkeun pikeun salajengna nyepetkeun NVPs ku ngeunaan 1,5 kali.

Sanggeus dua poé dina produksi

Nyoplokkeun sajarah kajadian pop-up

MCH: – Misha, kami geus ngagunakeun sistem pikeun dua poé, sarta sagalana jalan. Tapi ngan lamun sagalana jalan! Kami parantos ngarencanakeun damel sareng mindahkeun bagéan jaringan anu lumayan ageung, sareng urang pariksa deui ku panangan naon anu naék sareng naon anu henteu.

MM: - Teu bisa! Urang pariksa sagalana 10 kali. server handles malah lengkep unavailability jaringan instan.

MCH: - Leres, kuring ngartos sadayana: server, database, top, austat, log - sadayana gancang ...

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Éta jelas. Hayu urang lalajo web. Kami mendakan yén dina kaayaan anu seueur kajadian anu aktip, kalolobaan widget langsung mimiti jalanna laun pisan:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Alesan pikeun ieu nyaéta generasi sajarah kajadian pop-up anu dihasilkeun pikeun tiap item dina daptar. Kituna, urang ditinggalkeun generasi windows ieu (commented kaluar 5 garis dina kode), sarta ieu direngsekeun masalah urang.

Waktu ngamuat pikeun widget, sanaos henteu sayogi, parantos dikirangan tina sababaraha menit ka 10-15 detik anu ditampi pikeun urang, sareng sajarahna masih tiasa ditingali ku ngaklik waktosna:

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sanggeus gawé. 2 bulan kapengker

MCH: - Misha, anjeun angkat? Urang kudu ngobrol.

MM: - Abdi henteu ngahaja. Aya deui sareng Zabbix?

MCH: - Henteu, santai! Kuring ngan hayang ngomong: sagalana jalan, hatur nuhun! Abdi gaduh bir.

Zabbix éfisién

Zabbix mangrupikeun sistem sareng fungsi anu cukup universal sareng beunghar. Éta tiasa dianggo pikeun pamasangan alit di luar kotak, tapi sakumaha kabutuhan tumbuh, éta kedah dioptimalkeun. Pikeun nyimpen arsip métrik anu ageung, paké gudang anu cocog:

  • anjeun tiasa nganggo alat anu diwangun dina bentuk integrasi sareng Elasticsearch atanapi unggah sajarah kana file téks (sadia ti versi XNUMX);
  • Anjeun tiasa ngamangpaatkeun pangalaman sareng integrasi kami sareng Clickhouse.

Pikeun nyirorot ngaronjatkeun kagancangan ngumpulkeun metrics, kumpulkeun aranjeunna ngagunakeun métode Asynchronous sarta ngirimkeunana ngaliwatan panganteur trapper ka server Zabbix; atawa anjeun bisa make patch a sangkan Zabbix pollers Asynchronous.

Zabbix ditulis dina C sareng cekap cekap. Ngarengsekeun sababaraha bottlenecks arsitéktur ngamungkinkeun anjeun pikeun ningkatkeun kinerja sareng, dina pangalaman urang, kéngingkeun langkung ti 100 rébu métrik dina mesin prosesor tunggal.

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

Sarua patch Zabbix

MM: – Abdi hoyong tambahkeun sababaraha titik. Sakabéh laporan ayeuna, sadaya tés, nomer anu dipasihkeun pikeun konfigurasi anu kami anggo. Kami ayeuna nyandak sakitar 20 rébu métrik per detik ti éta. Upami anjeun nyobian ngartos naha ieu bakal dianggo pikeun anjeun, anjeun tiasa ngabandingkeun. Naon anu dibahas ayeuna dipasang dina GitHub dina bentuk patch: github.com/miklert/zabbix

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

patch ngawengku:

  • integrasi pinuh ku Clickhouse (duanana server Zabbix sareng frontend);
  • ngarengsekeun masalah sareng manajer preprocessor;
  • polling asynchronous.

Patch ieu cocog sareng sadaya versi 4, kalebet lts. Paling dipikaresep, kalawan parobahan minimal bakal dianggo dina versi 3.4.

Hatur nuhun pikeun perhatian Anjeun.

patarosan

Pananya ti hadirin (salajengna – A): – Wilujeng siang! Punten wartosan kuring, anjeun gaduh rencana pikeun interaksi intensif sareng tim Zabbix atanapi sareng aranjeunna sareng anjeun, supados ieu sanés patch, tapi kabiasaan normal Zabbix?

MM: - Leres, urang pasti bakal ngalakukeun sababaraha parobihan. Aya anu bakal kajadian, aya anu bakal tetep aya dina patch.

J: – Hatur nuhun pisan pikeun laporan alus teuing! Punten wartosan kuring, saatos nerapkeun patch, dukungan ti Zabbix bakal tetep sareng kumaha carana neraskeun ngapdet kana vérsi anu langkung luhur? Naha mungkin pikeun ngapdet Zabbix saatos patch anjeun ka 4.2, 5.0?

MM: – Abdi teu bisa ngomong nanaon ngeunaan rojongan. Mun kuring éta rojongan teknis Zabbix, Kuring meureun bakal nyebutkeun euweuh, sabab ieu kode batur. Sedengkeun pikeun basis kode 4.2, posisi kami nyaéta: "Kami bakal ngalih kalayan waktos, sareng kami bakal ngamutahirkeun diri dina versi salajengna." Ku alatan éta, pikeun sawatara waktu urang bakal ngeposkeun patch pikeun versi diropéa. Kuring parantos nyarios dina laporan: jumlah parobihan sareng versi masih sakedik. Jigana transisi tina 3.4 ka 4 nyandak urang ngeunaan menit 15. Aya hal robah aya, tapi teu penting pisan.

J: - Janten anjeun badé ngadukung patch anjeun sareng anjeun tiasa aman dipasang dina produksi sareng nampi apdet dina sababaraha cara di hareup?

MM: – Urang niatna nyarankeun eta. Ieu solves loba masalah keur urang.

MCH: - Sakali deui, Abdi hoyong ngagambar perhatian kanyataan yén parobahan nu teu patali arsitéktur sarta teu paduli blocking atawa antrian modular, aranjeunna dina modul misah. Malah ku parobahan minor anjeun bisa ngajaga aranjeunna rada gampang.

MM: - Upami anjeun resep kana detilna, maka "Clickhouse" nganggo anu disebut perpustakaan sajarah. Éta henteu diikat - éta mangrupikeun salinan dukungan Elastics, nyaéta, tiasa dikonfigurasi. Polling ukur ngarobah pollers. Simkuring yakin ieu bakal dianggo pikeun lila.

J: - Hatur nuhun pisan. Béjakeun ka kuring, naha aya dokuméntasi ngeunaan parobahan anu dilakukeun?

HighLoad ++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS dina hiji server

MM: - Dokuméntasi nyaéta patch. Jelas, kalayan ngenalkeun Clickhouse, kalayan ngenalkeun jinis poller anyar, pilihan konfigurasi anyar timbul. Link ti slide panungtungan boga pedaran pondok ngeunaan kumaha carana make eta.

Ngeunaan ngagentos fping sareng nmap

J: – Kumaha anjeun tungtungna nerapkeun ieu? Dupi anjeun masihan conto husus: anjeun gaduh strappers na hiji Aksara éksternal? Naon tungtungna mariksa sajumlah ageung host anu gancang pisan? Kumaha anjeun tambang host ieu? Naha urang kedah tuang aranjeunna pikeun nmap kumaha waé, kéngingkeun ti mana waé, nempatkeun aranjeunna, ngajalankeun hiji hal? ..

MM: - Tiis. Patarosan anu leres pisan! Intina ieu. Urang dirobah perpustakaan (ICMP ping, bagian tina Zabbix) pikeun cék ICMP, nu nunjukkeun jumlah pakét - hiji (1), jeung kode nyoba ngagunakeun nmap. Nyaéta, ieu mangrupikeun karya internal Zabbix, anu parantos janten padamelan internal pinger. Sasuai, euweuh sinkronisasi atawa pamakéan trapper a diperlukeun. Hal ieu dilakukeun ngahaja dina urutan ninggalkeun sistem gembleng tur teu kudu nyingkronkeun dua sistem database: naon pariksa, unggah ngaliwatan poller, sarta unggah urang rusak?.. Ieu leuwih basajan.

J: - Naha éta ogé dianggo pikeun proxy?

MM: - Sumuhun, tapi kami henteu pariksa. Kodeu polling sami dina Zabbix sareng server. Kedah dianggo. Hayu atuh ngantebkeun sakali deui: kinerja sistem sapertos nu urang teu butuh proxy a.

MCH: - Jawaban anu leres pikeun patarosan nyaéta: "Naha anjeun peryogi proxy sareng sistem sapertos kitu?" Ngan kusabab NAT atanapi ngawaskeun sababaraha saluran anu lambat ...

J: - Sareng anjeun nganggo Zabbix salaku allertor, upami kuring ngartos leres. Atanapi gaduh grafik anjeun (dimana lapisan arsipna) dipindahkeun ka sistem anu sanés, sapertos Grafana? Atanapi anjeun henteu nganggo pungsi ieu?

MM: – Kuring baris ngantebkeun sakali deui: urang geus kahontal integrasi lengkep. Urang tuang sajarah kana Clickhouse, tapi dina waktos anu sareng kami geus robah frontend php. The Php frontend mana ka Clickhouse sarta ngalakukeun sagala grafik ti dinya. Dina waktos anu sami, jujur, urang gaduh bagian anu ngawangun data dina sistem tampilan grafis anu sanés ti Clickhouse anu sami, tina data Zabbix anu sami.

MCH: - Dina "Grafan" ogé.

Kumaha kaputusan dijieun ngeunaan alokasi sumberdaya?

J: - Bagikeun sakedik dapur batin anjeun. Kumaha kaputusan dijieun yén éta téh diperlukeun pikeun allocate sumberdaya pikeun ngolah serius produk? Ieu, sacara umum, résiko tangtu. Sareng punten wartosan kuring, dina kontéks kanyataan yén anjeun badé ngadukung vérsi énggal: kumaha kaputusan ieu menerkeun tina sudut pandang manajemén?

MM: - Tétéla, urang teu ngabejaan drama sajarah kacida alusna. Kami mendakan diri dina kaayaan dimana aya anu kedah dilakukeun, sareng kami dasarna angkat sareng dua tim paralel:

  • Salah sahijina ngaluncurkeun sistem ngawaskeun nganggo metode anyar: ngawaskeun salaku jasa, sakumpulan standar solusi open source anu kami gabungkeun teras nyobian ngarobih prosés bisnis supados tiasa dianggo sareng sistem ngawaskeun énggal.
  • Dina waktos anu sami, urang ngagaduhan programer anu sumanget anu ngalakukeun ieu (ngeunaan dirina). Kabeneran manéhna meunang.

J: - Sareng naon ukuran tim?

MCH: - Manéhna di hareup anjeun.

J: - Janten, sapertos biasa, anjeun peryogi gairah?

MM: - Kuring henteu weruh naon gairah téh.

J: - Dina hal ieu, katingalina, anjeun. Hatur nuhun pisan, anjeun Heboh.

MM: - Hatur nuhun.

Ngeunaan patch pikeun Zabbix

J: - Pikeun sistem anu ngagunakeun proxy (contona, dina sababaraha sistem disebarkeun), éta mungkin pikeun adaptasi jeung patch, sebutkeun, pollers, proxy sarta sawaréh preprocessor of Zabbix sorangan; jeung interaksi maranéhanana? Naha mungkin pikeun ngaoptimalkeun pamekaran anu tos aya pikeun sistem anu gaduh sababaraha proxy?

MM: - Kuring terang yén server Zabbix dirakit nganggo proxy (kodena disusun sareng diala). Kami henteu acan nguji ieu dina produksi. Kaula teu yakin kana ieu, tapi Jigana manajer preprocessor teu dipaké dina proxy nu. Tugas proxy nyaéta nyandak sakumpulan métrik ti Zabbix, ngahijikeunana (eta ogé ngarékam konfigurasi, database lokal) sareng masihan deui ka server Zabbix. Server sorangan teras bakal ngalakukeun preprocessing nalika nampi éta.

Minat dina proxy tiasa kaharti. Urang bakal pariksa kaluar. Ieu topik metot.

J: - Ide ieu: lamun bisa patch pollers, anjeun tiasa patch aranjeunna dina proxy jeung patch interaksi jeung server, sarta adaptasi preprocessor pikeun tujuan ieu ngan dina server.

MM: - Jigana éta malah basajan. Anjeun nyandak kodeu, nerapkeun patch, teras ngonpigurasikeun cara anu anjeun peryogikeun - kumpulkeun server proxy (contona, sareng ODBC) sareng nyebarkeun kode anu ditambal dina sistem. Dimana perlu - kumpulkeun proxy, dimana perlu - server.

J: - Paling dipikaresep, anjeun moal kudu patch transmisi proxy ka server Sajaba?

MCH: - Henteu, éta standar.

MM: – Kanyataanna, salah sahiji gagasan teu disada. Kami salawasna ngajaga kasaimbangan antara ledakan ideu sareng jumlah parobihan sareng betah dukungan.

Sababaraha iklan 🙂

Hatur nuhun pikeun tetep sareng kami. Naha anjeun resep artikel kami? Hoyong ningali eusi anu langkung narik? Dukung kami ku cara nempatkeun pesenan atanapi nyarankeun ka babaturan, cloud VPS pikeun pamekar ti $4.99, analog unik tina server tingkat éntri, anu diciptakeun ku kami pikeun anjeun: Sakabeh bebeneran ngeunaan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ti $ 19 atanapi kumaha babagi server a? (sadia kalawan RAID1 na RAID10, nepi ka 24 cores sarta nepi ka 40GB DDR4).

Dell R730xd 2 kali langkung mirah dina puseur data Equinix nagara golongan IV di Amsterdam? Ngan di dieu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ti $199 di Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ti $99! Baca ngeunaan Kumaha ngawangun Infrastruktur Corp. kelas kalawan pamakéan Dell R730xd E5-2650 v4 server patut 9000 euro pikeun Penny a?

sumber: www.habr.com

Tambahkeun komentar