Visualisieren Sie Node JS-Anwendungsdaten mit Prometheus + Grafana

In diesem Artikel werde ich zeigen, wie überraschend informative und praktische Dashboards für jede Node JS-Anwendung entwickelt werden. Ich werde eine Reihe von Prometheus mit Grafana beschreiben und Codevorlagen angeben, damit Sie das erworbene Wissen zur Lösung Ihrer Probleme verwenden können.


Der größte Teil des Artikels richtet sich nicht speziell an Node JS-Entwickler und kann unabhängig von der Programmiersprache nützlich sein.


Link zum Github-Repository mit dem Code für den Artikel - https://github.com/pavlovdog/grafana-prometheus-node-js-example



Ich denke, dass wir alle vor der Herausforderung der Datenanalyse stehen. Vielleicht werden Sie zustimmen - ein visuelles Bild vor Ihren Augen zu haben ist viel bequemer, als jedes Mal Ihre Hände in die Datenbank zu legen oder einmalige Skripte zu erstellen.


Dieser Ansatz wird besonders nützlich, wenn das System "auf die Schienen kommt". Die Anzahl der Benutzer springt unmerklich über Dutzende und dann über Hunderte. Und jetzt haben Sie einfach keine Zeit, die Anwendung im manuellen Modus sorgfältig zu überwachen. Und es ist einfach schön, sich wie Tom Cruise von der Special Opinion zu fühlen.


Ich werde zeigen, wie einfach es ist, praktische Dashboards für jede Art von Daten hinzuzufügen, und ein Beispiel für eine einfache Node JS-Anwendung geben, die diese Funktionalität implementiert.


Die Architektur


Prometheus + Grafana. Prometheus, . , :


Prometheus


https://prometheus.io/


— . X timestamp -> data. Prometheus — Node JS . HTTP , Prometheus , .


Grafana


https://grafana.com/


Open-source . (data source) — (MySQL, PostgreSQL), (Prometheus).



, , . Grafana — line chart, histogram, heatmap . :


Beispiel-Dashboards vom offiziellen Demo-Stand Grafana


Going deeper


, online , . — — , . , .


Prometheus + Grafana + Node JS . — https://github.com/pavlovdog/grafana-prometheus-node-js-example.



:


$ git clone https://github.com/pavlovdog/grafana-prometheus-node-js-example
$ cd grafana-prometheus-node-js-example/
$ docker-compose up -d

docker docker-compose:


$ docker --version
Docker version 19.03.5, build 633a0ea838
$ docker-compose --version
docker-compose version 1.23.1, build b02f1306


, localhost:3000 ( — admin, — illchangeitanyway) :


Das erste Diagramm zeigt die Gesamtzahl der Benutzer in allen Kategorien.  Zum zweiten die Anzahl der Benutzer für jede Kategorie sowie deren Durchschnitts-, Minimal-, Maximal- und aktuelle Werte.



. :


  • Prometheus
  • App
  • Grafana

docker-compose . — .


Prometheus


prometheus/prometheus.yml:


scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s

    static_configs:
      - targets: [
        'app:9200',
      ]
        labels:
          service: 'app-exporter'
          group: 'testing'
          name: 'app-exporter'

, Prometheus (scraping) (targets). target — Node JS , 9200. — 5 .


Prometheus, localhost:9090/targets.



Prometheus . 4.9 .


App


, , e-commerce — . , Prometheus. localhost:9200/metrics:


# HELP active_users Amount of active users right now per category
# TYPE active_users gauge
active_users{category="oil"} 100
active_users{category="wine"} 194
active_users{category="bread"} 289
active_users{category="butter"} 397

— Prometheus :


- targets: [
    'app:9200',
]

, Prometheus app:9200/. — /metrics (app:9200/metrics).


Grafana


Grafana . ./grafana:


$ tree grafana/
grafana/
├── config.ini
├── dashboards
│   └── simple.json
└── provisioning
    ├── dashboards
    │   └── all.yml
    └── datasources
        └── all.yml

grafana/provisioning/datasources/all.yml:


$ cat grafana/provisioning/datasources/all.yml 
datasources:
- name: 'prometheus-monitoring-1'
  type: 'prometheus'
  access: 'proxy'
  org_id: 1
  url: 'http://prometheus:9090'
  is_default: true
  version: 1
  editable: true

— Prometheus, 9090.



, Grafana Prometheus. (panel) , . , MySQL SQL :


select category, active_users from my_table;

Prometheus, — PromQL. , . :



Grafana handlebars ({{ ... }}) — . active_users:


active_users

PromQL Total users ( ):



sum — active_users .


sum(active_users)


In diesem Artikel habe ich versucht, einen der interessantesten Schritte bei der Entwicklung eines IT-Service zu beschreiben - die Visualisierung der wichtigsten Anwendungsmetriken. Wenn Sie noch Fragen haben, zögern Sie nicht, diese in den Kommentaren zum Artikel zu stellen. Wenn Sie an der Entwicklung von Überwachungssystemen für Ihr Unternehmen interessiert sind, schreiben Sie mir bitte unter sergey.p.moscow@gmail.com.


Abonnieren Sie meinen Telegrammkanal , um Benachrichtigungen über neue Artikel zu erhalten. Vielen Dank für Ihre Aufmerksamkeit :)


All Articles