本文 首发于 🍀 永浩转载 请注明 来源

Grafana + Prometheus + node_exporter性能监控

一、背景

在用Jmeter执行性能测试时,为了更好得收集压测数据,并展示性能测试结果数据,需要搭建一套监控平台。有了平台后测试人员可以随时通过查看性能压测数据,对比历史数据,分析性能优化结果。

二、服务准备

1、MySQL用户授权

需要对用户进行授权才能收集监控数据信息

  • 首先,登录mysql服务,这里以docker为例

    highlighter- applescript

    docker exec -it mysqlserver sh
    
    mysql -uroot -p
    
  • 然后,创建用户并开启远程登录。

    highlighter- n1ql

    #CREATE USER '你的账号'@'%'  IDENTIFIED BY '你的密码';
    CREATE USER 'exporter'@'%' IDENTIFIED BY '123123123';
    
  • 然后,授予查看主从运行、线程,及所有数据库的权限

    highlighter- lasso

    #GRANT PROCESS, REPLICATION CLIENT ON 库名.* TO '你的账号'@'%';
    GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
    
  • 然后,授予监控MySQL server运行过程中的资源消耗、资源权限

    highlighter- lasso

    #GRANT SELECT ON performance_schema.* TO '你的账号'@'%';
    GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
    
  • 最后,更新用户权限后,刷新权限表

    highlighter- abnf

    flush privileges;
    

2、部署服务

docker-compose.yml

version: '2'

networks:
    monitor:
        driver: bridge

services:
    prometheus:
        image: prom/prometheus:latest
        container_name: prometheus
        hostname: prometheus
        restart: always
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
        ports:
            - "9090:9090"
        networks:
            - monitor

    grafana:
        image: grafana/grafana:latest
        container_name: grafana
        hostname: grafana
        restart: always
        ports:
            - "3000:3000"
        networks:
            - monitor

    node-exporter:
        image: quay.io/prometheus/node-exporter:latest
        container_name: node-exporter
        hostname: node-exporter
        restart: always
        ports:
            - "9100:9100"
        networks:
            - monitor

    cadvisor:
        image: google/cadvisor:latest
        container_name: cadvisor
        hostname: cadvisor
        restart: always
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:rw
            - /sys:/sys:ro
            - /var/lib/docker/:/var/lib/docker:ro
        ports:
            - "8899:8080"
        networks:
            - monitor

    redis-exporter:
        image: oliver006/redis_exporter
        container_name: redis-exporter
        hostname: redis-exporter
        restart: always
        ports:
            - "9121:9121"
        command:
            - "--redis.addr=redis://127.0.0.1:6379"
        networks:
            - monitor

    mysql_exporter:
        image: prom/mysqld-exporter
        container_name: mysql-exporter
        hostname: mysql-exporter
        restart: always
        ports:
            - "9104:9104"
        environment:
            DATA_SOURCE_NAME: 'exporter:123123123@(127.0.0.1:3306)'
        networks:
            - monitor

docker-compose.yml当前目录下,创建prometheus.yml文件,它将prometheusexporter服务关联起来。

prometheus.yml

# Prometheus全局配置项
global:
  scrape_interval: 15s # 设定抓取数据的周期,默认为1min
  evaluation_interval: 15s # 设定更新rules文件的周期,默认为1min
  scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s


# scape配置
scrape_configs:
  # job_name默认写入timeseries的labels中,可以用于查询使用
  - job_name: 'prometheus'
    scrape_interval: 15s # 抓取周期,默认采用global配置
    static_configs:
    - targets: ['192.168.50.218:9090'] # prometheus所要抓取数据的地址,即instance实例项

  - job_name: 'node'
    scrape_interval: 8s
    static_configs:
     - targets: ['192.168.50.218:9100']
       labels:
         instance: node

  - job_name: 'cadvisor'
    static_configs:
     - targets: ['192.168.50.218:8899']
     labels:
         instance: cadvisor

  - job_name: 'redis_exporter'
    static_configs:
      - targets: [ '192.168.50.218:9121' ]
        labels:
          instance: redis

  - job_name: 'mysql_exporter'
    static_configs:
      - targets: [ '192.168.50.218:9104' ]
        labels:
          instance: mysql

docker-compose.yml以及prometheus.yml文件都准备好后,在当前目录下创建一个run.sh的脚本,方便快速启动服务,不用这个脚本,用脚本中的命令也可以。

run.sh

#!/usr/bin/env bash
docker-compose down
docker-compose rm
docker-compose up -d --build

全部启动后

cd ~/data/prometheus

docker-compose ps

img

启动成功,后就可以访问:

  • http://192.168.50.218:9090 :prometheus的原生web-ui
  • http://192.168.50.218:3000 :Grafana开源的监控可视化组件页面,默认用户及密码为admin
  • http://192.168.50.218:9100 :收集服务器(node-exporter)的metrics
  • http://192.168.50.218:8899 :收集docker(cadvisor)的metrics
  • http://192.168.50.218:9100 :收集redis(redis-exporter)的metrics
  • http://192.168.50.218:9104 :收集mysql(mysql-exporter)的metrics

打开 http://192.168.50.218:9090/targets ,如果State都是UP即代表Prometheus工作正常,如下图所示:

img

三、服务配置

1、配置数据源

首先,服务启动后,要让prometheus的数据能被Grafana访问,那么就需要打开Grafana页面(http://192.168.50.218:3000 ),默认用户及密码均为admin,并在Grafana页面中配置prometheus的数据来源。

img

配置好数据源后,就可以配置对应监控模板。

2、配置服务器监控

本次要导入的模板:https://grafana.com/grafana/dashboards/11074,模板ID:11074

img

Grafana页面(http://192.168.50.218:3000 ),然后选择import导入模板

img

然后,填写模板的名称(名称随意取),接着,选择数据源为prometheus

img

最后,点击import导入模板,结果如图:

img

可以看到node-exporter把获取的数据信息,展示在了Grafana页面。

3、配置容器监控

本次要导入的模板:https://grafana.com/grafana/dashboards/893,模板ID:893

img

Grafana页面(http://192.168.50.218:3000 ),然后选择import导入模板

img

然后,填写模板的名称(名称随意取),接着,选择数据源为prometheus

img

最后,就可以看到,收集docker(cadvisor)的metrics信息,并展示在grafana页面。

img

4、配置redis监控

本次要导入的模板:https://grafana.com/grafana/dashboards/11835,模板ID:11835

Grafana页面(http://192.168.50.218:3000 ),然后选择import导入模板

img

5、配置mysql监控

本次要导入的模板:https://grafana.com/grafana/dashboards/7362,模板ID:7362

img

四、参考

1、docker-compose 搭建 Prometheus+Grafana监控系统 :https://www.cnblogs.com/qdhxhz/p/16325893.html

2、jmeter压测练习:https://github.com/princeqjzh/iJmeter

3、dbeaver下载:https://dbeaver.io/download/

4、mysql监控:https://www.prometheus.wang/exporter/use-promethues-monitor-mysql.html