{"id":56075,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/osnovy-monitoringa-postgresql-aleksej-lesovskij"},"modified":"2020-02-18T14:04:16","modified_gmt":"2020-02-18T11:04:16","slug":"osnovy-monitoringa-postgresql-aleksej-lesovskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","title":{"rendered":"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot;<\/strong><\/p>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433 Postgres&#8217;\u0430.<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Hbi2AFhd4nY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Hbi2AFhd4nY\/hqdefault.jpg\" alt=\"Riproduci video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/07b4739a84eb36c84e0c663c5d721435.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi chiamo Alexey Lesovskiy e rappresento l'azienda Data Egret. <\/p>\n<p><\/p>\n<p>Un po' di parole su di me. Ho iniziato tanto tempo fa come amministratore di sistema. <\/p>\n<p><\/p>\n<p>Ho gestito vari sistemi Linux, occupandomi di diverse attivit\u00e0 legate a Linux, come virtualizzazione, monitoraggio, lavoro con proxy, ecc. Ma a un certo punto ho iniziato a concentrarmi di pi\u00f9 sui database, in particolare su PostgreSQL, che mi \u00e8 sempre piaciuto. Cos\u00ec, col tempo, sono diventato un DBA di PostgreSQL.<\/p>\n<p><\/p>\n<p>Nel corso della mia carriera, sono sempre stato interessato a temi come la statistica, il monitoraggio e la raccolta di telemetria. Quando ero amministratore di sistema, ho lavorato intensamente con Zabbix e ho scritto un piccolo insieme di script come <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/zabbix-extensions\">zabbix-extensions<\/a><\/noindex>. Era piuttosto popolare nel suo periodo. Con esso, era possibile monitorare molte cose importanti, non solo Linux, ma anche diversi altri componenti.<\/p>\n<p><\/p>\n<p>Attualmente mi occupo di PostgreSQL. Sto sviluppando un altro strumento che permette di lavorare con le statistiche di PostgreSQL. Si chiama <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> (articolo su Habr\u00e9 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/425083\/\">Statistiche PostgreSQL senza stress e complicazioni<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/10f619998e38e7dce6c2b042565c6aee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una breve introduzione. Quali situazioni possono presentarsi per i nostri clienti? Si verifica un malfunzionamento relativo al database. E quando il database \u00e8 stato ripristinato, il capo del dipartimento o il project manager dice: \u00abAmici, dovremmo monitorare il database, perch\u00e9 \u00e8 successo qualcosa di brutto e dobbiamo evitare che accada di nuovo in futuro\u00bb. Qui inizia un interessante processo di scelta del sistema di monitoraggio o di adattamento del sistema di monitoraggio esistente per monitorare il proprio database \u2013 PostgreSQL, MySQL o altri. E i colleghi iniziano a suggerire: \u00abHo sentito dire che esiste un certo database. Utilizziamolo\u00bb. I colleghi iniziano a discutere tra loro. Alla fine, scegliamo un database, ma il monitoraggio di PostgreSQL \u00e8 rappresentato in modo piuttosto scarso e dobbiamo sempre fare qualche aggiustamento. Prendiamo alcune repository da GitHub, le cloniamo, adattiamo gli script e facciamo delle impostazioni. Alla fine, questo si traduce in un certo lavoro manuale. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/6a36a566c8c9e155d7b99e2adaf9e70c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In questo documento cercher\u00f2 di fornirvi alcune informazioni su come scegliere il monitoraggio non solo per PostgreSQL, ma anche per i database in generale. Voglio darvi le conoscenze necessarie per affinare il vostro monitoraggio, in modo da ottenere un reale beneficio, consentendovi di monitorare il vostro database in maniera utile e di avvisarvi in tempo di eventuali situazioni critiche che potrebbero presentarsi. <\/p>\n<p><\/p>\n<p>Le idee che presenter\u00f2 in questo documento possono essere adattate direttamente a qualsiasi database, sia esso un DBMS tradizionale o un noSQL. Pertanto, ci sar\u00e0 molto pi\u00f9 di PostgreSQL, con molte ricette su come implementare queste idee in PostgreSQL. Vi fornir\u00f2 esempi di query, esempi di entit\u00e0 che esistono in PostgreSQL per il monitoraggio. E se il vostro DBMS ha elementi simili che possono essere integrati nel monitoraggio, anche voi potrete adattarli e aggiungerli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/412766f755018e76ac04c0e399361f4d.jpg\" style=\"display:block;margin: 0 auto;\" \/>Nel documento non tratter\u00f2<br \/>\ncome raccogliere e memorizzare le metriche. Non parler\u00f2 della post-elaborazione dei dati e della loro presentazione all'utente. E non dir\u00f2 nulla sugli avvisi.<br \/>\nDurante la narrazione, mostrer\u00f2 vari screenshot di monitoraggi esistenti e li criticher\u00f2. Tuttavia, cercher\u00f2 di non nominare i marchi, in modo da non promuovere o denigrare quei prodotti. Pertanto, tutte le somiglianze sono casuali e rimangono nella vostra immaginazione.<br \/>\n<img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/e1c6ba71914b5c133f37a76484768d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIniziamo a capire cosa sia il monitoraggio. Il monitoraggio \u00e8 una cosa molto importante da avere. Tutti lo comprendono. Tuttavia, allo stesso tempo, il monitoraggio non \u00e8 un prodotto di business e non influisce direttamente sul profitto dell'azienda, perci\u00f2 viene sempre considerato come una priorit\u00e0 secondaria. Se abbiamo tempo, ci dedichiamo al monitoraggio, se non abbiamo tempo, va bene, lo mettiamo in backlog e un giorno torneremo su queste attivit\u00e0. <\/p>\n<p><\/p>\n<p>Pertanto, dalla nostra esperienza, quando ci rechiamo dai clienti, il monitoraggio \u00e8 spesso carente e non presenta elementi interessanti che ci aiuterebbero a lavorare meglio con il database. Per questo motivo, il monitoraggio deve sempre essere perfezionato. <\/p>\n<p><\/p>\n<p>I database sono sistemi complessi che richiedono monitoraggio, poich\u00e9 rappresentano un deposito di informazioni. Queste informazioni sono essenziali per un'azienda e non devono essere mai perse. Al tempo stesso, i database sono pezzi di software molto sofisticati, composti da numerosi componenti, molti dei quali necessitano di essere monitorati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/d2293a3d5089c320aa94471039a6023f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Se parliamo specificamente di PostgreSQL, possiamo rappresentarlo come uno schema composto da tanti componenti che interagiscono tra loro. Allo stesso tempo, in PostgreSQL esiste una sottosistema chiamata Stats Collector, che consente di raccogliere statistiche sul funzionamento di questi sottosistemi e fornisce un'interfaccia all'amministratore o all'utente per visualizzare queste statistiche. <\/p>\n<p><\/p>\n<p>Queste statistiche vengono presentate tramite un insieme di funzioni e viste (view), che possono essere considerate come tabelle. Pertanto, utilizzando un normale client psql, puoi collegarti al database, eseguire select su queste funzioni e viste e ottenere numeri specifici riguardanti il funzionamento dei sottosistemi di PostgreSQL. <\/p>\n<p><\/p>\n<p>Puoi aggiungere questi numeri al tuo sistema di monitoraggio preferito, tracciare grafici, aggiungere funzioni e ottenere analisi a lungo termine. <\/p>\n<p><\/p>\n<p>Tuttavia, in questa relazione non tratter\u00f2 tutte queste funzioni, poich\u00e9 ci\u00f2 potrebbe richiedere un'intera giornata. Mi concentrer\u00f2 su due, tre o quattro cose specifiche e spiegher\u00f2 come possono migliorare il monitoraggio.<br \/>\n<img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/13e1b9dc97deeb164576818eb6be17fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nE parlando del monitoraggio del database, cosa bisogna monitorare? Innanzitutto, \u00e8 fondamentale monitorare la disponibilit\u00e0, poich\u00e9 il database \u00e8 un servizio che fornisce accesso ai dati ai clienti, e dobbiamo assicurarti che la disponibilit\u00e0 venga mantenuta, insieme ad alcune sue caratteristiche qualitative e quantitative. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/eb54f240bfaf74a356cf87e66ed9f83b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inoltre, \u00e8 importante monitorare i clienti che si connettono al nostro database, poich\u00e9 possono essere sia clienti normali che clienti dannosi in grado di compromettere il database. Anche la loro attivit\u00e0 deve essere monitorata e tracciata.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/4ef57fc16b0b0974f5d66568534fad96.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quando i clienti si connettono al database, \u00e8 evidente che iniziano a lavorare con i nostri dati. Pertanto, dobbiamo monitorare anche come i clienti interagiscono con i dati: quali tabelle utilizzano e, in misura minore, quali indici. In altre parole, dobbiamo valutare il carico di lavoro (workload) generato dai nostri clienti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/ef7ee6e5c3b66bb14adc3d8b0c34f4f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma anche il workload \u00e8 composto, ovviamente, da richieste. Le applicazioni si connettono al database e accedono ai dati tramite richieste, quindi \u00e8 importante valutare quali richieste abbiamo nel database, monitorarne l'adeguatezza, assicurandoci che non siano scritte in modo errato, e che alcune opzioni necessitino di essere riscritte per garantire una maggiore velocit\u00e0 e prestazioni migliori. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/cf74205ff688659cae41e4b0cbc4525d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E poich\u00e9 parliamo di database, un database \u00e8 sempre costituito da processi in background. I processi in background consentono di mantenere le prestazioni del database a un buon livello, quindi per funzionare richiedono una certa quantit\u00e0 di risorse. Allo stesso tempo, possono sovrapporsi alle risorse delle richieste dei clienti, quindi un'operazione troppo intensiva dei processi in background pu\u00f2 influenzare direttamente le prestazioni delle richieste dei clienti. Pertanto, \u00e8 necessario monitorarli e verificare che non ci siano squilibri riguardo ai processi in background. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/50f44ab160e889882210529fa9b7fc57.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E tutto ci\u00f2 in termini di monitoraggio del database rimane nelle metriche di sistema. Ma considerando che gran parte della nostra infrastruttura si sposta nel cloud, le metriche di sistema di un host individuale passano sempre in secondo piano. Tuttavia, nei database rimangono comunque rilevanti, e il monitoraggio delle metriche di sistema \u00e8 certamente necessario. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/71d119b3ef5d5b9eee5510a43ef0e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con le metriche di sistema, in generale, tutto \u00e8 abbastanza a posto; tutti i moderni sistemi di monitoraggio gi\u00e0 supportano queste metriche, ma ci sono comunque alcune componenti che mancano e che devono essere aggiunte. Ne parler\u00f2 anche, ci saranno alcuni slide su di esse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/e38d506da3a168913952a4015ba06e3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIl primo punto del piano \u00e8 la disponibilit\u00e0. Cosa significa disponibilit\u00e0? Nel mio concetto, la disponibilit\u00e0 \u00e8 la capacit\u00e0 di un database di gestire le connessioni, ovvero il database \u00e8 attivo e accetta connessioni dai clienti come un servizio. Questa disponibilit\u00e0 pu\u00f2 essere valutata tramite alcune caratteristiche. \u00c8 molto utile visualizzare queste caratteristiche nei dashboard. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/befa103d55797b6ec9884541ca70c05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTutti sanno cosa sono i dashboard. \u00c8 quando dai un'occhiata a uno schermo su cui \u00e8 sintetizzata l'informazione necessaria. E puoi subito capire se c'\u00e8 un problema nel database o meno.<br \/>\nPertanto, la disponibilit\u00e0 del database e altre caratteristiche chiave devono sempre essere visualizzate nei dashboard, affinch\u00e9 queste informazioni siano a portata di mano, sempre disponibili per te. Ulteriori dettagli, che aiutano nelle indagini sugli incidenti e sulle situazioni di emergenza, devono essere inseriti in dashboard secondari o nascosti in link drilldown che portano a sistemi di monitoraggio esterni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/6c595fdff1d0626b61bc76ad06299fb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esempio di un noto sistema di monitoraggio. Si tratta di un sistema di monitoraggio davvero interessante. Raccoglie un'enorme quantit\u00e0 di dati, ma dal mio punto di vista, ha una concezione strana dei cruscotti. C'\u00e8 un link per \"creare un cruscotto\". Ma quando crei un cruscotto, stai creando un elenco, composto da due colonne, un elenco di grafici. E quando devi controllare qualcosa, inizi a cliccare con il mouse, a scorrere, a cercare il grafico desiderato. E questo richiede tempo, cio\u00e8, non ci sono cruscotti veri e propri. Ci sono solo elenchi di grafici.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/0a82729df59b2e09741bd290e3fb4f29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa bisogna aggiungere a questi cruscotti? Puoi iniziare con una caratteristica come il tempo di risposta. In PostgreSQL c'\u00e8 la vista pg_stat_statements. Di default \u00e8 disabilitata, ma \u00e8 una delle viste sistemiche pi\u00f9 importanti che deve sempre essere attivata e utilizzata. Contiene informazioni su tutte le query eseguite che sono state effettuate nel database. <\/p>\n<p><\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439. \u041d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u043e \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u0435. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u2013 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u043d\u043e\u0435. \u0418 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0446\u0435\u043d\u0442\u0438\u043b\u0438, \u0432 PostgreSQL \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u0418 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0446\u0438\u0444\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u043f\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u0442. \u0435. \u043c\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 &#8216;select 1&#8217;\u00a0\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430, \u0430 \u043c\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439, \u043b\u0438\u0431\u043e \u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e \u043d\u0435\u0439 \u0433\u0440\u0430\u0444\u0438\u043a. <\/p>\n<p><\/p>\n<p>\u00c8 altrettanto importante tenere traccia del numero di errori attualmente generati dal sistema. Per fare ci\u00f2, possiamo utilizzare la vista pg_stat_database. Ci concentriamo sul campo xact_rollback. Questo campo non solo mostra il numero di rollback che si verificano nel database, ma tiene anche conto del numero di errori. In altre parole, possiamo visualizzare questo dato nel nostro dashboard e monitorare quanti errori abbiamo attualmente. Se ci sono molti errori, \u00e8 un buon motivo per dare un'occhiata ai log e vedere quali sono questi errori e perch\u00e9 si verificano, e poi indagare e risolverli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/3ee7809fd203c03596633479f34dba12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c8 possibile aggiungere un elemento come il Tachimetro. Questo misura il numero di transazioni al secondo e il numero di richieste al secondo. In altre parole, puoi utilizzare questi numeri come indicatore delle prestazioni attuali del tuo database e osservare se ci sono picchi nelle richieste, picchi nelle transazioni o, al contrario, se il database \u00e8 sottoutilizzato a causa di qualche malfunzionamento nel backend. \u00c8 importante monitorare sempre questo valore e tenere a mente che per il nostro progetto, questa \u00e8 considerata una prestazione normale, mentre valori superiori o inferiori sono problematici e non chiari, il che implica la necessit\u00e0 di indagare il motivo di tali numeri.<\/p>\n<p><\/p>\n<p>Per valutare il numero di transazioni, possiamo nuovamente fare riferimento alla vista pg_stat_database. Possiamo sommare il numero di commit e il numero di rollback per ottenere il numero di transazioni al secondo. <\/p>\n<p><\/p>\n<p>Tutti capiscono che in una transazione possono rientrare pi\u00f9 richieste, vero? Quindi TPS e QPS sono leggermente diversi. <\/p>\n<p><\/p>\n<p>Il numero di richieste al secondo pu\u00f2 essere ottenuto tramite pg_stat_statements e semplicemente calcolando la somma di tutte le richieste eseguite. \u00c8 chiaro che confrontiamo il valore attuale con quello precedente, sottraiamo e otteniamo la variazione, arrivando cos\u00ec al numero.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/d2e521bf6360aa5a34f3042281f9f902.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c8 possibile aggiungere ulteriori metriche a piacere, che aiutano anche a valutare la disponibilit\u00e0 del nostro database e a monitorare eventuali downtime. <\/p>\n<p><\/p>\n<p>Una di queste metriche \u00e8 l'uptime. Ma l'uptime in PostgreSQL \u00e8 una questione un po' complicata. Ecco perch\u00e9. Quando PostgreSQL viene avviato, inizia a registrare l'uptime. Ma se in un certo momento, ad esempio, di notte viene eseguita un'operazione e l'OOM-killer termina forzatamente un processo figlio di PostgreSQL, in questo caso PostgreSQL chiude tutte le connessioni dei client, svuota la zona di memoria shardata e inizia il ripristino dall'ultimo checkpoint. E mentre dura questo ripristino dal checkpoint, il database non accetta connessioni, il che significa che questa situazione pu\u00f2 essere considerata un downtime. Tuttavia, il contatore dell'uptime non si azzera, poich\u00e9 tiene conto del tempo di avvio del postmaster fin dal primo momento. Pertanto, situazioni di questo tipo possono passare inosservate.<\/p>\n<p><\/p>\n<p>\u00c8 importante monitorare il numero di worker del vacuum. Tutti sanno cos'\u00e8 l'autovacuum in PostgreSQL? \u00c8 un sistema secondario interessante in PostgreSQL. Sono stati scritti molti articoli su di essa, con molte presentazioni fatte. Ci sono stata molte discussioni sul vacuum e su come dovrebbe funzionare. Molti lo considerano un male necessario. Ma \u00e8 cos\u00ec. \u00c8 una sorta di equivalente di un garbage collector, che pulisce le versioni obsolete delle righe che non sono pi\u00f9 necessarie per nessuna delle transazioni e liberano spazio nelle tabelle e negli indici per nuove righe. <\/p>\n<p><\/p>\n<p>Perch\u00e9 \u00e8 necessario monitorarlo? Perch\u00e9 il vacuum a volte pu\u00f2 causare problemi seri. Consuma molte risorse, e le richieste dei clienti iniziano a soffrirne. <\/p>\n<p><\/p>\n<p>Bisogna monitorarlo tramite la vista pg_stat_activity, di cui parler\u00f2 nel prossimo capitolo. Questa vista mostra l'attivit\u00e0 corrente nel database. Attraverso quest'attivit\u00e0 possiamo tracciare il numero di vacuums che stanno lavorando in questo momento. Possiamo tenere traccia dei vacuum e vedere che, se superiamo il limite, \u00e8 un motivo per dare un'occhiata alle impostazioni di PostgreSQL e ottimizzare il funzionamento del vacuum. <\/p>\n<p><\/p>\n<p><strong>Un'altra caratteristica di PostgreSQL \u00e8 che soffre molto per le transazioni lunghe. In particolare, per le transazioni che rimangono in attesa senza eseguire alcuna operazione. Queste vengono chiamate stat idle-in-transaction. Una transazione di questo tipo trattiene i lock e interferisce con il funzionamento del vacuum. Di conseguenza, le tabelle crescono e aumentano di dimensione. Le query che lavorano su queste tabelle iniziano a rallentare perch\u00e9 bisogna scavare tutte le vecchie versioni delle righe dalla memoria al disco e viceversa.<\/strong> Pertanto, \u00e8 importante monitorare il tempo e la durata delle transazioni pi\u00f9 lunghe e delle query pi\u00f9 lunghe del vacuum. <strong>Se osserviamo processi che stanno funzionando da molto tempo, gi\u00e0 oltre 10-20-30 minuti per carichi OLTP, \u00e8 necessario prestare attenzione e forzarne la chiusura, oppure ottimizzare l'applicazione affinch\u00e9 non vengano attivate e non rimangano in attesa per cos\u00ec tanto tempo.<\/strong> Per i carichi analitici, 10-20-30 minuti sono normali; ci possono essere anche tempi pi\u00f9 lunghi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/736035b2ee6106b571ad6f84f2902d41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPassiamo ora a una situazione con i clienti connessi. Una volta creato il dashboard e visualizzate le metriche chiave di disponibilit\u00e0, possiamo anche aggiungere ulteriori informazioni sui clienti connessi. <\/p>\n<p><\/p>\n<p>Le informazioni sui clienti connessi sono importanti, perch\u00e9, dal punto di vista di PostgreSQL, i clienti possono essere diversi. Ci sono clienti buoni e clienti cattivi. <\/p>\n<p><\/p>\n<p>Un esempio semplice. Con cliente intendo un'applicazione. L'applicazione si \u00e8 connessa al database e inizia subito a inviare le sue richieste; il database le elabora e esegue, restituendo i risultati al cliente. Questi sono clienti buoni e corretti. <\/p>\n<p><\/p>\n<p>Ci sono situazioni in cui il cliente si \u00e8 connesso, mantiene la connessione, ma nel frattempo non fa nulla. Si trova in uno stato di inattivit\u00e0. <\/p>\n<p><\/p>\n<p>Ma ci sono clienti problematici. Ad esempio, un cliente si connette, apre una transazione, fa qualcosa nel database e poi passa al codice, magari per accedere a una fonte esterna o per elaborare i dati ricevuti. Tuttavia, non chiude la transazione. Cos\u00ec, la transazione rimane aperta nel database, bloccando la riga. Questa \u00e8 una situazione negativa. Se l'applicazione, per qualche motivo, si interrompe a causa di un'eccezione, la transazione potrebbe rimanere aperta per molto tempo. Questo influisce direttamente sulle prestazioni di PostgreSQL, rallentando il suo funzionamento. \u00c8 quindi fondamentale monitorare questi clienti e terminare forzatamente la loro sessione quando necessario. \u00c8 essenziale ottimizzare la propria applicazione per evitare tali situazioni. <\/p>\n<p><\/p>\n<p>Altri cattivi clienti sono quelli in attesa. Ma diventano cattivi a causa delle circostanze. Ad esempio, una semplice transazione in attesa: pu\u00f2 aprire una transazione, prendere blocchi su alcune righe e poi cadere da qualche parte nel codice, lasciando una transazione appesa. Arriver\u00e0 un altro cliente, richieder\u00e0 gli stessi dati, ma si imbatter\u00e0 in un blocco perch\u00e9 quella transazione appesa ha gi\u00e0 bloccato alcune righe necessarie. E la seconda transazione rimarr\u00e0 in attesa che la prima si concluda o venga forzatamente chiusa dall'amministratore. Cos\u00ec le transazioni in attesa possono accumularsi e riempire il limite di connessioni al database. Quando il limite \u00e8 superato, l'applicazione non pu\u00f2 pi\u00f9 lavorare con il database. Questa \u00e8 una situazione di emergenza per il progetto. Pertanto, \u00e8 necessario monitorare i cattivi clienti e reagire tempestivamente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/41eaa8fcb747bf5ca4e0d6d264d1e0ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un altro esempio di monitoraggio. E qui c'\u00e8 gi\u00e0 un bel dashboard. Ci sono informazioni sulle connessioni in alto. Connessioni DB \u2013 8 unit\u00e0. Ecco tutto. Non abbiamo informazioni sui clienti attivi, n\u00e9 su quelli che sono semplicemente inattivi, senza fare nulla. Non ci sono informazioni sulle transazioni in sospeso e sulle connessioni in attesa, quindi \u00e8 un dato che mostra solo il numero di connessioni e nulla pi\u00f9. Poi indovinate voi.<br \/>\n<img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/553a4b6432c308c0023e49c4a35aa0a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPer aggiungere queste informazioni al monitoraggio, \u00e8 necessario fare riferimento alla vista pg_stat_activity. Se trascorri molto tempo in PostgreSQL, questa \u00e8 una vista molto utile che dovrebbe diventare la tua alleata, poich\u00e9 mostra l'attivit\u00e0 attuale in PostgreSQL, ossia cosa sta succedendo. Ogni processo ha una propria riga che visualizza informazioni su di esso: da quale host \u00e8 stata effettuata la connessione, quale utente ha effettuato l'accesso, con quale nome, quando \u00e8 stata avviata la transazione, quale query sta attualmente eseguendo, e quale query \u00e8 stata eseguita per ultima. Di conseguenza, possiamo valutare lo stato del client in base al campo stat. Possiamo, in un certo senso, raggruppare in base a questo campo e ottenere le statistiche attualmente presenti nel database e il numero di connessioni associate a queste statistiche. I numeri ottenuti possono quindi essere inviati al nostro monitoraggio e utilizzati per generare grafici.<br \/>\n\u00c8 anche importante valutare la durata delle transazioni. Ho gi\u00e0 accennato all'importanza di considerare la durata delle interruzioni, ma lo stesso vale per le transazioni. Ci sono i campi xact_start e query_start. Questi, per cos\u00ec dire, mostrano il momento di inizio della transazione e il momento di inizio della query. Usando la funzione now(), che mostra il timestamp corrente, sottraiamo il timestamp della transazione e della query. Cos\u00ec otteniamo la durata della transazione e la durata della query. <\/p>\n<p><\/p>\n<p>Se vediamo transazioni lunghe, dovremmo gi\u00e0 completarle. <strong>Per carichi OLTP, le transazioni lunghe sono quelle che superano 1-2-3 minuti.<\/strong>. <strong>Per carichi OLAP, le transazioni lunghe sono normali, ma se superano le due ore, questo \u00e8 anche un segnale che da qualche parte abbiamo uno sbilanciamento.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/1f3caea3077c0c5c2bcf60ee2f1be884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nQuando i clienti si connettono al database, iniziano a lavorare con i nostri dati. Accedono alle tabelle e agli indici per ottenere dati dalla tabella. \u00c8 importante valutare come i clienti interagiscono con questi dati.<\/p>\n<p><\/p>\n<p>Questo \u00e8 necessario per valutare il nostro carico di lavoro e comprendere quali tabelle siano le pi\u00f9 \"calde\". Ad esempio, questo \u00e8 utile quando vogliamo posizionare le tabelle \"calde\" su un'archiviazione SSD veloce. D'altra parte, le tabelle archiviate che non utilizziamo da tempo possono essere spostate in un'archiviazione \"fredda\", su dischi SATA, e possono rimanere l\u00ec, con accesso solo quando necessario. <\/p>\n<p><\/p>\n<p>\u00c8 anche utile per rilevare anomalie dopo vari rilasci e deployment. Ad esempio, un progetto potrebbe aver lanciato una nuova funzionalit\u00e0. Se abbiamo aggiunto nuove funzionalit\u00e0 per lavorare con il database e costruiamo grafici sull'uso delle tabelle, possiamo facilmente individuare queste anomalie grazie ai grafici. Ad esempio, picchi di update o picchi di delete saranno chiaramente visibili.<\/p>\n<p><\/p>\n<p>\u00c8 possibile anche rilevare anomali nella statistica \"distorta\". Cosa significa? PostgreSQL ha un pianificatore di query molto potente e ben progettato. Gli sviluppatori dedicano molto tempo al suo sviluppo. Come funziona? Per creare buoni piani, PostgreSQL raccoglie periodicamente statistiche sulla distribuzione dei dati nelle tabelle. Questi dati includono i valori pi\u00f9 comuni: il numero di valori unici, informazioni sui NULL nella tabella e molte altre informazioni. <\/p>\n<p><\/p>\n<p>Basandosi su queste statistiche, il pianificatore crea diverse query, seleziona la pi\u00f9 ottimale e utilizza questo piano di query per eseguire la query stessa e restituire i dati. <\/p>\n<p><\/p>\n<p>A volte le statistiche possono essere imprecise. Le informazioni sulla qualit\u00e0 e sulla quantit\u00e0 possono cambiare in una tabella, ma la statistica non viene aggiornata. I piani definiti potrebbero non essere ottimali. Se i nostri piani si rivelassero non ottimali in base al monitoraggio effettuato, potremmo notare queste anomalie. Ad esempio, dove i dati sono cambiati qualitativamente e insieme all'indice \u00e8 iniziato a essere utilizzato un passaggio sequenziale nella tabella, ovvero, se la richiesta deve restituire solo 100 righe (c'\u00e8 un limite di 100), per questa richiesta verr\u00e0 eseguita una scansione completa. Questo influisce sempre negativamente sulle prestazioni. <\/p>\n<p><\/p>\n<p>E saremo in grado di vedere questo nel monitoraggio. Potremo quindi esaminare questa richiesta, eseguire un explain, raccogliere statistiche e costruire un nuovo indice aggiuntivo. E quindi reagire al problema. Per questo \u00e8 importante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/a586b45241efc73b5c59b8e21b9c2629.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un altro esempio di monitoraggio. Penso che molti lo riconoscano, perch\u00e9 \u00e8 molto popolare. Chi lo usa nei propri progetti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/prometheus\">Prometheus<\/a><\/noindex>? \u0410 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 Prometheus? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0435\u0441\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 PostgreSQL \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex> Prometheus. Ma c'\u00e8 un aspetto negativo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/5a9de42b009c7bb333ee72f01bb46fb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ci sono diversi grafici, e come unit\u00e0 sono indicati i byte, cio\u00e8 ci sono 5 grafici: Insert data, Update data, Delete data, Fetch data e Return data. Come unit\u00e0 di misura sono indicati i byte. Tuttavia, il problema \u00e8 che la statistica in PostgreSQL restituisce dati in tuple (righe). Di conseguenza, questi grafici rappresentano un modo molto efficace per ridurre il vostro carico di lavoro di diverse volte, anche decine di volte, poich\u00e9 una tuple non \u00e8 un byte, ma \u00e8 una riga, che \u00e8 composta da molti byte e ha sempre una lunghezza variabile. Pertanto, calcolare il carico di lavoro in byte utilizzando le tuple \u00e8 un compito irrealizzabile o molto complesso. Quindi, quando utilizzate il dashboard o il monitoraggio integrato, \u00e8 sempre importante capire che funzionano correttamente e restituiscono dati valutati in modo preciso. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/697ca274c58466beec45614e9d57bda7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Come si ottiene la statistica su queste tabelle? A tal fine, PostgreSQL ha un certo numero di viste. E la vista principale \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/10\/monitoring-stats.html\">pg_stat_user_tables<\/a><\/noindex>. User_tables \u2013 significa che le tabelle sono create per conto dell'utente. In contrapposizione, ci sono le viste di sistema, che vengono utilizzate da PostgreSQL stesso. E c'\u00e8 una tabella riepilogativa Alltables, che include sia le tabelle di sistema che quelle degli utenti. Puoi partire da una delle due, quella che preferisci di pi\u00f9.<\/p>\n<p><\/p>\n<p>Sui campi sopra indicati \u00e8 possibile valutare il numero di insert, update e delete. L'esempio di dashboard che ho utilizzato sfrutta proprio questi campi per valutare le caratteristiche del carico di lavoro. Pertanto, possiamo anche basarci su di essi. Ma \u00e8 importante ricordare che si tratta di tuple, non di byte, quindi non possiamo semplicemente convertirli in byte.<\/p>\n<p><\/p>\n<p>Sulla base di questi dati, possiamo creare, cos\u00ec chiamate, tabelle TopN. Ad esempio, Top-5, Top-10. E possiamo monitorare quelle tabelle pi\u00f9 attive, quelle che vengono utilizzate di pi\u00f9. Ad esempio, le 5 tabelle \u2018calde\u2019 per le inserzioni. E su queste tabelle TopN valutiamo il nostro carico di lavoro e possiamo monitorare i picchi di carico di lavoro dopo vari rilasci, aggiornamenti e deployment. <\/p>\n<p><\/p>\n<p>\u00c8 anche importante valutare le dimensioni della tabella, perch\u00e9 a volte gli sviluppatori rilasciano una nuova funzione e le nostre tabelle iniziano ad aumentare considerevolmente, poich\u00e9 decidono di aggiungere ulteriore volume di dati, senza prevedere come questo influenzer\u00e0 le dimensioni del database. Anche questi casi ci prendono di sorpresa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/9b964b332210c5bef77f99dfa386a2b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E ora una piccola domanda per voi. Qual \u00e8 la domanda che sorge quando notate un carico sul server con il database? Qual \u00e8 la successiva domanda che vi viene in mente? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/b72286a22e6e3ad0f1b6c8a478cf65b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma in realt\u00e0 la domanda successiva \u00e8: quali sono le query che causano il carico? Cio\u00e8, non \u00e8 interessante osservare i processi che provocano il carico. \u00c8 chiaro che se hostiamo un database, l\u00ec ci sar\u00e0 in esecuzione un database e solo il database verr\u00e0 utilizzato. Se apriamo Top, vedremo un elenco di processi in PostgreSQL che stanno eseguendo delle operazioni. Da Top non sar\u00e0 chiaro cosa stanno facendo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/3d8c06dfe22d5fe93427055c39925a2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pertanto, \u00e8 importante identificare le query che generano il maggior carico, poich\u00e9 l'ottimizzazione delle query di solito offre un beneficio maggiore rispetto all'ottimizzazione della configurazione di PostgreSQL, del sistema operativo o addirittura dell'hardware. A mio avviso, si tratta di circa l'80-85-90%. E questo pu\u00f2 essere fatto molto pi\u00f9 rapidamente. \u00c8 pi\u00f9 veloce correggere una query piuttosto che risistemare la configurazione, pianificare un riavvio, soprattutto se non \u00e8 possibile riavviare il database o aggiungere hardware. \u00c8 pi\u00f9 semplice riscrivere una query o aggiungere un indice per ottenere un risultato migliore da quella query. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/f41c9f7596f527a4403c5a5981f3a0d2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDi conseguenza, \u00e8 necessario monitorare le query e la loro adeguatezza. Prendiamo un altro esempio di monitoraggio. Anche qui sembra esserci un monitoraggio eccellente. Ci sono informazioni sulla replicazione, sulla capacit\u00e0 di throughput, sui lock e sull'utilizzo delle risorse. Tutto sembra perfetto, ma mancano informazioni sulle query. Non \u00e8 chiaro quali query vengano eseguite nel nostro database, quanto tempo impiegano e quante sono. Abbiamo sempre bisogno di avere queste informazioni nel monitoraggio. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/d92327c0486336105fb9a8005b6032ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Possiamo utilizzare il modulo pg_stat_statements per ottenere queste informazioni. Da questo si possono costruire vari grafici. Ad esempio, \u00e8 possibile ottenere informazioni sulle query pi\u00f9 frequenti, cio\u00e8 su quelle eseguite pi\u00f9 spesso. S\u00ec, dopo i deployment \u00e8 anche molto utile guardarlo e capire se ci sono picchi di richieste. <\/p>\n<p><\/p>\n<p>\u00c8 possibile monitorare le query pi\u00f9 lunghe, cio\u00e8 quelle che richiedono pi\u00f9 tempo per essere eseguite. Esse utilizzano la CPU e consumano operazioni di input\/output. Possiamo valutarle anche tramite i campi total_time, mean_time, blk_write_time e blk_read_time. <\/p>\n<p><\/p>\n<p>Possiamo valutare e monitorare le query pi\u00f9 pesanti in termini di utilizzo delle risorse, quelle che leggono dal disco, che utilizzano la memoria o, al contrario, creano un carico di scrittura.<\/p>\n<p><\/p>\n<p>Possiamo valutare le query pi\u00f9 gravose. Queste sono quelle query che restituiscono un numero elevato di righe. Ad esempio, pu\u00f2 trattarsi di una query in cui si \u00e8 dimenticato di impostare un limite. Essa restituir\u00e0 semplicemente tutto il contenuto della tabella o della query sulle tabelle richieste.<\/p>\n<p><\/p>\n<p>Si pu\u00f2 anche monitorare le query che utilizzano file temporanei o tabelle temporanee. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/7b33a882f23dc99ae5b6d158eaffdad5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nE abbiamo anche processi in background. I processi in background sono innanzitutto i checkpoint, o come vengono anche chiamati, i punti di controllo, l'autovacuum e la replica. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/8fb2f921b60bd25053896155c90d7e53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un altro esempio di monitoraggio. A sinistra c'\u00e8 la scheda Manutenzione, ci spostiamo su di essa e speriamo di vedere qualcosa di utile. Ma qui ci sono solo i dati sul tempo di funzionamento del vacuum e sulla raccolta delle statistiche, nient'altro. Queste sono informazioni molto scarne, quindi \u00e8 sempre necessario avere informazioni su come funzionano i processi in background nel nostro database e se ci sono problemi legati al loro funzionamento. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/137acdb66afc49d0a61d74581bf51b39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quando consideriamo i punti di controllo, dobbiamo ricordare che i punti di controllo scaricano le pagine \"sporche\" dalla memoria shardata su disco, quindi creano un checkpoint. E questo checkpoint pu\u00f2 essere utilizzato come un punto di riferimento per il ripristino, nel caso in cui PostgreSQL venga chiuso in modo imprevisto. <\/p>\n<p><\/p>\n<p>Pertanto, per scrivere tutte le pagine \"sporche\" su disco, \u00e8 necessario eseguire un certo volume di scrittura. E, di regola, nei sistemi con grande capacit\u00e0 di memoria, si tratta di un'importante quantit\u00e0. Se i nostri checkpoint vengono effettuati molto frequentemente in un intervallo di tempo breve, le prestazioni del disco subiranno notevolmente. E le richieste dei clienti soffriranno per la mancanza di risorse. Combatteranno per le risorse e mancheranno di prestazioni. <\/p>\n<p><\/p>\n<p>Di conseguenza, attraverso pg_stat_bgwriter, possiamo monitorare il numero di checkpoint che si verificano in base ai campi specificati. E se in un certo intervallo di tempo (10-15-20 minuti, mezz'ora) ci sono molti checkpoint, per esempio, 3-4-5, questo pu\u00f2 gi\u00e0 essere un problema. \u00c8 necessario esaminare il database, controllare la configurazione per capire cosa causa tale abbondanza di checkpoint. Potrebbe essere che si stia effettuando una grande scrittura. Possiamo valutare il carico di lavoro, poich\u00e9 abbiamo gi\u00e0 aggiunto i grafici del carico di lavoro. Possiamo gi\u00e0 ottimizzare i parametri dei checkpoint e fare in modo che non influiscano troppo sulle prestazioni delle richieste.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/3d86b57d87ec592f307b28ea4efb26ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Torno a parlare di autovacuum, perch\u00e9 \u00e8 un aspetto che, come gi\u00e0 detto, pu\u00f2 influenzare notevolmente le prestazioni sia dei dischi che delle query. \u00c8 quindi sempre importante valutare la quantit\u00e0 di autovacuum. <\/p>\n<p><\/p>\n<p>Il numero di worker autovacuum in un database \u00e8 limitato. Di default ci sono tre worker; quindi, se abbiamo continuamente tre worker attivi nel database, significa che autovacuum \u00e8 sottovuoto, \u00e8 necessario aumentare i limiti, rivedere le impostazioni di autovacuum e accedere alla configurazione.<br \/>\n\u00c8 importante valutare quali worker di vacuum sono attivi. Pu\u00f2 essere che uno sia stato avviato manualmente da un DBA, creando quindi un carico aggiuntivo. Possiamo avere dei problemi. Oppure, ci sono i vacuum che registrano il conteggio delle transazioni. Per alcune versioni di PostgreSQL, questi vacuum possono essere molto pesanti. Possono influenzare notevolmente le prestazioni, poich\u00e9 leggono l'intera tabella e scandagliano tutti i blocchi in essa. <\/p>\n<p><\/p>\n<p>E, naturalmente, la durata dei processi di vacuum. Se abbiamo vacuum prolungati che funzionano per molto tempo, significa che \u00e8 nuovamente il momento di esaminare la configurazione del vacuum e forse rivederne le impostazioni. Perch\u00e9 potrebbe verificarsi una situazione in cui il vacuum lavora su una tabella per un lungo periodo (3-4 ore), ma durante il funzionamento del vacuum si accumulano di nuovo un grande volume di righe morte. E non appena il vacuum termina, deve nuovamente eseguire il vacuum su questa tabella. Ci troviamo quindi nella situazione di un vacuum infinito. In questo caso, il vacuum non riesce a svolgere il proprio lavoro e le tabelle iniziano gradualmente a gonfiarsi in dimensioni, anche se il volume di dati utili in esse rimane lo stesso. Pertanto, in caso di vacuum prolungati, monitoriamo sempre la configurazione e cerchiamo di ottimizzarla, ma senza compromettere le prestazioni delle richieste dei clienti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/bf109b53e0ad70bbb3fba727149e5086.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Attualmente, praticamente non esistono installazioni di PostgreSQL senza la replica streaming. La replica \u00e8 il processo di trasferimento dei dati dal master alla replica.<\/p>\n<p><\/p>\n<p>La replica in PostgreSQL \u00e8 gestita attraverso il log delle transazioni. Il master genera il log delle transazioni. Il log viene trasmesso alla replica tramite la connessione di rete, dove viene poi riprodotto. \u00c8 tutto molto semplice. <\/p>\n<p><\/p>\n<p>Pertanto, per monitorare il lag della replica si utilizza la vista pg_stat_replication. Tuttavia, non \u00e8 tutto cos\u00ec semplice. Nella versione 10, la vista ha subito diverse modifiche. In primo luogo, alcuni campi sono stati rinominati. Inoltre, sono stati aggiunti nuovi campi. Nella versione 10 sono stati introdotti campi che permettono di valutare il lag della replica in secondi. Questo \u00e8 molto comodo. Fino alla versione 10 era possibile valutare il lag della replica in byte. Questa opzione \u00e8 rimasta anche nella versione 10, quindi \u00e8 possibile scegliere se \u00e8 pi\u00f9 comodo valutare il lag in byte o in secondi. Molti utilizzano entrambe le modalit\u00e0.<\/p>\n<p><\/p>\n<p>Tuttavia, per valutare il lag di replica, \u00e8 necessario conoscere la posizione del log nella transazione. Queste posizioni del log delle transazioni sono presenti nella vista pg_stat_replication. In altre parole, possiamo utilizzare la funzione pg_xlog_location_diff() per prendere due punti nel log della transazione. Calcoliamo la differenza tra di essi e otteniamo il lag di replica in byte. \u00c8 molto comodo e semplice. <\/p>\n<p><\/p>\n<p>Nella versione 10, questa funzione \u00e8 stata rinominata in pg_wal_lsn_diff(). In generale, in tutte le funzioni, viste, utilit\u00e0 in cui appariva la parola \"xlog\", \u00e8 stata sostituita con il termine \"wal\". Questo sia nelle viste che nelle funzioni. \u00c8 una novit\u00e0. <\/p>\n<p><\/p>\n<p>In aggiunta, nella versione 10 sono state introdotte righe che mostrano specificamente il lag. Si tratta di write lag, flush lag, replay lag. Cio\u00e8, queste metriche sono importanti da monitorare. Se vediamo che c'\u00e8 un lag di replica, dobbiamo indagare sul motivo per cui \u00e8 emerso, da dove deriva e risolvere il problema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/5b29d7519f28da63446b741024a68bb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con le metriche di sistema, praticamente tutto funziona correttamente. Quando inizia qualsiasi monitoraggio, parte dalle metriche di sistema. Questi includono l'utilizzo della CPU, della memoria, dello swap, della rete e del disco. Tuttavia, mancano di molti parametri per impostazione predefinita. <\/p>\n<p><\/p>\n<p>Se la gestione del processo \u00e8 a posto, ci sono problemi con la gestione del disco. Di solito, gli sviluppatori degli strumenti di monitoraggio aggiungono informazioni sulla larghezza di banda. Queste possono essere in iops o byte. Ma dimenticano la latenza e l'utilizzo dei dispositivi di archiviazione. Questi sono parametri pi\u00f9 importanti che consentono di valutare quanto siano occupati i dischi e quanto rallentano le operazioni. <strong>Se abbiamo un'alta latenza, significa che ci sono problemi con i dischi. Se abbiamo un'alta percentuale di utilizzo, significa che i dischi non riescono a gestire il carico.<\/strong> Queste sono caratteristiche di qualit\u00e0 superiore rispetto alla larghezza di banda.<\/p>\n<p><\/p>\n<p>Anche se queste statistiche possono essere ottenute dal filesystem \/proc, come avviene per l'utilizzo della CPU. Non so perch\u00e9 questa informazione non venga aggiunta nei monitoraggi. <strong>Tuttavia, \u00e8 importante includerla nel proprio monitoraggio.<\/strong> <\/p>\n<p><\/p>\n<p>Lo stesso vale per le interfacce di rete. <strong>Ci sono informazioni sulla larghezza di banda della rete in pacchetti e byte, ma non ci sono informazioni sulla latenza e sull'utilizzo, anche se queste sarebbero anch'esse utili.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/3b9b2c300bcc8a30e1b6fae1a55e6f21.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ogni monitoraggio ha i suoi difetti. Qualunque monitoraggio tu scelga, non soddisfer\u00e0 sempre determinati criteri. Tuttavia, si stanno sviluppando, vengono aggiunte nuove funzionalit\u00e0, quindi scegli qualcosa e migliora. <\/p>\n<p><\/p>\n<p>E per migliorare, \u00e8 sempre necessario avere una chiara comprensione di cosa significhi la statistica fornita e come questa possa essere utilizzata per risolvere i problemi. <\/p>\n<p><\/p>\n<p>Ecco alcuni punti chiave:<\/p>\n<p><\/p>\n<ul>\n<li>\u00c8 sempre necessario monitorare la disponibilit\u00e0, avere dashboard che ti permettano di valutare rapidamente che tutto vada bene con il database. <\/li>\n<li>\u00c8 essenziale avere una comprensione di quali clienti interagiscano con il tuo database, per escludere quelli problematici. <\/li>\n<li>\u00c8 importante valutare come questi clienti interagiscono con i dati. Devi avere consapevolezza del tuo carico di lavoro.<\/li>\n<li>\u00c8 fondamentale monitorare come si forma questo carico di lavoro e quali richieste vengono effettuate. Puoi valutare le richieste, ottimizzarle, rifattorizzarle e costruire indici per esse. Questo \u00e8 molto importante.<\/li>\n<li>I processi in background possono influire negativamente sulle richieste dei clienti, quindi \u00e8 importante monitorarli per assicurarsi che non consumino troppe risorse.<\/li>\n<li>Le metriche di sistema ti consentono di pianificare la scalabilit\u00e0 e l'aumento della capacit\u00e0 dei tuoi server, quindi \u00e8 importante monitorarle e valutarle.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovskiy\" src=\"\/wp-content\/uploads\/2020\/02\/7ece1ec5ffc67d68697c0932a2fbf7db.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se sei interessato a questo argomento, puoi esplorare questi link.<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/stats_collector\">http:\/\/bit.do\/stats_collector<\/a><\/noindex> \u2014 \u00e8 la documentazione ufficiale dei collezionisti di statistiche. Qui trovi la descrizione di tutte le viste statistiche e di tutti i campi. Puoi leggerli, comprenderli e analizzarli, e basandoti su di essi costruire i tuoi grafici e integrarli nei tuoi monitoraggi. <\/p>\n<p><\/p>\n<p>Esempi di query:<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/dataegret_sql\">http:\/\/bit.do\/dataegret_sql<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/lesovsky_sql\">http:\/\/bit.do\/lesovsky_sql<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Questo \u00e8 il nostro repository aziendale e il mio personale. Contiene esempi di query. Non ci sono query del tipo select * from qualcosa. Ci sono gi\u00e0 query pronte con join e funzioni interessanti che trasformano i dati grezzi in valori leggibili e utili, ad esempio, byte, tempo. Puoi esplorarli, guardarli, analizzarli, aggiungerli ai tuoi monitoraggi e costruire i tuoi monitoraggi su questa base. <\/p>\n<p><\/p>\n<h4 id=\"voprosy\">Domande<\/h4>\n<p><\/p>\n<p>Domanda: Hai detto che non promuoverai i marchi, ma sono comunque curioso: quali dashboard usi nei tuoi progetti?<br \/>\nRisposta: In vari modi. A volte andiamo dal cliente e lui ha gi\u00e0 il proprio monitoraggio. E noi forniamo consulenza al cliente su cosa dovrebbe aggiungere al suo monitoraggio. La situazione peggiore riguarda Zabbi\u0445. Perch\u00e9 non ha la possibilit\u00e0 di costruire grafici TopN. Noi usiamo <noindex><a rel=\"nofollow\" href=\"https:\/\/okmeter.io\/\">Okmeter<\/a><\/noindex>, perch\u00e9 abbiamo fornito consulenze a questi ragazzi sul monitoraggio. Hanno realizzato un monitoraggio PostgreSQL basato sul nostro specifico. Sto scrivendo il mio pet-project, che raccoglie dati tramite Prometheus e li visualizza in <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex>. Ho l'obiettivo di creare il mio esportatore in Prometheus e poi visualizzare tutto in Grafana.<\/p>\n<p><\/p>\n<p>Domanda: Ci sono analoghi ai rapporti AWR o \u2026 aggregazioni? Ne siete a conoscenza?<br \/>\nRisposta: S\u00ec, so cos'\u00e8 l'AWR, \u00e8 una cosa davvero utile. Attualmente ci sono diversi strumenti che implementano un modello simile. A intervalli di tempo regolari, vengono scritti dei baseline nello stesso PostgreSQL o in un'archivio separato. Si possono trovare su internet, ci sono. Uno degli sviluppatori di uno di questi strumenti \u00e8 attivo nel forum sql.ru nella discussione su PostgreSQL. Lo si pu\u00f2 contattare l\u00ec. S\u00ec, esistono strumenti simili, possono essere utilizzati. Inoltre, nel proprio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> Anch'io sto scrivendo uno strumento che permette di fare la stessa cosa.<\/p>\n<p><\/p>\n<p>P.S.1 Se usi postgres_exporter, quale dashboard stai utilizzando? Ce ne sono diverse. Sono gi\u00e0 obsolete. Forse la comunit\u00e0 potrebbe creare un modello aggiornato?<\/p>\n<p><\/p>\n<p>P.S.2 Ho rimosso pganalyze, poich\u00e9 \u00e8 un'offerta SaaS proprietaria che si concentra sul monitoraggio delle performance e sulle suggerimenti automatizzati per la messa a punto.<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Quale monitoraggio self-hosted per PostgreSQL (con dashboard) consideri il migliore?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">30,0%<\/strong>Zabbix + plugin di Alexey Lesovsky oppure zabbix 4.4 o libzbxpgsql + zabbix libzbxpgsql + zabbix3<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/lesovsky\/pgcenter0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/pg-monz\/pg_monz0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/cybertec-postgresql\/pgwatch22<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/postgrespro\/mamonsu2<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/www.percona.com\/doc\/percona-monitoring-and-management\/conf-postgres.html0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>pganalyze \u00e8 un SaaS proprietario \u2014 non posso eliminarlo1<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/powa-team\/powa1<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgbadger0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgcluu0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/zalando\/PGObserver0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/spotify\/postgresql-metrics1<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 10 utenti. 26 utenti si sono astenuti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c [&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-56075","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=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\" \/>\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\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\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\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\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=\"2020-02-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:16+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\udd47Fondamenti del monitoraggio di PostgreSQL. Alexey Lesovsky | ProHoster","description":"Ti propongo di leggere la trascrizione della presentazione di Alexey Lesovsky di Data Egret \"Fondamenti del monitoraggio di PostgreSQL\". In questa presentazione, Alexey Lesovsky parler\u00e0 dei punti chiave delle statistiche di PostgreSQL, di cosa significano e perch\u00e9 dovrebbero essere presenti nel monitoraggio; quali grafici dovrebbero essere inclusi nel monitoraggio, come aggiungerli e come interpretarli. La presentazione sar\u00e0 utile per gli amministratori di database e i sistemisti.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","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\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","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":"2020-02-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56075","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:31:43","updated":"2022-09-29 10:21:06"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/56075","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=56075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/56075\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=56075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=56075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=56075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}