Visualisez les données de l'application Node JS avec Prometheus + Grafana

Dans cet article, je montrerai comment développer des tableaux de bord étonnamment informatifs et pratiques pour toute application Node JS, je décrirai un tas de Prometheus avec Grafana et donnerai des modèles de code afin que vous puissiez utiliser les connaissances acquises pour résoudre vos problèmes.


La plupart de l'article n'est pas spécifiquement destiné aux développeurs Node JS et peut être utile quel que soit le langage de programmation.


Lien vers le référentiel Github avec le code de l'article - https://github.com/pavlovdog/grafana-prometheus-node-js-example



Je pense que nous sommes tous confrontés au défi de l'analyse des données. Peut-être serez-vous d'accord - avoir une image visuelle devant vos yeux est beaucoup plus pratique que de mettre vos mains dans la base de données à chaque fois ou de produire des scripts ponctuels.


Cette approche devient particulièrement utile au moment où le système "monte sur les rails". Le nombre d'utilisateurs dépasse imperceptiblement des dizaines, puis des centaines. Et maintenant, vous n'avez tout simplement plus le temps de surveiller attentivement l'application en mode manuel. Et c'est juste agréable de se sentir comme Tom Cruise de l'avis spécial.


Je vais vous montrer à quel point il est facile d'ajouter des tableaux de bord pratiques pour tout type de données et de donner un exemple d'une application Node JS simple qui implémente cette fonctionnalité.


Architecture


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 . :


Exemples de tableaux de bord du stand de démonstration officiel 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) :


Le premier graphique montre le nombre total d'utilisateurs dans toutes les catégories.  Sur le second - le nombre d'utilisateurs pour chaque catégorie, ainsi que leurs valeurs moyennes, minimales, maximales et actuelles.



. :


  • 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)


Dans cet article, j'ai essayé de décrire, il me semble, l'une des étapes les plus intéressantes dans le développement d'un service informatique - la visualisation des métriques clés des applications. Si vous avez encore des questions - n'hésitez pas à les poser dans les commentaires de l'article. Si vous souhaitez développer des systèmes de surveillance pour votre entreprise, écrivez-moi à sergey.p.moscow@gmail.com.


Abonnez-vous à ma chaîne Telegram pour recevoir des notifications de nouveaux articles. Merci pour l'attention :)


All Articles