mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限。
创建用户并授权
root@bjzhanjiserver:/usr/local/src# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 534 Server version: 5.6.51 MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE USER 'exporter'@'%' IDENTIFIED BY 'Prometheus'; Query OK, 0 rows affected (0.02 sec) mysql> GRANT PROCESS, REPLICATION CLIENT,SELECT ON *.* TO 'exporter'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye
安装配置mysql_exporter
[root@devops ~]# https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz [root@devops ~]# tar xvf mysqld_exporter-0.15.0.linux-amd64.tar.gz -C /usr/local/ [root@devops ~]# mv /usr/local/mysqld_exporter-0.15.0.linux-amd64 /usr/local/mysqld_exporter [root@devops ~]# cd /usr/local/mysqld_exporter [root@devops ~]# cat > .my.cnf <<EOF [client] port=3306 user=exporter password=Prometheus host=192.168.1.230 EOF [root@devops ~]# cat >/usr/lib/systemd/system/mysqld_exporter.service <<EOF [Unit] Description=Prometheus [Service] ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf Restart=on-failure [Install] WantedBy=multi-user.target EOF [root@devops mysqld_exporter]# systemctl enable mysqld_exporter Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld_exporter.service to /usr/lib/systemd/system/mysqld_exporter.service. [root@devops mysqld_exporter]# systemctl status mysqld_exporter ● mysqld_exporter.service - Prometheus Loaded: loaded (/usr/lib/systemd/system/mysqld_exporter.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@devops mysqld_exporter]# systemctl start mysqld_exporter [root@devops mysqld_exporter]# systemctl status mysqld_exporter ● mysqld_exporter.service - Prometheus Loaded: loaded (/usr/lib/systemd/system/mysqld_exporter.service; enabled; vendor preset: disabled) Active: active (running) since 六 2024-06-15 18:41:57 CST; 3s ago Main PID: 59359 (mysqld_exporter) Tasks: 4 Memory: 1.3M CGroup: /system.slice/mysqld_exporter.service └─59359 /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.462Z caller=mysqld_exporter.go:220 level=info msg="Starting mysqld_exporter" version="(v...267a6b6b)" 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.463Z caller=mysqld_exporter.go:221 level=info msg="Build context" build_context="(go=go1...gs=netgo)" 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=global_status 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=global_variables 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=slave_status 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=info_schema.innodb_cmp 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=info_schema.innodb_cmpmem 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.464Z caller=mysqld_exporter.go:233 level=info msg="Scraper enabled" scraper=info_schema....ponse_time 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.465Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9104 6月 15 18:41:57 devops mysqld_exporter[59359]: ts=2024-06-15T10:41:57.465Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9104 Hint: Some lines were ellipsized, use -l to show in full.
配置prometheus
- job_name: 'mysqld_exporter' static_configs: - targets: ['192.168.1.101:9104'] labels: app: mysqld_exporter node: node1 role: mysqld_exporter
grafana集成
- 11323
- 7362
- 17320
告警规则
[root@devops prometheus]# vim first_rules.yml - name: MySQL-Alert rules: - alert: MySQL_CPU使用率过高 expr: mysql_cpu_util * on (iid) group_right mysql_up > 70 for: 2m labels: severity: critical annotations: description: "{{ $labels.group }}_{{ $labels.name }}:MySQL当前CPU使用率:{{ $value }}% \n> {{ $labels.instance }}\n> {{ $labels.iid }}" - alert: MySQL_内存使用率过高 expr: mysql_mem_util * on (iid) group_right mysql_up > 85 for: 2m labels: severity: critical annotations: description: "{{ $labels.group }}_{{ $labels.name }}:MySQL当前内存使用率:{{ $value }}% \n> {{ $labels.instance }}\n> {{ $labels.iid }}" - alert: MySQL_磁盘使用率过高 expr: mysql_disk_util * on (iid) group_right mysql_up > 90 for: 2m labels: severity: critical annotations: description: "{{ $labels.group }}_{{ $labels.name }}:MySQL当前磁盘使用率:{{ $value }}% \n> {{ $labels.instance }}\n> {{ $labels.iid }}" - alert: MySQL_IO使用率过高 expr: mysql_io_util * on (iid) group_right mysql_up > 90 for: 2m labels: severity: critical annotations: description: "{{ $labels.group }}_{{ $labels.name }}:MySQL当前IO使用率:{{ $value }}% \n> {{ $labels.instance }}\n> {{ $labels.iid }}" - alert: MySQL_is_down expr: mysql_up == 0 for: 3m labels: severity: critical 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: critical 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: critical 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: critical 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: warning 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: warning 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: critical 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: critical 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: critical 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: critical annotations: description: "{{ $labels.group }}_{{ $labels.name }}:MySQL database is Restart. \n> {{ $labels.instance }}\n> {{ $labels.iid }}" [root@devops prometheus]# ./promtool check config prometheus.yml Checking prometheus.yml SUCCESS: 1 rule files found SUCCESS: prometheus.yml is valid prometheus config file syntax Checking first_rules.yml SUCCESS: 42 rules found [root@devops prometheus]# systemctl restart prometheus
继续阅读
评论