рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рд╕рд╛рде рдиреЛрдб рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдиреЛрдб рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реВрдЪрдирд╛рддреНрдордХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреИрд╢рдмреЛрд░реНрдб рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдореИрдВ рдЧреНрд░реЗрдлрд╛рдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЛрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдЧреНрд░рд╣реАрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред


рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЗрдЦ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЛрдб рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд╕рд╛рде Github рднрдВрдбрд╛рд░ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ - https://github.com/pavlovdog/grafana-prometheus-node-js-example



рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЖрдк рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ - рд╣рд░ рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рдбрд╛рд▓рдиреЗ рдпрд╛ рдПрдХ-рдмрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рджреГрд╢реНрдп рдЪрд┐рддреНрд░ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


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


рдореИрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреИрд╢рдмреЛрд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдПрдХ рд╕рд░рд▓ рдиреЛрдб рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред


рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


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


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЗрдореЛ рд╕реНрдЯреИрдВрдб рдЧреНрд░рд╛рдлрд╛рдирд╛ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдбреИрд╢рдмреЛрд░реНрдб


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


рдкрд╣рд▓рд╛ рдЧреНрд░рд╛рдлрд╝ рд╕рднреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред  рджреВрд╕рд░реЗ рдкрд░ - рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реЗрдгреА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рдФрд╕рдд, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдФрд░ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдпред



. :


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


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


рдирдП рд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪрдирд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ ред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж :)


All Articles