Prometheus之监控mysql

下载并安装mysqld_exporter

下载安装包并安装

root@mysql-01:~# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz
root@mysql-01:~# tar xf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /usr/local/
root@mysql-01:~# ln -sv /usr/local/mysqld_exporter-0.13.0.linux-amd64/ /usr/local/mysqld_exporter
'/usr/local/mysqld_exporter' -> '/usr/local/mysqld_exporter-0.13.0.linux-amd64/'

准备my.cnf

root@mysql-01:~# cat /usr/local/mysqld_exporter/my.cnf 
[client]
host=localhost
user=exporter
password=exporter

准备mysqld_exporter.service文件

cat >> /lib/systemd/system/mysqld_exporter.service << EOF
[Unit]
Descripton=mysqls_exporter server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Restart=on-failure
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/my.cnf

[Install]
WantedBy=multi-user.target
EOF

设置开机启动

root@mysql-01:~# systemctl enable mysqld_exporter.service 
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld_exporter.service → /lib/systemd/system/mysqld_exporter.service.
root@mysql-01:~# systemctl start mysqld_exporter.service
root@mysql-01:~# systemctl status mysqld_exporter.service 
● mysqld_exporter.service
     Loaded: loaded (/lib/systemd/system/mysqld_exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-11-19 15:24:28 CST; 3s ago
       Docs: https://prometheus.io/docs/introduction/overview/
   Main PID: 11039 (mysqld_exporter)
      Tasks: 4 (limit: 2245)
     Memory: 1.9M
     CGroup: /system.slice/mysqld_exporter.service
             └─11039 /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/my.cnf

创建mysql账户

mysql> CREATE USER 'exporter'@'127.0.0.1' IDENTIFIED BY 'exporter' WITH MAX_USER_CONNECTIONS 3;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

配置Prometheus

修改prometheus.yml 文件

  - job_name: "mysqld_exporter"
    static_configs:
      - targets: ['192.168.174.200:9104']

重启Prometheus服务

root@prometheus-01:~# systemctl restart prometheus.service

验证Prometheus web界面

mysql告警

mysql-alert.yaml

groups:
  - name: MySQL-Alert
    rules:
    - alert: MySQL_is_down
      expr: mysql_up == 0
      for: 3m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:MySQL database is down. \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_慢查询过多
      expr: delta(mysql_global_status_slow_queries[1m]) > 60
      for: 1m
      labels:
        severity: 警告
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:每分钟慢查询:{{ $value }} \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_当前活跃的连接数过多
      expr: mysql_global_status_threads_running > 100
      for: 1m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:当前活跃的连接数:{{ $value }} \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_当前updating状态的线程过多
      expr: mysql_info_schema_processlist_threads{state=~"updating"} > 100
      for: 1m
      labels:
        severity: 警告
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:当前updating状态的线程:{{ $value }} \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_High_QPS
      expr: irate(mysql_global_status_questions[3m]) > 30000
      for: 2m
      labels:
        severity: 警告
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:Mysql QPS:{{ $value | humanize }} \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_Too_Many_Connections
      expr: irate(mysql_global_status_threads_connected[3m]) > 1000
      for: 2m
      labels:
        severity: 警告
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:Mysql Connections:{{ $value | humanize }} \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_主从IO线程运行状态异常
      expr: mysql_slave_status_master_server_id > 0 and ON (instance) mysql_slave_status_slave_io_running == 0
      for: 1m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:MySQL Slave IO thread not running \n> {{ $labels.instance }}\n> {{ $labels.iid }}"
    
    - alert: MySQL_主从SQL线程运行状态异常
      expr: mysql_slave_status_master_server_id > 0 and ON (instance) mysql_slave_status_slave_sql_running == 0
      for: 1m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:MySQL Slave SQL thread not running \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_主从复制延迟过高
      expr: mysql_slave_status_seconds_behind_master > 3
      for: 1m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:主从复制延迟当前:{{ $value | humanize }}s \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

    - alert: MySQL_is_Restart
      expr: mysql_global_status_uptime <600
      for: 2m
      labels:
        severity: 紧急
      annotations:
        description: "{{ $labels.group }}_{{ $labels.name }}:MySQL database is Restart. \n> {{ $labels.instance }}\n> {{ $labels.iid }}"

查看告警规则

grafana监控可视化

导入模板

模板ID:14057

验证界面数据

参考文档

https://github.com/prometheus/mysqld_exporter/blob/main/mysqld-mixin/alerts/galera.yaml

posted @ 2021-11-19 15:40  小吉猫  阅读(378)  评论(0编辑  收藏  举报