Prometheus 监控MySQL使用grafana展示


Posted in MySQL onAugust 30, 2021

prometheus通过exporter监控mysql,并用grafana图表展示

概述:

prometheus是由SoundCloud开发的开源监控告警系统并且自带时序数据库,基于Go语言。Prometheus根据配置的任务(job)以周期性pull的方式获取指定目标(target)上的指标(metric)。

Prometheus 监控MySQL使用grafana展示

Prometheus 生态圈中包含了多个组件:

  • Prometheus Server: 根据配置完成数据采集, 服务发现以及数据存储。
  • Push Gateway : 为应对部分push场景提供的插件,监控数据先推送到 Push Gateway 上,然后再由 Prometheus Server 端采集 pull 。用于存在时间较短,可能在 Prometheus 来 pull 之前就消失了的 jobs (若 Prometheus Server 采集间隔期间,Push Gateway 上的数据没有变化, Prometheus Server 将采集到2次相同的数据,仅时间戳不同)
  • Exporters(探针): 是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
  • Alertmanager: Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到Alertmanager,Alertmanager则是根据配置处理告警信息并发送。常见的接收方式有:电子邮件,webhook 等。Alertmanager三种处理告警信息的方式:分组,抑制,静默。

接下来开始演示

1、测试机器

prometheus-server 192.168.56.140
MySQL host01 192.168.56.103
MySQL host02 192.168.56.104

 2、配置mysql host01

MySQL使用版本:

8.0.25 MySQL Community Server

3、创建exporter帐号

mysqld_exporter通过查询mysql的状态表及状态命令获取数据。所以,需要先在mysql内,创建相应帐号

create user 'exporter'@'%' identified by 'Xiaopang*803';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
flush privileges;

4、下载,安装mysqld_exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz
tar xvzf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local && ln -s mysqld_exporter-0.13.0.linux-amd64/ mysqld_exporter

4.1 编辑文件输入密码

编缉如下文件,输入exporter用户句与密码(与前面mysql内创建的帐号密码一致)

[root@host01 mysqld_exporter]# vi .my.cnf
[client]
user=exporter
password=Xiaopang*803

4.2 添加启动服务文件

[root@host01 ~]# vi /etc/systemd/system/mysqld_exporter.service

[Unit]
Description=mysqld_exporter
After=network.target

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

[Install]
WantedBy=multi-user.target

 4.3 启动mysqld_exporter

service mysqld_exporter start

4.4 测试验证

mysqld_exporter默认使用9104端口,我们可以在浏览器内输入如下地址。查看是否有数据输出。

输入 http://192.168.56.103:9104/metrics

输出信息类似如下:

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.5395e-05
go_gc_duration_seconds{quantile="0.25"} 3.5372e-05
go_gc_duration_seconds{quantile="0.5"} 3.9393e-05
go_gc_duration_seconds{quantile="0.75"} 5.5068e-05
go_gc_duration_seconds{quantile="1"} 0.062537624
go_gc_duration_seconds_sum 0.453204071
go_gc_duration_seconds_count 2131
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge

5、下载,安装node_exporter

如果只安装mysqld_exporter则无法监控OS相关的数据,所以需要安装node_exporter进行OS监控。

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

tar xvzf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local && ln -s node_exporter-1.2.2.linux-amd64/ node_exporter

5.1 添加启动服务文件

[root@host01 ~]# vi /etc/systemd/system/node_exporter.service
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

 5.2 启动node_exporter

service node_exporter start

5.3 测试验证

node_exporter默认使用9100端口,我们可以在浏览器内输入如下地址。查看是否有数据输出。

输入 http://192.168.56.103:9100/metrics

输出结果类似如下:

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.5934e-05
go_gc_duration_seconds{quantile="0.25"} 4.0072e-05
go_gc_duration_seconds{quantile="0.5"} 4.7616e-05
go_gc_duration_seconds{quantile="0.75"} 6.726e-05
go_gc_duration_seconds{quantile="1"} 0.228887598
go_gc_duration_seconds_sum 0.550266258
go_gc_duration_seconds_count 793
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge

6、安装prometheus+grafana

 使用版本:

prometheus 2.28

grafana 6.7.6

6.1 安装

下载软件包

wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz

6.2 解压并添加软链接

tar xvzf prometheus-2.28.1.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local/
ln -s prometheus-2.28.1.linux-amd64/ prometheus

6.3 增加启动服务

[root@prometheus-server prometheus]# vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
Documentation=Prometheus Monitoring System

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path="data/" \
--storage.tsdb.retention.time=15d \
--web.max-connections=512 \
--web.listen-address=:9090

 6.4 添加mysql监控

vi /usr/local/prometheus/prometheus.yml

scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: 'mysql'
    static_configs:
      - targets: ['192.168.56.103:9104']
        labels:
          instance: mysql_instance1
  - job_name: 'linux'
    static_configs:
      - targets: ['192.168.56.103:9100']
        labels:
          instance: mysql_instance1

6.5 启动prometheus

service prometheus start

6.7 查看prometheus

prometheus默认监控端口

http://192.168.56.140:9090/

点击status->target。如果一切正常,可以看到如下mysql/linux的state为UP

Prometheus 监控MySQL使用grafana展示

7、下载,安装grafana

wget https://dl.grafana.com/oss/release/grafana-6.7.6-1.x86_64.rpm

rpm -ivh grafana-6.7.6-1.x86_64.rpm

7.1 访问grafana

prometheus的展示功能很弱,为了更好的进行图形展示,所以我们需要grafana

输入 http://192.168.56.140:3000/

配置data source为proemtheus的HTTP链接(注意是HTTP,而不是HTTPS)

Prometheus 监控MySQL使用grafana展示

Prometheus 监控MySQL使用grafana展示

 7.2导入mysql监控模板

Prometheus 监控MySQL使用grafana展示

grafana数据的展示是通过模板实现的。grafana网站上面有很多共享的模板,你可以自行探索。

本例模板,我是从如下链接下载的。

https://grafana.com/api/dashboards/9623/revisions/4/download

版本不匹配问题

因为版本不太匹配的原因,完成后有些项目如法正常显示。它使用的版本是grafana5.0版本,我的是6.x版本。

但是这点小问题,难不倒我,我自己修改了一下。就能正常显示了,如下是修改后的JSON文件。

josn_jb51.rar

修改过程

很多时候,很多东西并不完全能拿来即用。我们需要根据自己的需要进行一些修改。

接下来大概花了半个多小时,弄清楚了如何修改了。而后大概又花了两小时,修改完成的相应的项目。

修改过程中,碰到的问题,主要就两类:

   1)grafana 5.x和6.x组件的名称发生了变化。

"Buffer Pool Size of Total RAM"无法正常显示,原因是6.0和5.0组件名不同。

替换 pmm-singlestat-panel  -> singlestat搞定

   2)exporter提取的属性名字发生了变化

我用的是node_exporter-1.2.2,这里面关于OS提取的属性与JSON文件的定义属性名不匹配。

方法是直接在“http://192.168.56.103:9100/metrics”里面搜索新的属性名,替换JSON文件里面的旧的属性名。

例如:

替换 node_memory_MemTotal->node_memory_MemTotal_bytes
替换 node_memory_MemTotal->node_memory_MemTotal_bytes

进行导入

因为我进行了一些修改,你可以import的时候,直接把JSON的内容输入进去。

Prometheus 监控MySQL使用grafana展示

点击Load加载,接下来,选择数据源为prometheus。

Prometheus 监控MySQL使用grafana展示 

7.3 启动sysbench压测工具

开启sysbench工具的目的是通过压测生成有数据变化的图表(不然,没有流量,数据也不会动)。

这里,我从远端压测(在另一台机器host02上运行sysbench)。目的是为了生成网络流量数据。

[root@host02 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --time=9180 --mysql-host=host01 --mysql-port=3306 --mysql-user=dbusr --mysql-password=Xiaopang*803 --mysql-db=db1 --table-size=50000 --tables=15 --threads=15 --report-interval=10 run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 15
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 15 tps: 112.68 qps: 2268.92 (r/w/o: 1589.76/452.30/226.85) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 15 tps: 113.91 qps: 2282.81 (r/w/o: 1598.47/456.52/227.81) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 15 tps: 109.80 qps: 2192.95 (r/w/o: 1536.66/436.69/219.59) lat (ms,95%): 240.02 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 15 tps: 112.70 qps: 2265.36 (r/w/o: 1583.17/456.79/225.40) lat (ms,95%): 193.38 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 15 tps: 101.00 qps: 2013.42 (r/w/o: 1413.32/398.10/202.00) lat (ms,95%): 325.98 err/s: 0.00 reconn/s: 0.00

7.4查看grafana,完成后效果

这里只贴出了部分图表。

Prometheus 监控MySQL使用grafana展示

到此这篇关于Prometheus MySQL监控使用grafana展示的文章就介绍到这了,更多相关 MySQL grafana内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
数据库连接池
Apr 06 MySQL
mysql的MVCC多版本并发控制的实现
Apr 14 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
MySQL去除密码登录告警的方法
Apr 20 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 #MySQL
mysql 索引合并的使用
Aug 30 #MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 #MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 #MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 #MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 #MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 #MySQL
You might like
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
简单介绍Python中的JSON模块
2015/04/08 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python实现Linux监控的方法
2019/05/16 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
上班早退检讨书
2014/01/09 职场文书
运动会通讯稿400字
2014/01/28 职场文书
生态养殖创业计划书
2014/05/06 职场文书
网络营销计划书
2015/01/17 职场文书
公司表扬信格式
2015/05/04 职场文书
新年晚会开场白
2015/05/29 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang