{"id":52115,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"Monitoraggio come servizio: sistema modulare per architetture a microservizi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Oggi nel nostro progetto, oltre al codice monolitico, funzionano dozzine di microservizi. Ognuno di essi richiede monitoraggio. Farlo con le sole forze degli ingegneri DevOps \u00e8 problematico. Abbiamo sviluppato un sistema di monitoraggio che funziona come servizio per gli sviluppatori. Possono scrivere metriche nel sistema di monitoraggio, utilizzarle, costruire dashboard e collegare avvisi che si attivano al raggiungimento di valori soglia. Gli ingegneri DevOps si occupano solo dell'infrastruttura e della documentazione. <\/p>\n<p>Questo post \u00e8 la trascrizione del mio intervento durante la nostra <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">sessione<\/a><\/noindex> a RIT++. Molti ci hanno chiesto di realizzare versioni testuali delle presentazioni. Se hai partecipato alla conferenza o hai visto il video, non troverai nulla di nuovo. A tutti gli altri, benvenuti sotto il cat. Racconter\u00f2 come siamo arrivati a questo sistema, come funziona e come prevediamo di aggiornarlo. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/000b8fdc8fb16aa76ce545ff2aa4e767.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Passato: schemi e piani <\/h3>\n<p>\nCome siamo arrivati al sistema di monitoraggio attuale? Per rispondere a questa domanda, dobbiamo tornare al 2015. Ecco com'era allora: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAvevamo circa 24 nodi dedicati al monitoraggio. Qui ci sono vari cron, script e demoni che monitorano qualcosa in qualche modo, inviano messaggi e svolgono funzioni. Abbiamo pensato che pi\u00f9 si andava avanti, meno questa sistema sarebbe stata sostenibile. Non ha senso svilupparla ulteriormente: troppo ingombrante. <br \/>\nAbbiamo deciso quali elementi di monitoraggio mantenere e sviluppare e quali abbandonare. Ne sono risultati 19. Sono rimasti solo i Graphite, gli aggregatori e Grafana come dashboard. Ma come apparir\u00e0 il nuovo sistema? Ecco come: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbbiamo un repository di metriche: sono i Graphite che si baseranno su veloci dischi SSD, insieme a specifici aggregatori per le metriche. Poi, Grafana per visualizzare le dashboard e Moira come sistema di allerta. Volevamo anche sviluppare un sistema per la rilevazione delle anomalie. <\/p>\n<h3>Standard: Monitoraggio 2.0<\/h3>\n<p>\nQuesti erano i piani nel 2015. Ma dovevamo preparare non solo l'infrastruttura e il servizio stesso, ma anche la documentazione per esso. Abbiamo sviluppato un standard aziendale che abbiamo chiamato monitoraggio 2.0. Quali erano i requisiti per il sistema? <\/p>\n<ul>\n<li>disponibilit\u00e0 continua; <\/li>\n<li>intervallo di conservazione delle metriche = 10 secondi; <\/li>\n<li>archiviazione strutturata delle metriche e dei dashboard; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>raccolta di metriche eventi tramite UDP (!). <\/li>\n<\/ul>\n<p>\nAbbiamo bisogno di UDP poich\u00e9 abbiamo un elevato flusso di traffico e eventi che generano metriche. Se scrivessimo tutte le metriche direttamente su Graphite, il sistema si rallenterebbe. Abbiamo anche scelto i prefissi di primo livello per tutte le metriche. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOgni prefisso rappresenta una specifica propriet\u00e0. Ci sono metriche per server, reti, container, risorse, applicazioni e cos\u00ec via. \u00c8 implementata una filtrazione chiara, rigorosa e tipizzata, dove accettiamo solo le metriche di primo livello e scartiamo le altre. \u00c8 cos\u00ec che abbiamo pianificato questo sistema nel 2015. E come siamo messi adesso? <\/p>\n<h3>Presente: schema di interazione dei componenti di monitoraggio<\/h3>\n<p>\nIn primo luogo monitoriamo le applicazioni: il nostro codice PHP, le applicazioni e i microservizi \u2014 in breve, tutto ci\u00f2 che sviluppano i nostri programmatori. Tutte le applicazioni inviano metriche all'aggregatore Brubeck (statsd, riscritto in C) tramite UDP. Si \u00e8 rivelato il pi\u00f9 veloce nei test sintetici. E invia gi\u00e0 le metriche aggregate a Graphite tramite TCP. <\/p>\n<p>Questo tipo di metriche include i timer. \u00c8 uno strumento molto utile. Ad esempio, per ogni connessione utente al servizio, inviate a Brubeck una metrica con il tempo di risposta. Se ricevete un milione di risposte, l'aggregatore emette solo 10 metriche. Avete il numero di visitatori, il tempo di risposta massimo, minimo, medio, la mediana e 4 percentile. Poi i dati vengono trasferiti in Graphite e possiamo vederli tutti in tempo reale. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e \u0436\u0435\u043b\u0435\u0437\u0443, \u0441\u043e\u0444\u0442\u0443, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Munin (\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0443 \u043d\u0430\u0441 \u0434\u043e 2015 \u0433\u043e\u0434\u0430). \u0412\u0441\u0435 \u044d\u0442\u043e \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 C&#8217;\u0438\u0448\u043d\u044b\u0439 \u0434\u0435\u043c\u043e\u043d CollectD (\u0432 \u043d\u0435\u0433\u043e \u0432\u0448\u0438\u0442\u0430 \u0446\u0435\u043b\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435) \u0438 \u043f\u0438\u0448\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Graphite. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b python \u0438 shell \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f: CollectD \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 (\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0435\u0441\u0442\u044c Curl) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 Graphite. <\/p>\n<p>Successivamente, tutte le metriche che abbiamo raccolto vengono inviate a Carbon-c-relay. Questa \u00e8 la soluzione Carbon Relay di Graphite, adattata in C. Si tratta di un router che raccoglie tutte le metriche inviate dai nostri aggregatori e le instrada verso i nodi. Durante la fase di instradamento, verifica anche la validit\u00e0 delle metriche. Devono, innanzitutto, corrispondere allo schema con i prefissi che ho mostrato in precedenza e, in secondo luogo, essere valide per Graphite. In caso contrario, vengono scartate. <\/p>\n<p>Successivamente, Carbon-c-relay invia le metriche al cluster di Graphite. Usiamo Carbon-cache come archivio principale per le metriche, riscritto in Go. Go-carbon, a causa della sua multithread, supera di gran lunga in prestazioni Carbon-cache. Accetta i dati e li scrive su disco utilizzando il pacchetto whisper (standard, scritto in Python). Per leggere i dati dai nostri archivi, utilizziamo l'API di Graphite. Questa \u00e8 molto pi\u00f9 veloce rispetto al Graphite WEB standard. Cosa succede ai dati dopo? <\/p>\n<p>I dati vengono visualizzati in Grafana. Utilizziamo i nostri cluster Graphite come principale fonte di dati, con Grafana come interfaccia web per visualizzare le metriche e costruire dashboard. Ogni sviluppatore crea una propria dashboard per ciascun servizio. Successivamente, costruiscono grafici che mostrano le metriche registrate dalle loro applicazioni. Oltre a Grafana, abbiamo anche SLAM, un demone Python che calcola il SLA in base ai dati di Graphite. Come ho gi\u00e0 detto, possediamo diverse decine di microservizi, ognuno con requisiti specifici. Con SLAM, verifichiamo i requisiti nella documentazione confrontandoli con quanto presente in Graphite, analizzando quanto siano conformi alla disponibilit\u00e0 dei nostri servizi. <\/p>\n<p>Passiamo ora all'alerting. \u00c8 organizzato tramite un potente sistema: Moira. \u00c8 indipendente perch\u00e9 utilizza un proprio Graphite. Sviluppato dai ragazzi di SKB \"Kontur\", scritto in Python e Go, \u00e8 completamente open source. Moira riceve lo stesso flusso di dati che viene inviato a Graphite. Se per qualche motivo il tuo storage smette di funzionare, l'alerting continuer\u00e0 a funzionare.<\/p>\n<p>Moira \u00e8 stata distribuita su Kubernetes, utilizzando un cluster di server Redis come database principale. Ne \u00e8 risultata un sistema resiliente. Confronta il flusso delle metriche con un elenco di attivatori: se non ci sono menzioni, scarta la metrica. Cos\u00ec, \u00e8 in grado di elaborare gigabyte di metriche al minuto. <\/p>\n<p>Inoltre, abbiamo integrato un LDAP aziendale, grazie al quale ogni utente del sistema aziendale pu\u00f2 creare notifiche per i trigger esistenti (o di nuova creazione). Poich\u00e9 Moira include Graphite, supporta tutte le sue funzionalit\u00e0. Quindi, per prima cosa, prendi una riga e copiala in Grafana. Controlla come i dati vengono visualizzati nei grafici. Poi prendi quella stessa riga e copiala in Moira. Imposta i limiti e ottieni gli avvisi in uscita. Per fare tutto ci\u00f2, non hai bisogno di alcuna conoscenza specifica. Moira pu\u00f2 inviare avvisi tramite SMS, email, in Jira, Slack\u2026 Supporta anche l'esecuzione di script personalizzati. Quando si verifica un trigger e Moira \u00e8 iscritta a uno script personalizzato o a un binario, lo esegue, passando il JSON a stdin di quel binario. Di conseguenza, il tuo programma deve analizzarlo. Cosa fare con questo JSON \u00e8 una tua decisione. Vuoi inviarlo su Telegram, vuoi aprire task in Jira, fai ci\u00f2 che preferisci. <\/p>\n<p>Per il monitoraggio utilizziamo anche un nostro sviluppo chiamato Imagotag. Abbiamo adattato il pannello solitamente utilizzato per i prezzi elettronici nei negozi alle nostre esigenze. Abbiamo integrato i trigger di Moira, dove \u00e8 indicato il loro stato e il momento in cui si sono verificati. Alcuni membri del team di sviluppo hanno rinunciato alle notifiche su Slack e via email in favore di questo pannello. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEssendo un'azienda progressista, abbiamo monitorato anche Kubernetes in questo sistema. Lo abbiamo integrato tramite Heapster, che abbiamo installato nel cluster; esso raccoglie i dati e li invia a Graphite. Alla fine, lo schema appare cos\u00ec: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Componenti di monitoraggio<\/h3>\n<p>Ecco un elenco dei link ai componenti che abbiamo utilizzato per questo compito. Sono tutti open source. <\/p>\n<h4>Graphite:<\/h4>\n<p><\/p>\n<ul>\n<li>go-carbon: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lomik\/go-carbon\">github.com\/lomik\/go-carbon<\/a><\/noindex><\/li>\n<li>whisper: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/graphite-project\/whisper\">github.com\/graphite-project\/whisper<\/a><\/noindex> <\/li>\n<li>graphite-api: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/brutasse\/graphite-api\">github.com\/brutasse\/graphite-api<\/a><\/noindex> <\/li>\n<\/ul>\n<h4>Carbon-c-relay: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grobian\/carbon-c-relay\">github.com\/grobian\/carbon-c-relay<\/a><\/noindex> <\/p>\n<h4>Brubeck: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">github.com\/github\/brubeck<\/a><\/noindex> <\/p>\n<h4>Collectd:<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/collectd.org\/\">collectd.org<\/a><\/noindex><\/p>\n<h4>Moira: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moira-alert\">github.com\/moira-alert<\/a><\/noindex> <\/p>\n<h4>Grafana: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">grafana.com<\/a><\/noindex> <\/p>\n<h4>Heapster: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/heapster\">github.com\/kubernetes\/heapster<\/a><\/noindex><\/p>\n<h3>Statistiche<\/h3>\n<p>\nEcco alcuni dati su come il sistema funziona da noi. <\/p>\n<h4>Aggregator (brubeck)<\/h4>\n<p>\nNumero di metriche: ~ 300.000 \/ sec<br \/>\nIntervallo di invio delle metriche a Graphite: 30 sec<br \/>\nUtilizzo delle risorse del server: ~ 6% CPU (riferito a server completi); ~ 1Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nNumero di metriche: ~ 1.600.000 \/ min<br \/>\nIntervallo di aggiornamento delle metriche: 30 sec<br \/>\nSchema di archiviazione delle metriche: 30sec 35d, 5min 90d, 10min 365d (fornisce comprensione di cosa succede al servizio nel lungo periodo) <br \/>\nUtilizzo delle risorse del server: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Flessibilit\u00e0<\/h3>\n<p>\nIn Avito, valorizziamo molto la flessibilit\u00e0 del nostro servizio di monitoraggio. Perch\u00e9 \u00e8, appunto, cos\u00ec? In primo luogo, le sue componenti sono intercambiabili: sia i componenti stessi che le loro versioni. In secondo luogo, la manutenibilit\u00e0. Poich\u00e9 l'intero progetto si basa su software open source, potete modificare il codice, apportare cambiamenti e implementare funzionalit\u00e0 non disponibili di default. Vengono utilizzati stack abbastanza comuni, principalmente Go e Python, quindi \u00e8 relativamente semplice farlo. <\/p>\n<p>Ecco un esempio di un problema reale. Una metrica in Graphite \u00e8 un file. Ha un nome. Il nome del file \u00e8 uguale al nome della metrica. E c'\u00e8 un percorso per arrivarci. I nomi dei file in Linux sono limitati a 255 caratteri. Ma noi abbiamo (come \"clienti interni\") ragazzi del dipartimento database. Loro ci dicono: \"Vogliamo monitorare le nostre query SQL. E queste non sono 255 caratteri, ma 8 MB ciascuna. Vogliamo visualizzarle in Grafana, vedere i parametri di questa query, e sarebbe ancora meglio vedere le query pi\u00f9 frequenti. Sarebbe fantastico se potessero essere visualizzate in tempo reale. E sarebbe davvero straordinario poterle inserire negli allerta.\" <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio come servizio: sistema modulare per architetture a microservizi\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Esempio di query SQL preso come esempio da <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">sito postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>\u041c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 Redis \u0438 \u043d\u0430\u0448\u0438\u043c\u0438 Collectd-\u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0434\u044f\u0442 \u0432 Postgres \u0438 \u0431\u0435\u0440\u0443\u0442 \u043e\u0442\u0442\u0443\u0434\u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 Graphite. \u041d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u043c\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430 \u0445\u044d\u0448\u0438. \u042d\u0442\u043e\u0442 \u0436\u0435 \u0445\u044d\u0448 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 Redis \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430, \u0438 \u0432\u0435\u0441\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b Grafana \u0443\u043c\u0435\u043b\u0430 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 Redis \u0438 \u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041c\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c Graphite API, \u0442.\u043a. \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441 \u0433\u0440\u0430\u0444\u0438\u0442\u043e\u043c, \u0438 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f aliasByHash() \u2014 \u043e\u0442 Grafana \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a Redis \u043a\u0430\u043a \u043a\u043b\u044e\u0447, \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0448 \u201cSQL \u0437\u0430\u043f\u0440\u043e\u0441\u201d. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0432\u044b\u0432\u0435\u043b\u0438 \u0432 Grafana \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0438\u0434\u0435\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u0430\u043c \u0431\u044b\u043b\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043f\u043e \u043d\u0435\u043c\u0443 (calls, rows, total_time, &#8230;). <\/p>\n<h3>Risultati <\/h3>\n<p>\n<b>Accessibilit\u00e0.<\/b> Il nostro servizio di monitoraggio \u00e8 disponibile 24 ore su 24, 7 giorni su 7 da qualsiasi applicazione e qualsiasi codice. Se hai accesso ai repository, puoi inviare dati al servizio. Il linguaggio non \u00e8 importante, le soluzioni non contano. Devi solo sapere come aprire un socket, inviare una metrica e chiudere il socket. <\/p>\n<p><b>Affidabilit\u00e0.<\/b> Tutti i componenti sono ridondanti e gestiscono bene i nostri carichi. <\/p>\n<p><b>Basso rischio di ingresso.<\/b> Per utilizzare questo sistema, non \u00e8 necessario studiare linguaggi di programmazione e query in Grafana. Basta aprire la propria applicazione, inserire il socket che invier\u00e0 le metriche a Graphite, chiuderla, aprire Grafana, creare i dashboard e osservare il comportamento delle metriche, ricevendo notifiche tramite Moira.<\/p>\n<p><b>Autonomia.<\/b> Tutto questo pu\u00f2 essere fatto autonomamente, senza l'aiuto di ingegneri DevOps. \u00c8 un sovraccarico, perch\u00e9 puoi monitorare il tuo progetto in questo momento, senza chiedere a nessuno - n\u00e9 per iniziare il lavoro, n\u00e9 per apportare modifiche. <\/p>\n<h3>A cosa aspiriamo? <\/h3>\n<p>\nTutto ci\u00f2 che segue non sono solo pensieri astratti, ma ci\u00f2 a cui sono stati fatti almeno i primi passi. <\/p>\n<ol>\n<li>Rilevatore di anomalie. Vogliamo implementare un servizio che visiter\u00e0 i nostri archivi Graphite e controller\u00e0 ogni metrica con vari algoritmi. Abbiamo gi\u00e0 algoritmi che vogliamo esaminare, ci sono dati, sappiamo come lavorare con essi.\n<\/li>\n<li>Metadati. Abbiamo molti servizi che cambiano nel tempo, proprio come le persone che vi lavorano. Tenere la documentazione aggiornata manualmente non \u00e8 un'opzione. Per questo motivo, ora i nostri microservizi integrano i metadati. Qui sono indicati chi lo ha sviluppato, i linguaggi con cui interagisce, i requisiti SLA e dove e a chi inviare le notifiche. Durante il deploy del servizio, tutti i dati delle entit\u00e0 vengono creati automaticamente. In questo modo, riceverete due link: uno per i trigger e l'altro per i dashboard in Grafana.\n<\/li>\n<li>Monitoraggio in ogni casa. Crediamo che un sistema simile dovrebbe essere utilizzato da tutti gli sviluppatori. In questo modo, avete sempre chiaro dove si trova il vostro traffico, cosa gli succede, dove cade e dove ha punti deboli. Se, ad esempio, qualcosa arriva e manda in crash il vostro servizio, lo scoprirete non durante una telefonata dal manager, ma da un avviso, e potrete subito aprire i log recenti e controllare cosa \u00e8 successo.\n<\/li>\n<li>Elevata prestazione. Il nostro progetto \u00e8 in continua crescita e oggi elabora circa 2.000.000 valori metrici al minuto. Un anno fa questo numero era di 500.000. La crescita continua, e ci\u00f2 significa che, a un certo punto, Graphite (whisper) inizier\u00e0 a sovraccaricare pesantemente il sistema di archiviazione. Come gi\u00e0 accennato, questo sistema di monitoraggio \u00e8 abbastanza versatile grazie all'intercambiabilit\u00e0 dei componenti. Alcuni gestiscono e ampliano costantemente la propria infrastruttura specificamente per Graphite, mentre noi abbiamo deciso di seguire un'altra strada: utilizzare <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> come archivio per le nostre metriche. Questo passaggio \u00e8 praticamente completato e presto racconter\u00f2 nel dettaglio come \u00e8 stato realizzato: quali difficolt\u00e0 abbiamo incontrato e come le abbiamo superate, come \u00e8 avvenuto il processo di migrazione, descriver\u00f2 i componenti scelti come raccordo e le loro configurazioni. \n<\/li>\n<\/ol>\n<p>\nGrazie per l'attenzione! Fate le vostre domande sull'argomento, cercher\u00f2 di rispondere qui o nei prossimi post. Potrebbe esserci qualcuno con esperienza nella costruzione di un sistema di monitoraggio simile o nel passaggio a Clickhouse in situazioni analoghe \u2014 condividete le vostre esperienze nei commenti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/335410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52115","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monitoraggio come servizio: sistema modulare per architetture a microservizi | ProHoster","description":"Oggi nel nostro progetto, oltre al codice monolitico, funzionano decine di microservizi. Ognuno di essi richiede un monitoraggio costante. Gestire questa mole di lavoro con soli ingegneri DevOps \u00e8 complicato. Abbiamo sviluppato un sistema di monitoraggio che funziona come servizio per gli sviluppatori. Possono scrivere metriche autonomamente nel sistema di monitoraggio, utilizzarle, creare dashboard basate su di esse e aggiungere avvisi.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b,","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/52115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}