Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Jodi a, anplis kòd monolitik, pwojè nou an gen ladan plizyè douzèn mikwosèvis. Chak nan yo mande pou yo kontwole. Fè sa sou yon echèl konsa lè l sèvi avèk enjenyè DevOps se pwoblèm. Nou te devlope yon sistèm siveyans ki travay kòm yon sèvis pou devlopè yo. Yo ka ekri metriz poukont yo nan sistèm siveyans la, sèvi ak yo, bati tablodbò ki baze sou yo, epi tache alèt yo ki pral deklanche lè valè papòt yo rive. Pou enjenyè DevOps, sèlman enfrastrikti ak dokiman.

Pòs sa a se yon transkripsyon nan diskou mwen an ak nou an seksyon nan RIT++. Anpil moun te mande nou fè vèsyon tèks nan rapò soti nan la. Si ou te nan konferans lan oswa gade videyo a, ou p'ap jwenn anyen nouvo. Ak tout lòt moun - Byenveni nan chat la. Mwen pral di w ki jan nou rive nan yon sistèm konsa, ki jan li fonksyone ak ki jan nou planifye mete ajou li.

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

sot pase a: rapid ak plan

Ki jan nou rive nan sistèm siveyans aktyèl la? Pou reponn kesyon sa a, ou bezwen ale nan 2015. Men sa li te sanble lè sa a:

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Nou te gen anviwon 24 nœuds ki te responsab siveyans. Gen yon pake antye nan diferan kouwòn, scripts, demon ki yon jan kanmenm kontwole yon bagay, voye mesaj, ak fè fonksyon. Nou te panse ke plis nou te ale, se mwens solid yon sistèm sa a ta dwe. Pa gen okenn pwen nan devlope li: li twò ankonbran.
Nou deside chwazi eleman siveyans sa yo ke nou pral kenbe ak devlope, ak sa yo ke nou pral abandone. Te gen 19. Se sèlman grafit, agrégateur ak Grafana kòm yon tablodbò ki rete. Men, ki jan nouvo sistèm nan pral sanble? Tankou sa a:

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Nou gen yon depo metrik: sa yo se grafit, ki pral baze sou kondui SSD vit, sa yo se sèten agregatè pou metrik. Next - Grafana pou montre tablodbò ak Moira pou avètisman. Nou te vle tou devlope yon sistèm pou chèche anomali.

Creole: Siveyans 2.0

Se sa ki plan yo te sanble an 2015. Men, nou te dwe prepare non sèlman enfrastrikti a ak sèvis la li menm, men tou, dokiman an pou li. Nou te devlope yon estanda antrepriz pou tèt nou, ke nou rele monitoring 2.0. Ki kondisyon yo te genyen pou sistèm nan?

  • disponiblite konstan;
  • mezi depo entèval = 10 segonn;
  • estriktire depo nan metrik ak tablodbò;
  • SLA > 99,99%
  • koleksyon mezi evènman atravè UDP (!).

Nou te bezwen UDP paske nou gen yon gwo koule nan trafik ak evènman ki jenere mezi. Si ou ekri yo tout nan grafit nan yon fwa, depo a pral tonbe. Nou te chwazi tou prefiks premye nivo pou tout paramèt yo.

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Chak nan prefiks yo gen kèk pwopriyete. Gen mezi pou sèvè, rezo, kontenè, resous, aplikasyon, ak sou sa. Yo te aplike filtraj klè, strik, tape, kote nou aksepte mezi premye nivo epi tou senpleman lage rès la. Se konsa nou te planifye sistèm sa a an 2015. Ki sa ki nan prezan an?

Prezante: dyagram nan entèraksyon konpozan siveyans

Premye a tout, nou kontwole aplikasyon yo: kòd PHP nou an, aplikasyon ak mikwosèvis - an ti bout tan, tout sa devlopè nou yo ekri. Tout aplikasyon yo voye mezi atravè UDP bay agrégateur Brubeck (statsd, reekri nan C). Li te vin pi rapid nan tès sentetik yo. Epi li voye mezi yo deja total nan Graphite atravè TCP.

Li gen yon kalite mezi yo rele timers. Sa a se yon bagay trè pratik. Pou egzanp, pou chak koneksyon itilizatè a sèvis la, ou voye yon metrik ak tan repons bay Brubeck. Yon milyon repons te vini, men agrégateur a te retounen sèlman 10 paramèt. Ou gen kantite moun ki te vini, maksimòm, minimòm ak mwayèn tan repons, medyàn ak 4 percentiles. Lè sa a, done yo transfere nan Graphite epi nou wè li tout ap viv.

Nou gen tou agrégation pou mezi sou pyès ki nan konpitè, lojisyèl, mezi sistèm ak ansyen sistèm siveyans Munin nou an (li te travay pou nou jiska 2015). Nou kolekte tout bagay sa yo atravè C daemon CollectD a (li gen yon pakèt antye nan grefon diferan bati nan li, li ka sondaj tout resous yo nan sistèm lame a sou kote li enstale, jis presize nan konfigirasyon an ki kote yo ekri done yo) ak ekri done yo sou Graphite atravè li. Li sipòte tou grefon python ak scripts koki, kidonk, ou ka ekri pwòp solisyon koutim ou: CollectD pral kolekte done sa yo nan yon lame lokal oswa aleka (asepte Curl) epi voye li bay Graphite.

Lè sa a, nou voye tout mezi ke nou kolekte nan Carbon-c-relè. Sa a se solisyon an Carbon Relay soti nan Graphite, modifye nan C. Sa a se yon routeur ki kolekte tout mezi yo ke nou voye soti nan agrégateur nou yo ak wout yo nan nœuds. Epitou nan etap nan routage, li tcheke validite nan mezi yo. Premyèman, yo dwe koresponn ak konplo prefiks mwen te montre pi bonè epi, dezyèmman, yo valab pou grafit. Sinon yo pral lage.

Kabòn-c-relè Lè sa a, voye mezi yo nan gwoup la Graphite. Nou itilize Carbon-cache, reekri nan Go, kòm depo prensipal la nan metrik. Go-kabòn, akòz multithreading li yo, byen lwen depase Carbon-cache. Li resevwa done epi ekri li sou disk lè l sèvi avèk pake a chichote (estanda, ekri nan piton). Pou nou ka li done ki soti nan depo nou yo, nou itilize Graphite API. Li pi vit pase WEB Graphite estanda. Kisa k ap pase done yo apre?

Yo ale nan Grafana. Nou itilize grap grafit nou yo kòm sous prensipal done, epi nou gen Grafana kòm yon koòdone entènèt pou montre mezi ak bati tablodbò. Pou chak nan sèvis yo, devlopè yo kreye pwòp tablodbò yo. Lè sa a, yo bati graf ki baze sou yo, ki montre mezi yo ekri nan aplikasyon yo. Anplis Grafana, nou gen SLAM tou. Sa a se yon move lespri python ki kalkile SLA ki baze sou done ki soti nan grafit. Kòm mwen te deja di, nou gen plizyè douzèn mikwosèvis, chak nan yo ki gen pwòp kondisyon pa yo. Sèvi ak SLAM, nou ale nan dokiman an epi konpare li ak sa ki nan Graphite epi konpare kòman kondisyon yo koresponn ak disponiblite sèvis nou yo.

Ann ale pi lwen: alèt. Li òganize lè l sèvi avèk yon sistèm fò - Moira. Li endepandan paske li gen pwòp Graphite li yo anba kapo a. Devlope pa mesye yo soti nan SKB "Kontur", ekri nan python ak Go, konplètman louvri sous. Moira resevwa menm koule ki antre nan grafit. Si pou kèk rezon depo ou mouri, alèt ou a ap toujou travay.

Nou te deplwaye Moira nan Kubernetes; li itilize yon gwoup serveurs Redis kòm baz done prensipal la. Rezilta a se te yon sistèm toleran fay. Li konpare kouran nan metrik ak lis deklanche: si pa gen okenn mansyone nan li, Lè sa a, li gout metrik la. Se konsa, li se kapab dijere jigokte nan metrik pou chak minit.

Nou tache tou yon LDAP antrepriz ak li, avèk èd ki chak itilizatè nan sistèm antrepriz la ka kreye notifikasyon pou tèt yo ki baze sou deklanche ki deja egziste (oswa ki fèk kreye). Depi Moira gen Graphite, li sipòte tout karakteristik li yo. Se konsa, ou premye pran liy lan epi kopye li nan Grafana. Gade kijan done yo parèt sou graf yo. Apre sa, ou pran menm liy lan epi kopye li nan Moira. Ou pann li ak limit epi jwenn yon alèt nan pwodiksyon an. Pou fè tout bagay sa yo, ou pa bezwen okenn konesans espesifik. Moira ka alèt via SMS, imèl, Jira, Slack ... Li sipòte tou ekzekisyon an nan scripts koutim. Lè yon deklanche rive li, epi li enskri nan yon script koutim oswa binè, li kouri li epi voye JSON nan stdin pou binè sa a. An konsekans, pwogram ou an dwe analize li. Sa ou pral fè ak JSON sa a se ou menm. Si ou vle, voye l nan Telegram, si ou vle, louvri travay nan Jira, fè tou sa.

Nou menm tou nou itilize devlopman pwòp pa nou pou avètisman - Imagotag. Nou adapte panèl la, ki anjeneral yo itilize pou etikèt pri elektwonik nan magazen yo, pou adapte bezwen nou yo. Nou te pote deklanche soti nan Moira nan li. Li endike nan ki eta yo ye ak ki lè yo te fèt. Gen kèk nan mesye devlopman yo abandone notifikasyon nan Slack ak imèl an favè panèl sa a.

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Oke, depi nou se yon konpayi pwogresis, nou menm tou nou kontwole Kubernetes nan sistèm sa a. Nou enkli li nan sistèm nan lè l sèvi avèk Heapster, ke nou enstale nan gwoup la, li kolekte done epi voye li nan Graphite. Kòm yon rezilta, dyagram nan sanble sa a:

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis

Siveyans Eleman

Men yon lis lyen ki mennen nan konpozan nou te itilize pou travay sa a. Tout nan yo se sous louvri.

Graphite:

Kabòn-c-relè:

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

Kolekte:

collectd.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

Estatistik

Ak isit la gen kèk nimewo sou fason sistèm nan travay pou nou.

Agrégateur (brubeck)

Kantite paramèt: ~300/sec
Entèval pou voye metrik nan Graphite: 30 sec
Itilizasyon resous sèvè: ~ 6% CPU (nou ap pale de sèvè plen véritable); ~ 1Gb RAM; ~3 Mbps LAN

Graphite (ale-kabòn)

Kantite mezi: ~ 1 / min
Entèval aktyalizasyon mezi: 30 sec
Konplo depo metrik: 30sec 35d, 5min 90d, 10min 365d (ba ou yon konpreyansyon sou sa k ap pase nan sèvis la sou yon peryòd tan long)
Itilizasyon resous sèvè: ~ 10% CPU; ~ 20Gb RAM; ~30 Mbps LAN

Fleksibilite

Nou menm nan Avito vrèman apresye fleksibilite nan sèvis siveyans nou an. Poukisa li te aktyèlman tounen tankou sa a? Premyèman, eleman li yo ka ranplase: tou de eleman yo tèt yo ak vèsyon yo. Dezyèmman, sipò. Depi tout pwojè a se sous louvri, ou ka edite kòd la tèt ou, fè chanjman, epi aplike fonksyon ki pa disponib soti nan bwat la. Pile byen komen yo itilize, sitou Go ak Python, kidonk sa a se fè byen tou senpleman.

Isit la se yon egzanp yon pwoblèm reyèl. Yon metrik nan Graphite se yon dosye. Li gen yon non. Non fichye = non metrik. E gen yon fason pou rive la. Non fichye nan Linux limite a 255 karaktè. Epi nou gen (tankou "kliyan entèn") mesye ki soti nan depatman baz done a. Yo di nou: "Nou vle kontwole demann SQL nou yo. Epi yo pa 255 karaktè, men 8 MB chak. Nou vle montre yo nan Grafana, wè paramèt yo pou demann sa a, e menm pi bon, nou vle wè tèt demann sa yo. Li pral gwo si li parèt an tan reyèl. Li ta vrèman fre pou mete yo nan alèt la."

Siveyans kòm yon sèvis: yon sistèm modilè pou achitekti mikwosèvis
Rekèt SQL egzanp lan pran kòm yon egzanp nan sit postgrespro.ru

Nou mete yon sèvè Redis epi sèvi ak grefon Collectd nou an, ki ale nan Postgres epi pran tout done yo soti nan la, voye metrik nan Graphite. Men, nou ranplase non metrik la ak hash. Nou an menm tan voye hash la menm nan Redis kòm yon kle, ak tout rechèch la SQL kòm yon valè. Tout sa nou dwe fè se asire w ke Grafana ka ale nan Redis epi pran enfòmasyon sa yo. Nou ap louvri Graphite API paske... sa a se koòdone prensipal la pou entèraksyon an nan tout eleman siveyans ak grafit, epi nou antre nan yon nouvo fonksyon gen rele aliasByHash () - soti nan Grafana nou jwenn non an nan metrik la, epi sèvi ak li nan yon demann nan Redis kòm yon kle, nan repons nou jwenn valè kle a, ki se "rekèt SQL" nou an ". Kidonk, nou te montre nan Grafana yon ekspozisyon yon rechèch SQL, ki an teyori te enposib pou montre la, ansanm ak estatistik sou li (apèl, ranje, total_time, ...).

Rezilta

Disponibilite Sèvis siveyans nou an disponib 24/7 nan nenpòt aplikasyon ak nenpòt kòd. Si ou gen aksè nan enstalasyon depo, ou ka ekri done nan sèvis la. Lang lan pa enpòtan, desizyon yo pa enpòtan. Ou bezwen sèlman konnen ki jan yo louvri yon priz, mete yon metrik la epi fèmen priz la.

Fyabilite Tout konpozan yo toleran fay epi okipe chay nou yo byen.

Ba baryè pou antre. Pou itilize sistèm sa a, ou pa bezwen aprann lang pwogramasyon ak demann nan Grafana. Jis louvri aplikasyon w lan, antre nan yon priz ladan l ki pral voye metrik nan Graphite, fèmen li, louvri Grafana, kreye tablodbò la epi gade konpòtman an nan metrik ou yo, resevwa notifikasyon atravè Moira.

Endepandans. Ou ka fè tout bagay sa yo tèt ou, san èd nan enjenyè DevOps. Ak sa a se yon avantaj, paske ou ka kontwole pwojè ou kounye a, ou pa bezwen mande nenpòt moun - swa yo kòmanse travay oswa fè chanjman.

Ki sa nou vize?

Tout sa ki nan lis anba a se pa sèlman panse abstrè, men yon bagay nan direksyon ki omwen premye etap yo te pran.

  1. Detektè anomali. Nou vle kreye yon sèvis ki pral ale nan depo Graphite nou yo epi tcheke chak metrik lè l sèvi avèk algoritm divès kalite. Gen deja algoritm ke nou vle wè, gen done, nou konnen ki jan yo travay avèk li.
  2. Metadata. Nou gen anpil sèvis, yo chanje sou tan, menm jan ak moun ki travay avèk yo. Toujou kenbe dokiman yo manyèlman se pa yon opsyon. Se poutèt sa kounye a nou entegre metadata nan mikwosèvis nou yo. Li di ki moun ki devlope li, lang li kominike avèk yo, kondisyon SLA, ki kote ak ki moun yo ta dwe voye notifikasyon. Lè w ap deplwaye yon sèvis, tout done antite yo kreye poukont yo. Kòm yon rezilta, ou jwenn de lyen - youn nan deklanche, lòt la nan tablodbò nan Grafana.
  3. Siveyans nan chak kay. Nou kwè ke tout devlopè ta dwe itilize yon sistèm konsa. Nan ka sa a, ou toujou konprann ki kote trafik ou ye, sa ki rive li, ki kote li tonbe, ki kote feblès li yo. Si, pou egzanp, yon bagay vini ak aksidan sèvis ou a, Lè sa a, ou pral aprann sou li pa pandan yon apèl nan men manadjè a, men nan yon alèt, epi ou ka imedyatman louvri dènye mòso bwa yo epi wè sa ki te pase la.
  4. Gwo pèfòmans. Pwojè nou an toujou ap grandi, e jodi a li trete apeprè 2 valè metrik pou chak minit. Yon ane de sa, figi sa a te 000 000. Ak kwasans lan ap kontinye, e sa vle di ke apre kèk tan Graphite (chichote) ap kòmanse lou chaje subsistèm ki gen kapasite a. Kòm mwen te deja di, sistèm siveyans sa a se byen inivèsèl akòz entèrchanjabilite nan eleman yo. Yon moun kenbe ak toujou ap elaji enfrastrikti yo espesyalman pou Graphite, men nou deside ale nan yon wout diferan: sèvi ak Klike sou Kay kòm yon depo pou mezi nou yo. Tranzisyon sa a prèske fini, e trè byento mwen pral di w an plis detay ki jan sa te fèt: ki difikilte ki te genyen ak ki jan yo te simonte, ki jan pwosesis migrasyon an te ale, mwen pral dekri eleman yo chwazi kòm obligatwa ak konfigirasyon yo.

Mèsi pou atansyon ou! Poze kesyon ou yo sou sijè a, mwen pral eseye reponn isit la oswa nan pòs sa yo. Petèt yon moun gen eksperyans nan bati yon sistèm siveyans menm jan an oswa chanje nan Clickhouse nan yon sitiyasyon ki sanble - pataje li nan kòmantè yo.

Sous: www.habr.com

Add nouvo kòmantè