背景
在之前公司搭建测试环境过程中会安装mysql、redis、kafak等数据库,在测试环境使用过程中经常会遇到服务挂了等问题,经过分析是因为数据库无法连接成功或者数据打满等异常问题。
所以我们将测试环境监控纳入了测试环境搭建体系的一环,我们期望通过监控大盘来看各种数据库中间件,并且提供异常报警能力。
如下是Prometheus Grafana exporter的监控架构体系:
Prometheus
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。
Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。
与其他监控系统相比,Prometheus的主要特点是:
- 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
- 非常高效的存储,平均一个采样数据占 3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
- 一种灵活的查询语言。
- 不依赖分布式存储,单个服务器节点。
- 时间集合通过HTTP上的PULL模型进行。
- 通过中间网关支持推送时间。
- 通过服务发现或静态配置发现目标。
- 多种模式的图形和仪表板支持。
Grafana
Grafana 是一个开源的监控数据分析和可视化套件。最常用于对基础设施和应用数据分析的时间序列数据进行可视化分析,也可以用于其他需要数据可视化分析的领域。Grafana 可以帮助你查询、可视化、告警、分析你所在意的指标和数据。可以与整个团队共享,有助于培养团队的数据驱动文化。
Grafana的主要特点是:
- Grafana拥有快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式,让我们复杂的数据展示的美观而优雅。
- Grafana支持许多不同的时间序列数据(数据源)存储后端。每个数据源都有一个特定查询编辑器。官方支持以下数据源:Graphite、infloxdb、opensdb、prometheus、elasticsearch、cloudwatch。每个数据源的查询语言和功能明显不同。你可以将来自多个数据源的数据组合到一个仪表板上,但每个面板都要绑定到属于特定组织的特定数据源
- Grafana中的警报允许您将规则附加到仪表板面板上。保存仪表板时,Gravana会将警报规则提取到单独的警报规则存储中,并安排它们进行评估。报警消息还能通过钉钉、邮箱等推送至移动端。但目前grafana只支持graph面板的报警。
- Grafana使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
- Grafana使用Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询
启动grafana
代码语言:javascript复制docker run -d -p 3000:3000 grafana
grafana地址: http://127.0.0.1:3000,登录账号密码:admin/admin。
grafana配置
在grafana中配置Prometheus数据源,需要输入Prometheus参数。
explorer
广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:
以我们已经使用过的Node Exporter为例,由于操作系统本身并不直接支持Prometheus,同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。因此,用户只能通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。这些Exporter程序扮演了一个中间代理人的角色。
mongodb_exporter
下载镜像,使用aliyuncs镜像可以提高下载速度。
下载命令:
代码语言:javascript复制docker pull f1z25q5p.mirror.aliyuncs.com/elarasu/mongodb_exporte
部署命令如下,需要mongo的账号、密码等链接参数。
代码语言:javascript复制docker run -d --name mongo-explorer -p 9106:9104 f1z25q5p.mirror.aliyuncs.com/elarasu/mongodb_exporter --mongodb.uri=mongodb://帐号:密码@IP:端口/db名字
部署成功后,mongodb_exporter就开始采集mongo的数据了。
可以选择grafana面板展示mongodb数据
代码语言:javascript复制https://grafana.com/dashboards/2583
展示效果如下图:
kafka_exporter
可以使用kafka_exporter监控kafka数据,配置方法如下:
首先,在kafka_exporter到服务器上并且解压安装包。
代码语言:javascript复制wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-amd64.tar.gz
tar -zxvf kafka_exporter-1.2.0.linux-amd64.tar.gz
启动kafka_exporter
代码语言:javascript复制cd kafka_exporter-1.2.0.linux-amd64
./kafka_exporter --kafka.server=kafkaIP或者域名:9092 &
ss -tunl
或者后台启动
代码语言:javascript复制nohup ./kafka_exporter --kafka.server=10.30.130.96:9092 &
可以使用命令查看kafka_exporter进程已经存在。
代码语言:javascript复制ps -ef | grep kafka_exporter
netstat -ntlp | grep 28849
在Prometheus.yml文件配置kafka数据源地址,然后重启Prometheus。
代码语言:javascript复制 - job_name: 'kafka'
static_configs:
- targets: ['kafkaIP或者域名:9308']
labels:
instance: kafka@kafkaIP或者域名
配置完成后,再选择kafka_exporter的grafana面板。
代码语言:javascript复制https://grafana.com/dashboards/7589
下图是grafana的监控效果,会展示各个topic的情况。
mysqld-exporter
使用mysqld-exporter监控mysql
数据库信息收集exporter,DATA_SOURCE_NAME的格式
代码语言:javascript复制DATA_SOURCE_NAME="用户名:密码@(mysqlip:port)"
启动命令配置如下:
代码语言:javascript复制docker run -d -p 9105:9104 -e DATA_SOURCE_NAME="用户名:密码@(mysqlip:port)/" prom/mysqld-exporte
grafana的监控面板选择如下:
代码语言:javascript复制https://grafana.com/dashboards/7362
redis_exporter
使用redis_exporter监控redis
下载镜像
代码语言:javascript复制docker pull oliver006/redis_exporter
启动命令
代码语言:javascript复制docker run -d
--name redis_exporter
-p 9121:9121
oliver006/redis_exporter --redis.addr redis://192.168.1.237:8899
grafana的监控面板选择如下:
代码语言:javascript复制https://grafana.com/dashboards/2751
结语
使用Prometheus Grafana exporter三剑客就可以完成测试环境的数据库监控,但是如果是监控生产环境还是需要专业的运维同学来搭建,大概的架构是差不多的,只不过生产环境的配置更加复杂一些。