背景意义


线上服务监控的意义在于避免在服务发生异常时无法及时察觉以及处理而造成更大的损失,今天主要介绍一种服务监控的开源工具,Prometheus以及Grafana的组合,Prometheus用于刮取服务性能等指标信息,Grafana设置Prometheus数据源后使用Prometheus刮取到的数据进行图标绘制,Prometheus还支持对jvm、linux等常见服务的监控,本文使用Docker的方式部署监控服务,实现对MySQL的日常指标监控

一、效果

由上图可看到,对于MySQL的一些常关注的性能指标以可观的图形化形式描绘出来了,如常见的QPS、连接数、线程并发数等信息都能很容易的监控到,因为是个例子,所以就暂时只展示部分监控数据,实际Grafana官方提供了很多不错的绘制模版,可以监控更多实用数据,如网络流量、锁、内存等信息,感兴趣的可以参考官网,文档都很详细,这里就不再赘述,下面开始就简单介绍这个监控流程的部署过程,仅供参考

二、Prometheus的部署

1.拉取镜像:docker pull prom/prometheus

2.准备配置文件prometheus.yml,在Docker容器启动的选择挂载

global:
  scrape_interval: 15s
  evaluation_interval: 15s
rule_files:
  # - "first.rules"
  # - "second.rules"
scrape_configs:
  - job_name: prometheus 
    static_configs: 
      - targets: ['localhost:9090']
  - job_name: mysql
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.2.91:9104']

上述是写在prometheus.yml的配置,主要包含3个一级标签(蓝色),第一个global是配置全局配置,声明了默认的全局配置为15s刮取计算一次获取到的目标指标信息,第二个rule_files是配置告警规则需要使用到的标签,这里暂不配置告警规则,故先注释掉,第三个scarpe_configs是对刮取目标的配置,只要目标对象暴露了指标信息在某个地址和端口,这里配置上后prometheus就可以在对于的目标地址和端口刮取到指标信息,这里配置2个job(橙色),一个是prometheus自身的指标信息暴露地址,另一个是mysql的指标信息暴露地址

3.准备好配置文件后启动容器(-v指定环境变量,prometheus.yml在/root/mycfg目录下)

docker run --name prometheus -p 9090:9090 -v /root/mycfg:/etc/prometheus --restart=always -d prom/prometheus

启动后访问http://hostip:9090,能正常访问到prometheus的web端就表示已部署完成

三、MySQL Exporter部署

上面说到,prometheus配置job的时候是根据某个对象的暴露地址和端口进行性能指标的数据刮取的,所以这里介绍的MySQL Exporter就是一个mysql性能指标的暴露者,可以看成是一个轻量级的工具组件,这个组件从mysql服务中获取到性能指标信息,并将这些信息转换成prometheus的数据格式然后在某个地址端口暴露出去,这里同样也是使用docker的方式部署这个组件

1.拉取镜像:docker pull prom/mysqld-exporter

2.在mysql中创建一个监控使用的账号并授权:

create user 'exporter'@'%' identified by '123';
grant process,replication client on *.* to exporter@'%';
grant select on performance_schema.* to exporter@'%';

3.启动容器

这里需要说明一下,因为mysql使用的是docker方式运行,所以mysql export在容器启动是通过–link参数带上mysql容器id来关联mysql容器,另外,端口是mysql容器内部端口3306,不是转换到外部的映射端口

docker run --name mysql8-exporter -p 9104:9104 --link=<mysql容器ID> -e DATA_SOURCE_NAME="exporter:123@(<mysql容器ID>:3306)/" -d prom/mysqld-exporter

启动后,访问 http://hostip:9104/metrics,如果能查看到暴露的指标信息且mysql_up指标信息=1,则说明获取监控指标信息正常,接着在访问prometheus的web控制台,看看prometheus是否正常刮取到了mysql的指标信息,如数据参数mysql_up,看看prometheus是否获取得到,如果也能正常获取,那基于prometheus的mysql监控以及完成,剩下的只需要部署grafana将获取到的数据可视化的绘制出来就可以了

四、Grafana部署

1.拉取镜像:docker pull grafana/grafana

2.启动容器:docker run –name=grafana -p 3000:3000 –restart=always -d grafana/grafana

3.设置

  1. 访问http://hostip:3000,默认用户名密码是admin/admin(若错误可重新参考官网文档)
  2. 登陆控制台后,设置数据源为prometheus
    • URL填Prometheus地址:http://hostip:9090
    • Access访问方式选择浏览器方式:Browser
  3. 保存设置后就可以绘制自己的性能监控图表了,这里提供一个官方的mysql监控模版ID:7362,可以在create–>import处输入这个模版id后load直接加载使用
  4. 官方模版搜索参考地址:https://grafana.com/grafana/dashboards

五、总结

prometheus是一款强大的开源监控工具,除了对mysql的监控应用,常见的还有linux、jvm等监控,另外其还有还有告警功能,只不过本文没有展示,感兴趣的同学可以参考一下官网。

发表评论

您的电子邮箱地址不会被公开。