Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Kiwari, sajaba kode monolithic, proyék kami ngawengku puluhan microservices. Tiap di antarana kudu diawaskeun. Ngalakukeun ieu dina skala sapertos nganggo insinyur DevOps aya masalah. Kami parantos ngembangkeun sistem ngawaskeun anu tiasa dianggo salaku jasa pikeun pamekar. Aranjeunna tiasa sacara mandiri nyerat métrik kana sistem ngawaskeun, ngagunakeunana, ngawangun dasbor dumasar kana éta, sareng ngagantelkeun panggeuing ka aranjeunna anu bakal dipicu nalika nilai ambang ngahontal. Pikeun insinyur DevOps, ukur infrastruktur sareng dokuméntasi.

Tulisan ieu mangrupikeun transkrip pidato kuring sareng urang bagian di RIT++. Seueur jalma naroskeun ka kami ngadamel versi téks laporan ti dinya. Upami anjeun dina konperénsi atanapi ningali pidéo, anjeun moal mendakan anu énggal. Jeung dulur sejenna - wilujeng sumping ka ucing. Kuring bakal ngabejaan ka maneh kumaha urang datang ka sistem saperti, kumaha gawéna jeung kumaha urang rencanana pikeun ngapdet eta.

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Baheula: skéma sareng rencana

Kumaha urang dugi ka sistem ngawaskeun ayeuna? Pikeun ngajawab patarosan ieu, anjeun kedah angkat ka 2015. Ieu anu katingalina harita:

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Kami ngagaduhan 24 titik anu tanggung jawab pikeun ngawaskeun. Aya sakumpulan mahkota anu béda, naskah, daemon anu kumaha waé ngawaskeun hiji hal, ngirim pesen, sareng ngalaksanakeun fungsi. Urang ngira yén salajengna urang indit, nu kirang giat sistem sapertos bakal. Teu aya gunana pikeun ngembangkeun éta: teuing pajeulit.
Kami mutuskeun pikeun milih elemen ngawaskeun anu bakal kami jaga sareng kembangkeun, sareng anu bakal kami tinggalkeun. Jumlahna aya 19. Ngan ukur grafit, agrégator sareng Grafana salaku dasbor anu tetep. Tapi kumaha sistem anyar bakal katingalina? Resep ieu:

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Kami gaduh panyimpenan métrik: ieu mangrupikeun grafit, anu bakal didasarkeun kana drive SSD gancang, ieu mangrupikeun agrégator pikeun métrik. Teras - Grafana pikeun nampilkeun dasbor sareng Moira pikeun ngageter. Kami ogé hoyong ngembangkeun sistem pikeun milarian anomali.

Baku: Ngawaskeun 2.0

Ieu naon rencana kasampak kawas di 2015. Tapi urang kudu nyiapkeun teu ukur infrastruktur jeung jasa sorangan, tapi ogé dokuméntasi pikeun eta. Kami parantos ngembangkeun standar perusahaan pikeun diri urang sorangan, anu kami sebut ngawaskeun 2.0. Naon sarat pikeun sistem?

  • kasadiaan konstan;
  • métrik interval gudang = 10 detik;
  • gudang terstruktur of metrics na dashboards;
  • SLA > 99,99%
  • kumpulan métrik acara via UDP (!).

Urang diperlukeun UDP sabab urang boga aliran badag lalulintas sarta acara anu ngahasilkeun metrics. Upami anjeun nyerat sadayana kana grafit sakaligus, gudang bakal runtuh. Kami ogé milih awalan tingkat kahiji pikeun sadaya métrik.

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Unggal awalan boga sababaraha sipat. Aya metrics pikeun server, jaringan, wadahna, sumberdaya, aplikasi, jeung saterusna. Saringan anu jelas, ketat, diketik parantos dilaksanakeun, dimana kami nampi métrik tingkat kahiji sareng ngan saukur leupaskeun sésana. Ieu kumaha urang ngarencanakeun sistem ieu dina 2015. Aya naon ayeuna?

Ayeuna: diagram interaksi komponén monitoring

Anu mimiti, urang ngawas aplikasi: kode PHP urang, aplikasi tur microservices - pondokna, sagalana nu pamekar urang nulis. Sadaya aplikasi ngirim métrik via UDP ka agrégator Brubeck (statsd, ditulis ulang dina C). Tétéla éta panggancangna dina tés sintétik. Sareng éta ngirimkeun métrik anu parantos agrégat ka Graphite via TCP.

Éta ngagaduhan jinis métrik anu disebut timers. Ieu hiji hal pisan merenah. Contona, pikeun tiap sambungan pamaké pikeun layanan, Anjeun ngirim métrik kalawan waktu respon ka Brubeck. Sajuta réspon sumping, tapi agrégator ngan ukur 10 métrik. Anjeun gaduh jumlah jalma anu sumping, maksimum, minimum jeung rata waktu respon, median na 4 persentil. Lajeng data ditransferkeun ka grafit sarta kami ningali eta sadayana hirup.

Urang ogé boga aggregation pikeun metrics on hardware, software, metrics sistem jeung sistem ngawas Munin heubeul urang (éta digawé pikeun urang nepi ka 2015). Urang kumpulkeun sadayana ieu ngaliwatan C daemon CollectD (anu gaduh sakumpulan plugins anu béda-béda diwangun kana éta, éta tiasa polling sadaya sumber daya sistem host dimana éta dipasang, ngan tangtukeun dina konfigurasi dimana nyerat data) sareng tulis data ka Graphite ngaliwatan éta. Éta ogé ngadukung plugins python sareng skrip cangkang, ku kituna anjeun tiasa nyerat solusi khusus anjeun nyalira: CollectD bakal ngumpulkeun data ieu ti host lokal atanapi jauh (anggap Curl) sareng ngirimkeun ka Graphite.

Teras we ngirimkeun sadaya métrik anu kami kumpulkeun ka Carbon-c-relay. Ieu mangrupikeun solusi Karbon Relay ti Graphite, dirobih dina C. Ieu mangrupikeun router anu ngumpulkeun sadaya métrik anu kami kirimkeun tina agrégator kami sareng ngalihkeunana ka titik. Ogé dina tahap routing, éta pariksa validitas métrik. Anu mimiti, aranjeunna kedah pakait sareng skéma awalan anu ku kuring ditingalikeun sateuacana sareng, kadua, aranjeunna sah pikeun grafit. Upami teu kitu, aranjeunna bakal lungsur.

Carbon-c-relay teras ngirimkeun métrik ka klaster Grafit. Kami nganggo Karbon-cache, ditulis ulang dina Go, salaku panyimpenan utama métrik. Go-carbon, alatan multithreading na, jauh outperforms Carbon-cache. Éta nampi data sareng nyerat kana disk nganggo pakét whisper (standar, ditulis dina python). Dina raraga maca data tina storages kami, kami nganggo API Grafit. Éta langkung gancang tibatan GRAphite WEB standar. Naon kajadian ka data salajengna?

Aranjeunna angkat ka Grafana. Kami nganggo klaster grafit salaku sumber data utama, sareng kami gaduh Grafana salaku antarmuka wéb pikeun nunjukkeun métrik sareng ngawangun dasbor. Pikeun unggal jasana, pamekar nyiptakeun dasbor sorangan. Teras aranjeunna ngawangun grafik dumasar kana éta, anu nunjukkeun métrik anu aranjeunna tulis tina aplikasina. Salian Grafana, urang ogé boga SLAM. Ieu mangrupikeun sétan python anu ngitung SLA dumasar kana data tina grafit. Sakumaha anu kuring parantos nyarios, kami gaduh sababaraha belasan microservices, masing-masing gaduh syarat sorangan. Ngagunakeun SLAM, urang buka dokuméntasi jeung ngabandingkeun jeung naon di Graphite tur dibandingkeun kumaha sarat cocog kasadiaan jasa kami.

Hayu urang balik salajengna: alerting. Éta diatur nganggo sistem anu kuat - Moira. Éta bebas sabab boga Grafit sorangan handapeun tiung. Dimekarkeun ku guys ti SKB "Kontur", ditulis dina python na Go, sagemblengna open source. Moira nampi aliran anu sami sareng grafit. Upami kusabab sababaraha alesan panyimpenan anjeun maot, waspada anjeun masih tiasa dianggo.

Kami nyebarkeun Moira di Kubernetes; éta ngagunakeun gugusan server Redis salaku pangkalan data utama. Hasilna éta sistem toleran lepat. Éta ngabandingkeun aliran métrik sareng daptar pemicu: upami teu aya anu disebatkeun, maka éta bakal ngirangan métrik. Janten éta tiasa nyerna gigabytes métrik per menit.

Kami ogé ngagantelkeun LDAP perusahaan ka éta, kalayan bantosan unggal pangguna sistem perusahaan tiasa nyiptakeun béwara pikeun nyalira dumasar kana pemicu anu tos aya (atanapi karek dijieun). Kusabab Moira ngandung Graphite, éta ngadukung sadaya fiturna. Janten anjeun mimiti nyandak jalur sareng nyalin kana Grafana. Tempo kumaha data dipintonkeun dina grafik. Teras anjeun nyandak garis anu sami sareng nyalin kana Moira. Anjeun ngagantung eta kalawan wates jeung meunang waspada dina kaluaran. Pikeun ngalakukeun ieu, anjeun henteu peryogi pangaweruh khusus. Moira tiasa waspada via SMS, email, Jira, Slack... Ogé ngadukung palaksanaan skrip khusus. Nalika pemicu mangrupa kajadian ka dirina, sarta manehna geus ngalanggan kana Aksara custom atanapi binér, ngajalankeun eta sarta ngirimkeun JSON ka stdin pikeun binér ieu. Sasuai, program Anjeun kudu parse eta. Naon anu anjeun bakal laksanakeun sareng JSON ieu terserah anjeun. Upami anjeun hoyong, kirimkeun ka Telegram, upami anjeun hoyong, buka tugas di Jira, lakukeun naon waé.

Urang ogé ngagunakeun pamekaran urang sorangan pikeun ngageter - Imagotag. Urang diadaptasi panel, nu biasana dipaké pikeun tag harga éléktronik di toko, pikeun nyocogkeun ka kabutuhan urang. Kami mawa pemicu ti Moira ka dinya. Éta nunjukkeun naon kaayaan aranjeunna sareng nalika aranjeunna kajantenan. Sababaraha pamekar pamekar ngantunkeun béwara dina Slack sareng email pikeun milih panel ieu.

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Nya, sabab kami mangrupikeun perusahaan anu progresif, kami ogé ngawaskeun Kubernetes dina sistem ieu. Urang kaasup kana sistem ngagunakeun Heapster, nu urang dipasang dina klaster, ngumpulkeun data sarta ngirimkeun ka grafit. Hasilna, diagram kasampak kawas kieu:

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice

Komponén ngawaskeun

Ieu daptar tumbu ka komponén anu kami dianggo pikeun tugas ieu. Sadayana mangrupikeun sumber terbuka.

Grafit:

Karbon-c-relay:

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

Dikumpulkeun:

collectd.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

statistik

Sareng ieu sababaraha nomer ngeunaan kumaha sistemna dianggo pikeun urang.

Agregator (brubeck)

Jumlah métrik: ~300/detik
Interval pikeun ngirim métrik ka Graphite: 30 detik
Pamakéan sumberdaya server: ~ 6% CPU (urang ngobrol ngeunaan server full-fledged); ~ 1 Gb RAM; ~3 Mbps LAN

Grafit (go-karbon)

Jumlah métrik: ~ 1 / mnt
Interval update métrik: 30 detik
Skéma panyimpen métrik: 30sec 35d, 5mnt 90d, 10mnt 365d (masihan anjeun pamahaman naon anu lumangsung dina layanan dina jangka waktu nu lila)
Pamakéan sumberdaya server: ~ 10% CPU; ~ 20 Gb RAM; ~30 Mbps LAN

Kalenturan

Kami di Avito leres-leres ngahargaan kalenturan dina jasa ngawaskeun kami. Naha anjeunna sabenerna tétéla kawas kieu? Anu mimiti, komponén-komponénna tiasa ditukeurkeun: boh komponén éta sorangan sareng versina. Bréh, supportability. Kusabab sakabéh proyék open source, anjeun bisa ngédit kode sorangan, nyieun parobahan, sarta nerapkeun fungsi nu teu sadia out of the box. tumpukan cukup umum dipaké, utamana Go jeung Python, jadi ieu dipigawé cukup basajan.

Ieu conto masalah nyata. A métrik dina Graphite nyaéta file. Ieu boga ngaran. Ngaran koropak = ngaran métrik. Sareng aya cara pikeun ka dinya. Ngaran koropak di Linux diwatesan ku 255 karakter. Sarta kami boga (salaku "palanggan internal") guys ti departemen database. Aranjeunna nyarioskeun ka kami: "Kami hoyong ngawas patarosan SQL kami. Jeung maranéhna henteu 255 karakter, tapi 8 MB unggal. Kami hoyong nampilkeunana dina Grafana, tingali parameter pikeun pamundut ieu, sareng langkung saé, kami hoyong ningali luhureun pamundut sapertos kitu. Éta bakal saé upami ditampilkeun sacara real waktos. Éta saé pisan pikeun nempatkeun aranjeunna dina waspada. ”

Ngawaskeun salaku jasa: sistem modular pikeun arsitéktur microservice
Conto query SQL dicokot salaku conto ti situs postgrespro.ru

Kami nyetél server Redis sareng nganggo plugin Collectd kami, anu angkat ka Postgres sareng nyandak sadaya data ti dinya, ngirim métrik ka Graphite. Tapi urang ngaganti ngaran métrik ku hashes. Urang sakaligus ngirimkeun hash anu sami ka Redis salaku konci, sareng sadaya pamundut SQL salaku nilai. Sadaya anu urang kedah laksanakeun nyaéta mastikeun yén Grafana tiasa angkat ka Redis sareng nyandak inpormasi ieu. Kami muka API Grafit sabab ... ieu panganteur utama pikeun interaksi sadaya komponén ngawas kalawan grafit, sarta kami asupkeun fungsi anyar aya disebut aliasByHash () - ti Grafana kami meunang nami métrik, sarta ngagunakeun eta dina pamundut ka Redis salaku konci, di. réspon kami nampi nilai konci, nyaéta "query SQL" kami. Ku kituna, urang dipintonkeun dina Grafana hiji tampilan tina hiji query SQL, nu dina téori teu mungkin pikeun nembongkeun di dinya, babarengan jeung statistik di dinya (nelepon, baris, total_time, ...).

hasil

Kasadiaan Ladenan ngawaskeun kami sayogi 24/7 tina aplikasi sareng kode naon waé. Upami Anjeun gaduh aksés ka fasilitas panyimpenan, Anjeun bisa nulis data ka layanan. Basa teu penting, kaputusan teu penting. Anjeun ngan ukur kedah terang kumaha cara muka stop kontak, nempatkeun métrik di dinya sareng tutup stop kontak.

Réliabilitas. Sadaya komponén teu toleran lepat sareng nanganan beban urang ogé.

Panghalang low pikeun asupna. Pikeun ngagunakeun sistem ieu, anjeun henteu kedah diajar basa pamrograman sareng patarosan dina Grafana. Ngan buka aplikasi anjeun, lebetkeun stop kontak kana éta anu bakal ngirim métrik ka Graphite, tutup éta, buka Grafana, jieun dasbor di dinya sareng tingali paripolah métrik anjeun, nampi béwara ngalangkungan Moira.

Kamerdékaan. Anjeun tiasa ngalakukeun ieu nyalira, tanpa bantosan insinyur DevOps. Sareng ieu mangrupikeun kauntungan, sabab anjeun tiasa ngawas proyék anjeun ayeuna, anjeun henteu kedah naroskeun ka saha waé - boh pikeun ngamimitian damel atanapi ngadamel parobihan.

Naon tujuan urang?

Sadayana anu didaptarkeun di handap ieu sanés ngan ukur pamikiran abstrak, tapi hiji hal anu sahenteuna léngkah-léngkah anu munggaran dilakukeun.

  1. detektor anomali. Kami hoyong ngadamel jasa anu bakal angkat ka panyimpenan Graphite kami sareng pariksa unggal métrik nganggo sababaraha algoritma. Geus aya algoritma anu urang hoyong tingali, aya data, urang terang kumaha dianggo sareng éta.
  2. Métadata. Kami ngagaduhan seueur jasa, aranjeunna robih kana waktosna, sapertos jalma anu damel sareng aranjeunna. Ngajaga dokuméntasi sacara manual sanés pilihan. Éta sababna urang ayeuna nambihkeun metadata kana microservices urang. Éta nyatakeun saha anu ngembangkeun éta, basa anu berinteraksi sareng, syarat SLA, dimana sareng ka saha bewara kedah dikirim. Nalika nyebarkeun jasa, sadaya data éntitas didamel sacara mandiri. Hasilna, anjeun nampi dua tautan - hiji pikeun pemicu, anu sanés ka dasbor di Grafana.
  3. Ngawaskeun di unggal imah. Kami yakin yén sadaya pamekar kedah nganggo sistem sapertos kitu. Dina hal ieu, anjeun salawasna ngartos dimana lalulintas anjeun, naon kajadian ka dinya, dimana ragrag, dimana kalemahan na. Upami, contona, aya anu datang sareng ngadat jasa anjeun, maka anjeun bakal diajar ngeunaan éta sanés nalika nelepon ti manajer, tapi tina waspada, sareng anjeun tiasa langsung muka log panganyarna sareng ningali naon anu kajantenan di dinya.
  4. kinerja luhur. Proyék kami terus-terusan ngembang, sareng ayeuna éta ngolah sakitar 2 nilai métrik per menit. Sataun ka tukang, inohong ieu 000. Sarta tumuwuhna terus, sarta ieu ngandung harti yén sanggeus sababaraha waktu grafit (bisikan) bakal ngawitan beban beurat subsistem disk. Sakumaha anu kuring parantos nyarios, sistem ngawaskeun ieu cukup universal kusabab silih tukeur komponén. Aya anu ngajaga sareng terus-terusan ngalegaan infrastrukturna khusus pikeun Graphite, tapi kami mutuskeun pikeun jalan anu béda: nganggo clickhouse salaku gudang pikeun métrik urang. transisi ieu ampir réngsé, sarta geura-giru kuring bakal ngabejaan ka maneh di leuwih jéntré kumaha ieu dipigawé: naon kasusah aya na kumaha aranjeunna nungkulan, kumaha proses migrasi indit, abdi bakal ngajelaskeun komponén dipilih salaku mengikat jeung konfigurasi maranéhanana.

Nuhun kana perhatosanana! Naroskeun patarosan anjeun dina topik, kuring bakal nyobian ngajawab di dieu atanapi dina tulisan di handap ieu. Panginten aya anu gaduh pangalaman ngawangun sistem ngawaskeun anu sami atanapi ngalih ka Clickhouse dina kaayaan anu sami - bagikeun dina koméntar.

sumber: www.habr.com

Tambahkeun komentar