рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдиреЛрдб рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реВрдЪрдирд╛рддреНрдордХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреИрд╢рдмреЛрд░реНрдб рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдореИрдВ рдЧреНрд░реЗрдлрд╛рдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЛрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдЧреНрд░рд╣реАрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЗрдЦ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЛрдб рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд╕рд╛рде Github рднрдВрдбрд╛рд░ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ - https://github.com/pavlovdog/grafana-prometheus-node-js-example

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ - рд╣рд░ рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рдбрд╛рд▓рдиреЗ рдпрд╛ рдПрдХ-рдмрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рджреГрд╢реНрдп рдЪрд┐рддреНрд░ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрд╕ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд┐рд╕реНрдЯрдо "рд░реЗрд▓ рдкрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рджрд░реНрдЬрдиреЛрдВ рдФрд░ рдлрд┐рд░ рд╕реИрдХрдбрд╝реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдореИрдиреНрдпреБрдЕрд▓ рдореЛрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░рд╛рдп рд╕реЗ рдЯреЙрдо рдХреНрд░реВрдЬ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред
рдореИрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреИрд╢рдмреЛрд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдПрдХ рд╕рд░рд▓ рдиреЛрдб рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
Prometheus + Grafana. Prometheus, . , :
Prometheus

тАФ . X timestamp -> data. Prometheus тАФ Node JS . HTTP , Prometheus , .
Grafana

Open-source . (data source) тАФ (MySQL, PostgreSQL), (Prometheus).
, , . Grafana тАФ line chart, histogram, heatmap . :

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

. :
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)
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рдЖрдИрдЯреА рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рдкреНрд░рдореБрдЦ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рджреГрд╢реНрдпред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ - рддреЛ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ sergey.p.moscow@gmail.com рдкрд░ рд▓рд┐рдЦреЗрдВред
рдирдП рд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪрдирд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ ред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж :)