Cras ut servitium: modularis ratio architecturae microservice

Hodie, praeter codicem monolithicum, consilium nostrum includit justos microserviorum. Quisque eget viverra est. Hoc faciens in tali libra utens fabrum DevOpum problematicum est. Nos systema vigilantia elaboraverunt quae opera tincidunt inserviunt. Sine ratione metrica scribere possunt, illis utere, ashboardis ex illis construere, ac summis adnectere iis qui urguebunt cum valores limen attinguntur. Ad fabrum DevOps, solum infrastructurae et documenta.

Haec posta est transcriptio sermonis mei cum nostro sectioni apud RIT++. Multi rogaverunt nos ut relationes inde redderemus. Si in colloquio esses aut video vidi, nihil novi reperies. Et omnes alii - welcome to the cat. Dicam tibi quomodo ad talem rationem venimus, quomodo laborat et quomodo eam renovare cogitamus.

Cras ut servitium: modularis ratio architecturae microservice

Praeterita consilia et consilia

Quomodo pervenimus ad hodiernam vigilantiam ratio? Ut huic quaestioni respondeat, MMXV ire debes. Hoc est quod vidi sicut tunc;

Cras ut servitium: modularis ratio architecturae microservice

Habuimus circiter 24 nodos qui vigilantiae auctores fuerunt. Tota turba diversorum est coronarum, scriptorum, daemonum, quae aliquo modo monitorem habent, nuntios mittere, et munera facere. Putavimus nos quo longius processimus, talis ratio minus viabilis esset. Nihil est quod elaborandum sit: nimis gravia sunt.
Eorum vigilantia elementa eligere decrevimus quae servabimus et explicabimus, et ea quae relinquemus. Ex illis erant 19. Tantum graphitae, aggregatores et Grafana sicut ashboardday manserunt. Sed quid simile vultus nova ratio? sic:

Cras ut servitium: modularis ratio architecturae microservice

Repositiones metricas habemus: hae graphitae sunt, quae in velocitate SSD agitatione fundabuntur, hae certae metrorum aggregatores sunt. Next - Grafana ad ashboardday et Moira pro erectione ostendens. Nos quoque rationem anomaliae quaerendae evolvere voluimus.

Standard: Cras 2.0

Haec consilia velut in 2015. Sed non solum infrastructuram ac ipsum servitium, sed etiam documenta pro eo praeparare debebamus. Elaboraverunt nobis signum corporatum, quod vigilantiam 2.0 appellamus. Quid requisita ratio?

  • assiduitas ;
  • metrics repono intervallum = 10 seconds;
  • metri et dashboards structa reposita;
  • SLA > 99,99%
  • collectio rei metricae per UDP (!).

Nobis opus est UDP quod magnum habemus commercii fluxum et eventuum metricos generantium. Si omnia in graphita statim scripseris, tabularium corruet. Nos quoque praefationes omnium metricarum primi gradus elegimus.

Cras ut servitium: modularis ratio architecturae microservice

Quaeque praepositiones aliquam proprietatem habent. Sunt metrica servientibus, reticulis, vasis, opibus, applicationibus, et sic porro. Patet, stricte, typus eliquatio peracta est, ubi primum gradum metricam accipimus et reliqua simpliciter omittam. Hoc est quomodo hanc systema MMXV cogitavimus. Quid in praesenti?

Praesens: diagram commercium vigilantia components

Primum monitores applicationes: nostrum PHP codicem, applicationes ac microservias - in summa, omnia quae nostri tincidunt scribunt. Omnes applicationes metrice per UDP ad Brubeck aggregatorem mittunt (statsd, in C rescriptum). Evenit ut quam celerrime in probat synthetica. Et emittit iam metrica aggregata ad Graphite per TCP.

Habet genus metri timers. Hoc percommodum est. Exempli gratia, pro unoquoque usuario nexum ad usum metricum cum responsione Brubeckium tempus mittis. Invenerunt decies centena millia responsa, sed aggregator tantum 10 metrice reddidit. Numerus hominum venientium habes, maximum, minimum et mediocris responsionis tempus, medianum et 4 percentilium. Tunc notitia Graphite transfertur et nos omnes vivere videmus.

Nos quoque aggregationem metricorum in hardware, programmatibus, systematis metricis et antiqua nostra systema Munin vigilantia (usque ad MMXV laboravit). Haec omnia per C daemonem CollectD colligimus (habet totum fasciculum diversorum plugins in eo constructum; potest tondere omnes vires systematis exercitus in quo instituitur, modo specificare in configuration ubi notitias scribendas) et scribe datam ad Graphite per eam. Etiam pythones plugins et concha scripta sustinet, ut solutiones consuetudinis tuae scribere possis: CollectD hanc notitiam colliget ab hospite locali vel remoto (si Curl) eamque Graphite mittet.

Tum omnia metrica mittimus quae ad Carbon-c-Nullam collegimus. Haec est solutio Carbon Nullam e Graphite in C. Haec est via quae colligit omnes metricos quos ab aggregatoribus nostris mittimus et ea ad nodos tendit. Scaena etiam in excitatione metri validitatem coercet. Primo, debent respondere schemati praepositioni, quam antea demonstravi, et secundo pro graphite valent. Aliter guttatim.

Nullam deinde carbon-c metri graphitam mittit ad botrum. Utimur Carbon-cache, rescriptum in Go, ut praecipuum pharmaci metrorum. Go-carbon, propter suam multiplicationem, longe exagitat Carbon-cache. Data accipit et scribit eam ad orbis utens sarcina susurri (vexillum, in python scriptum). Ut notitias nostras tabularum legeremus, Graphite API utimur. Multo velocius quam vexillum Graphite VUL. Quid deinde fit in notitia?

Adeunt Grafanam. Botris graphitis nostris utimur ut fons principalis notitiarum, plus Grafana habemus sicut interfaciem interfaciendi ad metricos et ashboardationes exhibendas. Pro singulis officiis, tincidunt ashboardday creare suum. Tunc graphas ex iis construunt, quas metricas scribunt ex applicationibus suis exhibentes. Praeter Grafana, nos etiam SLAM habemus. Python daemon hic est qui SLA computat in notitia e graphite subnixa. Ut iam dixi, plures habemus duodenas microservices, quarum unaquaeque suum requisita habet. SLAM utentes, documenta imus et cum illis quae in Graphite sunt comparamus et comparamus quam bene requisita pareant promptitudine servitiorum nostrorum.

Eamus longius: alerting. Ordinatur utens fortis ratio β€” Moira. Independens est, quia Graphite sub cucullo suum habet. Evolvitur a guys ex SKB "Kontur", in pythone et Ite scripta, fonte penitus aperto. Moira eundem accipit fluxum qui in graphitis exit. Si aliqua de causa repositionis tuae perit, adhuc opera tua erectio erit.

Moira in Kubernetes explicavimus, botrum Redis servientibus utitur ut datorum praecipuorum. Quo factum est, ratio culpae tolerantior. Rivum metri comparat cum numero triggerum: si nullae sunt in eo mentio, metrica defluit. Ita potest gigabytes metri per minutias concoquere.

Adiungimus etiam corporatum LDAP ei, cuius ope quilibet usor systematis corporati notificationes sibi creare potest exsistentibus (vel nuper creatis) triggers creare. Cum Moira Graphite contineat, omnes suas lineas sustinet. Tu igitur primam aciem ac eam in Grafanam transcribe. Vide quomodo graphs exhibeatur notitia. Et deinde eandem lineam accipias et eam in Moira transscribas. Cum limitibus suspendis et erectum in output accipias. Ad haec omnia non opus est scientia certa. Moira vigilare potest per SMS, email, Jira, Slack... Etiam exsecutionem scriptorum consuetudinum sustinet. Cum felis contigerit ei, et subscribatur consuetudini scripti vel binarii, currit eam et mittit JSON ad stdin pro hoc binario. Proinde programma tuum parse debet. Quod cum hoc facturus es, JSON ad te est. Si vis, mitte Telegram, si vis, opera aperi in Jira, fac quodcumque.

Utimur etiam nostra evolutione ad alerting - Imagotag. Tabulam, quae pro electronicis pretiis in tabernis electronicis adhiberi solet, ad necessitates nostras accommodavimus. Felis a moira ad nos eduximus. Indicat qualis status sint et quando evenerint. Nonnullae evolutionis latinae notificationes in remissa et electronicae in favorem huius tabulae relictae sunt.

Cras ut servitium: modularis ratio architecturae microservice

Bene, cum progressivus societas sumus, etiam Kubernetes in hoc systemate monitores sumus. Comprehendimus eam in systemate utendi Heapster, quod in botro instituimus, notitias colligit et ad Graphiten mittit. Quam ob rem schema sic apparet:

Cras ut servitium: modularis ratio architecturae microservice

Cras Components

Hic est index nexuum cum elementis ad hoc negotium adhibitum. Earum omnium fons aperta est.

Graphite:

Nullam carbon-c;

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

Colligitur:

collectd.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

statistics

Et hic sunt aliqui numeri quomodo ratio operatur in nobis.

Aggregator (Brubeck)

Numerus metricorum: ~300/sec
Intervallum metri ad Graphitum mittendum: 30 sec
Servo resource usus: ~ 6% CPU (loquimur de servientibus plenae armaturae); ~ 1Gb RAM; ~3 Mbps LAN

Graphite (go-carbon)

Numerus metricorum: ~ 1 / min
Metrics update interval: 30 sec
Schema repositionis metricae: 30sec 35d, 5min 90d, 10min 365d (dat tibi intellectum eorum quae ad servitium per longum tempus eveniunt)
Servo resource usus: ~10% CPU; ~ 20Gb RAM; ~30 Mbps LAN

flexibilitate

Nos apud Avito flexibilitatem in nostro vigilantia servitio vere aestimamus. Cur ita evenit? Uno modo, partes eius convertuntur; et ipsae partes et earum versiones. Secundo sustentationem. Cum totius consilii fons apertus sit, ipsum codicem recensere potes, mutationes fac, et functiones efficiendi quae extra cistam praesto non sunt. Vulgo admodum acervi adhibentur, maxime Go et Python, itaque hoc simpliciter fit.

Hic est exempli causa verae quaestionis. Fasciculus metricus in Graphite est. Nomen habet. Tabella nomen = nomen metricum. Modi adipisci est et est. Nomina fasciculi in Linux limitantur ad 255 ingenia. Et nos (ut "custariae internae") latinas e genere datorum habemus. Dicunt nobis: β€œVolumus SQL monitores nostros quaerere. Eae non sunt 255 characteres, sed 8 MB singulae. Eas in Grafana ostendere volumus, parametros huius petitionis videre, et etiam melius, summopere petitiones talium videre volumus. Magna sit tempor nisi. Vere refrigescant ut eos invigilet Β».

Cras ut servitium: modularis ratio architecturae microservice
Exemplum SQL quaesitum est ut exemplum e site postgrespro.ru

Redis ministratorem constituimus ac plugins Collectd nostris utimur, quae ad Postgres eunt et notitias omnes inde capiunt, metrice ad Graphite mittentes. Sed reponimus nomen metricum cum hastis. Simul nos eandem Nullam Redis ut clavem mittimus, et totam SQL interrogationem tamquam valorem. Omnes nobis faciendum est, fac ut Grafana ad Redis ire possit et haec informationes accipere. Graphite API aperimus quia... hoc est principale momentum ad commercium omnium componentium cum graphite vigilantia, et novum munus ingredimur, quod aliasByHash() vocatur - e Grafana nomen metricum obtinemus, eoque utimur in petitione Redis ut clavem, in responsio valorem clavis obtinemus, quae "SQL quaesitum" est nostrum Ita in Grafana ostentationem interrogationis SQL ostendimus, quae in theoria impossibile erat ut ibi ostenderet, una cum statisticis in eo (vocat, ordines, total_time, ...).

results

Dispositis. Nostri muneris vigilantia 24/7 praesto est ab omni applicatione et ullo codice. Si accessum ad facultates repositas habes, notitias ad servitium scribere potes. Lingua non est momenti, decisiones magni momenti sunt. Tantum scire debes quomodo nervum aperire, ibi metricam pone et nervum claudere.

Reliability. Omnia membra culpa-patientes sunt et onera nostra bene tractamus.

Humilis claustrum ad ingressum. Ut hac ratione utaris, non debes discere programmata linguarum et queries in Grafana. Aperi modo applicationem tuam, nervum in eam ingredere, quae metrice ad Graphite mittet, claude, Grafana aperi, illic ashboardas crea et mores metrici tui intuere, notificationes per Moira accipientes.

Libertatis. Haec omnia facere potes, sine auxilio fabrum DevOps. Et hoc est commodum, quia nunc consilium tuum monitor potes, aliquem petere non habes - opus incipere vel mutare.

Quid petimus?

Omnia infra recensita non solum cogitationes abstractae sunt, sed aliquid ad quod saltem primi gradus sumuntur.

  1. Anomalia detector. Munus creare volumus quod ad schedulas Graphitae nostras accedet et singulas metricas algorithmos varias utentes reprehendo. Iam sunt algorithmi quos videre volumus, notitia est, scimus quomodo cum ea laborare volumus.
  2. Metadata. Multa officia habemus, mutantur in tempore, sicut homines qui laborant cum illis. Constanter servans documenta manually optio non est. Quam ob rem metadata nunc in nostris microservis inserimur. Indicat qui evolvit, linguas inter se cohaeret, SLA requisita, ubi et quibus notificationes mittantur. Cum disponit ad servitium, omnis notitia entitatis independenter creatum est. Quam ob rem duos nexus nancisceris - unum ad triggers, alterum ad offendas in Grafana.
  3. Cras in nulla tellus. Credimus omnes tincidunt tali systema utendum esse. In hoc casu semper intellegis ubi negotiatio tua sit, quid illi acciderit, ubi ceciderit, ubi sunt vitia eius. Si exempli gratia aliquid venit et servitium tuum inruerit, tunc cognosces de eo non in vocatione procuratoris, sed ab ipso erecto, et statim potes aperire recentissimas trabes et vide quid ibi factum sit.
  4. Summus effectus. Intentio nostra constanter crescit, hodieque circiter 2 valores metricos per minutas discurrit. Ante annum haec figura erat 000. Et incrementum pergit, et hoc significat quod post aliquod tempus Graphite (susurri) incipiet graviter onerare disci subsystem. Ut iam dixi, haec magna ratio omnino universalis est propter permutabilitatem partium. Aliquis conservat et constanter dilatat infrastructuram suam specialiter pro Graphite, sed diverso itinere ire decrevimus: usus clickhouse in promptuario nostro metrice. Hic transitus propemodum completus est, et brevius explicabo quomodo hoc factum sit planius: quantae difficultates et quomodo superatae, quomodo migrationis processum, elementa quae ligat et eorum conformationes describam.

Gratias tibi ago pro attente! Interroga de re tua, conabor hic vel in sequentibus respondere postibus. Forsitan aliquis experientiam similem vigilantiae systematis vel mutandi ad Clickhouse in simili situ aedificandi - in commentis communica.

Source: www.habr.com