Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Karon, dugang sa monolithic code, ang among proyekto naglakip sa daghang mga microservice. Ang matag usa kanila kinahanglan nga bantayan. Ang pagbuhat niini sa ingon nga sukod gamit ang mga inhenyero sa DevOps adunay problema. Naghimo kami og usa ka sistema sa pagmonitor nga naglihok isip usa ka serbisyo alang sa mga developers. Mahimo silang independente nga magsulat sa mga sukatan sa sistema sa pag-monitor, magamit kini, magtukod mga dashboard base sa kanila, ug maglakip sa mga alerto sa kanila nga ma-trigger kung maabot ang mga kantidad sa threshold. Alang sa mga inhenyero sa DevOps, imprastraktura ug dokumentasyon lamang.

Kini nga post usa ka transcript sa akong pakigpulong sa among mga seksyon sa RIT++. Daghang mga tawo ang mihangyo kanamo sa paghimo og mga bersyon sa teksto sa mga taho gikan didto. Kung naa ka sa komperensya o nagtan-aw sa video, wala ka makit-an nga bag-o. Ug ang tanan - welcome sa iring. Isulti ko kanimo kung giunsa namo pag-abut sa ingon nga sistema, kung giunsa kini molihok ug kung giunsa namon kini plano nga i-update.

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Ang nangagi: mga laraw ug mga plano

Giunsa namo pag-abot sa kasamtangan nga sistema sa pagmonitor? Aron matubag kini nga pangutana, kinahanglan ka moadto sa 2015. Mao kini ang hitsura kaniadto:

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Kami adunay mga 24 ka node nga responsable sa pag-monitor. Adunay usa ka tibuuk nga pakete sa lainlaing mga korona, mga script, mga daemon nga sa usa ka paagi nag-monitor sa usa ka butang, nagpadala mga mensahe, ug naghimo sa mga gimbuhaton. Naghunahuna kami nga sa unahan pa kami, dili kaayo mahimo ang ingon nga sistema. Walay kapuslanan ang pagpalambo niini: kini hilabihan ka hago.
Nakahukom kami nga pilion kadtong mga elemento sa pagmonitor nga among tipigan ug pauswagon, ug kadtong among biyaan. Adunay 19 niini. Ang nahabilin nga mga graphite, aggregators ug Grafana isip dashboard. Apan unsa ang hitsura sa bag-ong sistema? Ingon ani:

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Adunay kami usa ka pagtipig sa sukatan: kini mga graphite, nga ibase sa paspas nga mga drive sa SSD, kini mga piho nga mga aggregator alang sa mga sukatan. Sunod - Grafana alang sa pagpakita sa mga dashboard ug Moira alang sa pag-alerto. Gusto usab namo nga maghimo ug sistema sa pagpangita sa mga anomaliya.

Sumbanan: Pag-monitor 2.0

Ingon niini ang hitsura sa mga plano sa 2015. Apan kinahanglan namon nga andamon dili lamang ang imprastraktura ug ang serbisyo mismo, apan usab ang dokumentasyon alang niini. Naghimo kami usa ka sumbanan sa korporasyon alang sa among kaugalingon, nga gitawag namon nga monitoring 2.0. Unsa ang mga kinahanglanon alang sa sistema?

  • kanunay nga pagkaanaa;
  • metrics storage interval = 10 segundos;
  • structured storage sa metrics ug dashboards;
  • SLA > 99,99%
  • koleksyon sa mga sukatan sa panghitabo pinaagi sa UDP (!).

Nagkinahanglan kami og UDP tungod kay kami adunay daghang dagan sa trapiko ug mga panghitabo nga makamugna og mga sukatan. Kung isulat nimo silang tanan sa graphite sa usa ka higayon, ang pagtipig mahugno. Gipili usab namo ang mga prefix sa una nga lebel alang sa tanan nga mga sukatan.

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Ang matag usa sa mga prefix adunay pipila ka kabtangan. Adunay mga sukatan alang sa mga server, network, sudlanan, kahinguhaan, aplikasyon, ug uban pa. Ang tin-aw, estrikto, gi-type nga pagsala ang gipatuman, diin among gidawat ang mga sukatan sa una nga lebel ug ihulog lang ang nahabilin. Ingon niini kung giunsa namon giplano kini nga sistema kaniadtong 2015. Unsa ang naa sa karon?

Karon: diagram sa interaksyon sa mga sangkap sa pag-monitor

Una sa tanan, among gimonitor ang mga aplikasyon: among PHP code, mga aplikasyon ug mga microservice - sa laktod, tanan nga gisulat sa among mga developers. Ang tanan nga mga aplikasyon nagpadala mga sukatan pinaagi sa UDP sa Brubeck aggregator (statsd, gisulat pag-usab sa C). Kini nahimo nga labing paspas sa sintetikong mga pagsulay. Ug kini nagpadala sa na-aggregated metrics ngadto sa Graphite pinaagi sa TCP.

Kini adunay usa ka matang sa metrics nga gitawag ug timers. Kini usa ka kombenyente kaayo nga butang. Pananglitan, alang sa matag koneksyon sa tiggamit sa serbisyo, magpadala ka usa ka sukatan nga adunay oras sa pagtubag sa Brubeck. Usa ka milyon nga mga tubag ang misulod, apan ang aggregator mibalik lamang og 10 ka metrics. Anaa kanimo ang gidaghanon sa mga tawo nga mianhi, ang labing taas, minimum ug kasagaran nga oras sa pagtubag, ang median ug ang ika-upat nga porsyento. Dayon ang datos gibalhin ngadto sa Graphite ug nakita namo kining tanan nga buhi.

Adunay usab kami nga panagsama alang sa mga sukatan sa hardware, software, mga sukatan sa sistema ug ang among daan nga sistema sa pag-monitor sa Munin (nagtrabaho kini alang kanamo hangtod sa 2015). Gikolekta namo kining tanan pinaagi sa C daemon CollectD (kini adunay usa ka bug-os nga hugpong sa lain-laing mga plugins nga gitukod niini, mahimo kini nga poll sa tanan nga mga kahinguhaan sa host system diin kini gi-install, ipiho lang sa configuration kung asa isulat ang data) ug isulat ang datos sa Graphite pinaagi niini. Gisuportahan usab niini ang mga plugins sa python ug mga script sa kabhang, aron makasulat ka sa imong kaugalingon nga naandan nga mga solusyon: Ang CollectD kolektahon kini nga datos gikan sa usa ka lokal o hilit nga host (nagtuo nga Curl) ug ipadala kini sa Graphite.

Dayon ipadala namo ang tanang metrics nga among nakolekta sa Carbon-c-relay. Kini ang solusyon sa Carbon Relay gikan sa Graphite, giusab sa C. Kini usa ka router nga nagkolekta sa tanan nga mga sukatan nga among gipadala gikan sa among mga aggregator ug gi-ruta kini sa mga node. Usab sa yugto sa pagruta, gisusi niini ang kabalido sa mga sukatan. Una, kini kinahanglan nga katumbas sa prefix scheme nga akong gipakita sa sayo pa ug, ikaduha, kini balido alang sa graphite. Kay kon dili sila mahulog.

Ang Carbon-c-relay dayon nagpadala sa metrics sa Graphite cluster. Gigamit namo ang Carbon-cache, gisulat pag-usab sa Go, isip nag-unang pagtipig sa mga sukatan. Ang Go-carbon, tungod sa multithreading niini, labaw pa sa Carbon-cache. Nakadawat kini og datos ug gisulat kini sa mga disk gamit ang whisper package (standard, gisulat sa python). Aron mabasa ang datos gikan sa among mga storage, among gigamit ang Graphite API. Kini mas paspas kay sa standard Graphite WEB. Unsa ang sunod nga mahitabo sa datos?

Moadto sila sa Grafana. Gigamit namo ang among graphite clusters isip nag-unang tinubdan sa datos, ug aduna kami Grafana isip web interface para sa pagpakita sa metrics ug pagtukod og mga dashboard. Alang sa matag usa sa ilang mga serbisyo, ang mga developer naghimo sa ilang kaugalingon nga dashboard. Dayon nagtukod sila og mga graph base niini, nga nagpakita sa metrics nga ilang gisulat gikan sa ilang mga aplikasyon. Gawas sa Grafana, naa pud mi SLAM. Kini usa ka demonyo nga python nga nagkalkula sa SLA base sa datos gikan sa graphite. Sama sa giingon ko na, kami adunay daghang dosena nga mga microservice, ang matag usa adunay kaugalingon nga mga kinahanglanon. Gamit ang SLAM, moadto kami sa dokumentasyon ug itandi kini sa kung unsa ang naa sa Graphite ug itandi kung unsa ka maayo ang mga kinahanglanon nga katumbas sa pagkaanaa sa among mga serbisyo.

Mopadayon pa ta: pagpaalerto. Giorganisar kini gamit ang usa ka lig-on nga sistema - Moira. Kini independente tungod kay kini adunay kaugalingon nga Graphite sa ilawom sa hood. Gipalambo sa mga lalaki gikan sa SKB "Kontur", gisulat sa python ug Go, hingpit nga bukas nga gigikanan. Nakadawat si Moira sa parehas nga agos nga moadto sa mga graphite. Kung tungod sa usa ka hinungdan ang imong pagtipig mamatay, ang imong pag-alerto molihok gihapon.

Gi-deploy namo ang Moira sa Kubernetes; naggamit kini og cluster sa Redis servers isip main database. Ang resulta mao ang usa ka fault-tolerant nga sistema. Gitandi niini ang stream sa metrics sa lista sa mga trigger: kung walay mga paghisgot niini, nan kini naghulog sa metric. Busa kini makahimo sa paghilis sa gigabytes sa metrics kada minuto.

Gilakip usab namo ang usa ka corporate LDAP niini, uban sa tabang diin ang matag user sa corporate system makahimo og mga pahibalo alang sa ilang kaugalingon base sa kasamtangan (o bag-ong gibuhat) nga mga trigger. Tungod kay ang Moira adunay Graphite, gisuportahan niini ang tanan nga mga bahin niini. Busa kuhaa una nimo ang linya ug kopyaha kini sa Grafana. Tan-awa kung giunsa gipakita ang datos sa mga graph. Ug dayon imong kuhaon ang parehas nga linya ug kopyaha kini sa Moira. Gibitay nimo kini nga adunay mga limitasyon ug makakuha usa ka alerto sa output. Aron mahimo kining tanan, wala nimo kinahanglana ang bisan unsang piho nga kahibalo. Mahimong alerto si Moira pinaagi sa SMS, email, Jira, Slack... Gisuportahan usab niini ang pagpatuman sa mga custom script. Kung ang usa ka gatilyo mahitabo kaniya, ug siya naka-subscribe sa usa ka custom nga script o binary, iyang gipadagan kini ug gipadala ang JSON sa stdin alang niini nga binary. Busa, ang imong programa kinahanglan nga mag-parse niini. Kung unsa ang imong buhaton niini nga JSON naa kanimo. Kung gusto nimo, ipadala kini sa Telegram, kung gusto nimo, ablihi ang mga buluhaton sa Jira, buhata bisan unsa.

Gigamit usab namo ang among kaugalingong development para sa pag-alerto - Imagotag. Among gipasibo ang panel, nga kasagarang gigamit alang sa mga electronic price tag sa mga tindahan, aron mohaum sa among mga panginahanglan. Gidala namo ang mga trigger gikan sa Moira niini. Gipakita niini kung unsa ang ilang kahimtang ug kung kanus-a kini nahitabo. Ang pipila sa mga nag-uswag nga mga lalaki mibiya sa mga pahibalo sa Slack ug email pabor sa kini nga panel.

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Aw, tungod kay usa kami ka progresibong kompanya, gimonitor usab namo ang mga Kubernetes niini nga sistema. Giapil namo kini sa sistema gamit ang Heapster, nga among gi-install sa cluster, kini nagkolekta sa datos ug gipadala kini sa Graphite. Ingon usa ka sangputanan, ang diagram ingon niini:

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture

Mga sangkap sa pagmonitor

Ania ang usa ka lista sa mga link sa mga sangkap nga among gigamit alang niini nga buluhaton. Tanan sila bukas nga gigikanan.

graphite:

Carbon-c-relay:

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

Gikolekta:

collectd.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

Statistics

Ug ania ang pipila ka mga numero kung giunsa ang sistema molihok alang kanamo.

Aggregator (brubeck)

Gidaghanon sa mga sukatan: ~300/sec
Interval para sa pagpadala metrics sa Graphite: 30 sec
Paggamit sa kahinguhaan sa server: ~ 6% CPU (naghisgot kami bahin sa hingpit nga mga server); ~ 1Gb RAM; ~3 Mbps LAN

Graphite (go-carbon)

Gidaghanon sa mga sukatan: ~ 1 / min
Ang agwat sa pag-update sa metrics: 30 seg
Metrics storage scheme: 30sec 35d, 5min 90d, 10min 365d (naghatag kanimo og pagsabot sa mahitabo sa serbisyo sulod sa taas nga panahon)
Paggamit sa kahinguhaan sa server: ~10% CPU; ~ 20Gb RAM; ~30 Mbps LAN

Flexibility

Gipabilhan gyud namo sa Avito ang pagka-flexible sa among serbisyo sa pagmonitor. Nganong nahimo man gyud siya nga ingon niini? Una, ang mga sangkap niini mabaylo: ang mga sangkap mismo ug ang ilang mga bersyon. Ikaduha, suporta. Tungod kay ang tibuuk nga proyekto bukas nga gigikanan, mahimo nimong usbon ang code sa imong kaugalingon, paghimo mga pagbag-o, ug ipatuman ang mga gimbuhaton nga dili magamit sa gawas sa kahon. Kasagaran nga mga stack gigamit, nag-una sa Go ug Python, mao nga kini gihimo nga yano.

Ania ang usa ka pananglitan sa usa ka tinuod nga problema. Ang usa ka metric sa Graphite usa ka file. Kini adunay ngalan. Ngalan sa file = metric name. Ug adunay usa ka paagi aron makaabut didto. Ang mga ngalan sa file sa Linux limitado sa 255 ka karakter. Ug kami adunay (isip "internal nga mga kostumer") nga mga lalaki gikan sa departamento sa database. Gisultihan nila kami: "Gusto namon nga bantayan ang among mga pangutana sa SQL. Ug dili sila 255 nga mga karakter, apan 8 MB matag usa. Gusto namon nga ipakita kini sa Grafana, tan-awa ang mga parameter alang niini nga hangyo, ug labi pa, gusto namon nga makita ang tumoy sa ingon nga mga hangyo. Nindot kaayo kung gipakita kini sa tinuud nga oras. Nindot kaayo nga ibutang sila sa alerto. ”

Pag-monitor isip usa ka Serbisyo: Usa ka Modular nga Sistema alang sa Microservice Architecture
Ang pananglitan nga SQL query gikuha isip usa ka pananglitan gikan sa site postgrespro.ru

Nag-set up kami og Redis server ug gigamit ang among Collectd plugins, nga moadto sa Postgres ug kuhaon ang tanang datos gikan didto, ipadala ang metrics ngadto sa Graphite. Apan gipulihan namon ang metric nga ngalan sa mga hash. Dungan namon nga ipadala ang parehas nga hash sa Redis ingon usa ka yawe, ug ang tibuuk nga pangutana sa SQL ingon usa ka kantidad. Ang kinahanglan namong buhaton mao ang pagsiguro nga ang Grafana makaadto sa Redis ug makuha kini nga kasayuran. Among giablihan ang Graphite API tungod kay... kini ang panguna nga interface alang sa interaksyon sa tanan nga mga sangkap sa pag-monitor nga adunay graphite, ug nagsulod kami sa usa ka bag-ong function didto nga gitawag og aliasByHash() - gikan sa Grafana makuha namon ang ngalan sa metric, ug gigamit kini sa usa ka hangyo sa Redis ingon usa ka yawe, sa tubag atong makuha ang bili sa yawe, nga mao ang atong "SQL query" " Sa ingon, among gipakita sa Grafana ang usa ka pagpakita sa usa ka pangutana sa SQL, nga sa teorya imposible nga ipakita didto, kauban ang mga estadistika niini (mga tawag, mga linya, total_time, ...).

Mga resulta

Anaa Ang among serbisyo sa pag-monitor magamit 24/7 gikan sa bisan unsang aplikasyon ug bisan unsang code. Kung adunay ka access sa mga pasilidad sa pagtipig, mahimo nimong isulat ang datos sa serbisyo. Ang pinulongan dili importante, ang mga desisyon dili importante. Kinahanglan ra nimo mahibal-an kung giunsa ang pag-abli sa usa ka socket, pagbutang usa ka metric didto ug isira ang socket.

Kasaligan Ang tanan nga mga sangkap dili matugoton sa sayup ug maayo ang pagdumala sa among mga karga.

Ubos nga babag sa pagsulod. Aron magamit kini nga sistema, dili nimo kinahanglan nga magkat-on sa mga programming language ug mga pangutana sa Grafana. Ablihi lang ang imong aplikasyon, pagsulod sa usa ka socket niini nga magpadala mga sukatan sa Graphite, isara kini, ablihi ang Grafana, paghimo mga dashboard didto ug tan-awa ang pamatasan sa imong mga sukatan, nakadawat mga pahibalo pinaagi sa Moira.

Kagawasan. Mahimo nimo kining tanan sa imong kaugalingon, nga wala’y tabang sa mga inhenyero sa DevOps. Ug kini usa ka bentaha, tungod kay mahimo nimong ma-monitor ang imong proyekto karon, dili nimo kinahanglan pangutan-on ang bisan kinsa - kung magsugod sa trabaho o maghimo mga pagbag-o.

Unsa may atong tumong?

Ang tanan nga gilista sa ubos dili lamang abstract nga mga hunahuna, apan usa ka butang diin labing menos ang unang mga lakang nahimo na.

  1. Detektor sa anomaliya. Gusto namon nga maghimo usa ka serbisyo nga moadto sa among mga pagtipig sa Graphite ug susihon ang matag sukatan gamit ang lainlaing mga algorithm. Adunay na nga mga algorithm nga gusto namong tan-awon, adunay mga datos, nahibal-an namon kung giunsa kini pagtrabaho.
  2. Metadata. Kami adunay daghang mga serbisyo, kini nagbag-o sa paglabay sa panahon, sama sa mga tawo nga nagtrabaho kauban nila. Ang kanunay nga pagpadayon sa dokumentasyon nga mano-mano dili usa ka kapilian. Mao nga gi-embed namon karon ang metadata sa among mga microservice. Gipahayag niini kung kinsa ang nagpalambo niini, ang mga sinultian nga nakig-uban niini, mga kinahanglanon sa SLA, kung diin ug kung kinsa ang kinahanglan ipadala ang mga pahibalo. Kung nag-deploy sa usa ka serbisyo, ang tanan nga datos sa entidad gihimo nga independente. Ingon usa ka sangputanan, nakakuha ka duha ka link - usa sa mga nag-trigger, ang lain sa mga dashboard sa Grafana.
  3. Pag-monitor sa matag balay. Kami nagtuo nga ang tanan nga mga developer kinahanglan nga mogamit sa ingon nga sistema. Sa kini nga kaso, kanunay nimong masabtan kung diin ang imong trapiko, kung unsa ang mahitabo niini, kung diin kini nahulog, kung diin ang mga kahuyang niini. Kung, pananglitan, adunay moabut ug mag-crash sa imong serbisyo, nan mahibal-an nimo kini dili sa panahon sa usa ka tawag gikan sa manedyer, apan gikan sa usa ka alerto, ug mahimo nimong ablihan dayon ang labing bag-ong mga troso ug tan-awa kung unsa ang nahitabo didto.
  4. Taas nga performance. Ang among proyekto kanunay nga nagtubo, ug karon nagproseso kini mga 2 metriko nga kantidad matag minuto. Usa ka tuig ang milabay, kini nga numero mao ang 000. Ug ang pagtubo nagpadayon, ug kini nagpasabot nga human sa pipila ka panahon Graphite (hunghong) magsugod sa bug-at nga load sa disk subsystem. Sama sa giingon ko na, kini nga sistema sa pag-monitor kay unibersal tungod sa pagkabag-o sa mga sangkap. Adunay usa nga nagmintinar ug kanunay nga nagpalapad sa ilang imprastraktura labi na alang sa Graphite, apan nakahukom kami nga moagi sa lahi nga ruta: gamita clickhouse isip usa ka tipiganan alang sa among mga sukatan. Kini nga transisyon hapit na makompleto, ug sa dili madugay isulti ko kanimo sa mas detalyado kung giunsa kini nahimo: kung unsa ang mga kalisud didto ug kung giunsa kini nabuntog, kung giunsa ang proseso sa paglalin, akong ihulagway ang mga sangkap nga gipili ingon nagbugkos ug ang ilang mga pag-configure.

Salamat sa imong pagtagad! Pangutan-a ang imong mga pangutana bahin sa hilisgutan, sulayan nako nga tubagon dinhi o sa mga sunod nga post. Tingali adunay usa nga adunay kasinatian sa pagtukod sa usa ka susama nga sistema sa pag-monitor o pagbalhin sa Clickhouse sa parehas nga sitwasyon - ipaambit kini sa mga komento.

Source: www.habr.com

Idugang sa usa ka comment