Pada artikel ini saya akan menunjukkan cara mengembangkan dashboard yang mengejutkan informatif dan nyaman untuk aplikasi Node JS, saya akan menjelaskan sekelompok Prometheus dengan Grafana dan memberikan templat kode sehingga Anda dapat menggunakan pengetahuan yang diperoleh untuk menyelesaikan masalah Anda.
Sebagian besar artikel tidak secara khusus ditargetkan pada pengembang Node JS dan dapat bermanfaat terlepas dari bahasa pemrogramannya.
Tautan ke repositori Github dengan kode untuk artikel - https://github.com/pavlovdog/grafana-prometheus-node-js-example
![](https://habrastorage.org/webt/np/y1/5r/npy15rhyqbsiknhmymubxjelzpq.png)
Saya pikir kita semua menghadapi tantangan analisis data. Mungkin Anda akan setuju - memiliki gambar visual di depan mata Anda jauh lebih nyaman daripada menempatkan tangan Anda ke dalam database setiap kali atau menghasilkan skrip satu kali.
Pendekatan ini menjadi sangat berguna pada saat sistem "berada di atas rel." Jumlah pengguna secara tak terlihat melompati belasan, dan kemudian ratusan. Dan sekarang Anda tidak punya waktu untuk memonitor aplikasi dalam mode manual. Dan rasanya seperti Tom Cruise dari Pendapat Khusus.
Saya akan menunjukkan betapa mudahnya menambahkan dashboard yang nyaman untuk semua jenis data dan memberikan contoh aplikasi Node JS sederhana yang mengimplementasikan fungsi ini.
Arsitektur
Prometheus + Grafana. Prometheus, . , :
Prometheus
![https://prometheus.io/](https://habrastorage.org/webt/rk/-u/xb/rk-uxblw2p3ohkts0wrxbtpr_mc.png)
โ . X timestamp -> data. Prometheus โ Node JS . HTTP , Prometheus , .
Grafana
![https://grafana.com/](https://habrastorage.org/webt/jp/vr/lh/jpvrlhwmhsrxorjwxp-l0rq0bzq.png)
Open-source . (data source) โ (MySQL, PostgreSQL), (Prometheus).
, , . Grafana โ line chart, histogram, heatmap . :
![Contoh dasbor dari stand demo resmi Grafana](https://habrastorage.org/webt/lh/_m/-l/lh_m-lvutnbakoakyqmk7kefvy8.png)
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) :
![Grafik pertama menunjukkan jumlah total pengguna di semua kategori. Pada yang kedua - jumlah pengguna untuk setiap kategori, serta nilai rata-rata, minimum, maksimum, dan saat ini.](https://habrastorage.org/webt/4q/jm/9x/4qjm9xw3dgpgcscph9mvi0f2yhe.png)
. :
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.
![](https://habrastorage.org/webt/o0/r1/u5/o0r1u5e1hrqn00wd0ioqqjrhstm.png)
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. , . :
![](https://habrastorage.org/webt/dk/g_/ek/dkg_ek9_4nqyitq8kjhb-1vhzns.png)
Grafana handlebars ({{ ... }}
) โ . active_users
:
active_users
PromQL Total users ( ):
![](https://habrastorage.org/webt/0v/vs/gn/0vvsgno_ar3b4desfur4otfp5be.png)
sum โ active_users
.
sum(active_users)
Dalam artikel ini saya mencoba menggambarkan, menurut saya, salah satu langkah paling menarik dalam pengembangan layanan TI - visualisasi metrik aplikasi utama. Jika Anda masih memiliki pertanyaan - jangan ragu untuk menanyakannya di komentar di artikel. Jika Anda tertarik mengembangkan sistem pemantauan untuk bisnis Anda, silakan menulis kepada saya di sergey.p.moscow@gmail.com.
Berlangganan saluran Telegram saya untuk menerima pemberitahuan artikel baru. Terimakasih atas perhatiannya :)