Prometheus+Grafana搭建监控系统 引入exporter

前置条件与搭建系统时候一致,需要安装docker-compose和建立网桥。

新建mysql用户

首先mysql-exporter建议我们使用权限控制的用户,所以我们需要创建一个用户。

可以通过navicat使用root用户进行创建,如果配置有root用户无法远程连接,可以进入mysql容器中进行创建用户或使用有权限的其他用户进行创建。

docker进入mysql容器命令:

#进入容器名为mysql的容器:
docker exec -it mysql bash
#使用root登录mysql
mysql -u root -p

然后执行以下创建用户的sql

/*1.创建用户readuser 最大连接数3*/
create user 'readuser'@'%' identified by 'password' WITH MAX_USER_CONNECTIONS 3 ; 

/*2.赋予用户readuser某个库的权限
*特别的权限:ALL: 允许做任何事(和root一样)。
*USAGE: 只允许登录--其它什么也不允许做。
*/
grant PROCESS, REPLICATION CLIENT, SELECT on *.* to 'readuser'@'%' ;

/*3.刷新权限*/
flush privileges;

/*4.查看MySQL某个用户的权限*/
show grants for 用户名

/*5.如果权限赋予错误可以撤销用户权限:
REVOKE  ALL PRIVILEGES  ON `库名`.* FROM  'readuser'@'%';
编写docker-compose-exporter.yml

docker-compose-exporter.yml文件如下:

version: '2'
services:
  exporter:
    container_name: mysql-exporter #这个是监控mysql的插件
    image: prom/mysqld-exporter
    environment:
      # 这里指定的是要监控的 MySQL 数据库,这里我们以启动的容器(mysql)为示范。
      # 配置具体的数据库实例。这边改成刚刚创建的mysql用户
      - DATA_SOURCE_NAME=username:password@(mysql:3306)/
    ports:
      - 9104:9104
    
  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    container_name: node_exporter #引入监控CPU、内存、磁盘IO、网络、温度等指标的插件
    command:
      - '--path.rootfs=/host'
    network_mode: projectDocker
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'

networks:
  default:
    external:
      name: projectDocker

参考文档:

node_exprter:

https://github.com/prometheus/node_exporter

mysqld-exporter:

https://github.com/prometheus/mysqld_exporter

prometheus官网exporters:

https://prometheus.io/docs/instrumenting/exporters/

prometheus引入exporter

还记得之前搭建Prometheus+Grafana监控系统时挂载的Prometheus配置文件prometheus-standalone.yaml吗?

接下来我们需要将插件配置进此文件之中,加入新的job_name

global:
  scrape_interval:     15s
  evaluation_interval: 15s
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    scheme: http
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ['prometheus:9090']
      
  - job_name: 'mysql-exporter'
    scrape_interval: 15s # 抓取间隔
    static_configs:
      - targets: ['mysql-exporter:9104']
      
  - job_name: 'grafana_metrics'
    scrape_interval: 15s
    scrape_timeout: 5s
    basic_auth:
      username: grafana 
      password: grafana 
    static_configs:
      - targets: ['grafana:3000']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node_exporter:9100']
上传compose文件,并运行
sudo docker-compose -f docker-compose-exporter.yml up -d
可以前往ip:9090查看prometheus界面中这三个配置的实例是否在线,登录默认无用户

Grafana默认用户名和密码 grafana用户权限_Grafana默认用户名和密码


6. ###### 进入ip:3000,登录grafana,配置数据源并创建仪表盘查看监控信息

创建数据源,选择prometheus数据源

Grafana默认用户名和密码 grafana用户权限_docker_02

配置prometheus数据源

Grafana默认用户名和密码 grafana用户权限_Grafana默认用户名和密码_03

最后点击下方的save&test查看配置是否成功,如果报错请仔细查看前面步骤是否错误,建议进入docker容器中查看日志锁定问题所在

导入仪表盘,进行可视化监控

Grafana默认用户名和密码 grafana用户权限_Grafana默认用户名和密码_04

我在这边导入node-exporter插件的仪表盘是8919,导入的mysql仪表盘12826

参考:

prometheus查看可导入线上仪表盘:

https://grafana.com/grafana/dashboards?dataSource=prometheus

node-exporter:

https://grafana.com/grafana/dashboards/8919

https://github.com/starsliao/Prometheus

mysql–exporter:

https://grafana.com/grafana/dashboards/12826

查看刚刚导入的仪表盘

Grafana默认用户名和密码 grafana用户权限_docker_05

Grafana默认用户名和密码 grafana用户权限_docker_06