首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Prometheus+Grafana实现监控系统

最近在研究系统监控,把一些心得成果分享一下。

Prometheus

一款时序数据库,比较适合应用在系统监控领域,特点是丰富的插件(exporter)支持来面向多种业务及系统场景,包括告警通知等,还支持从多种数据源pull数据,并且性能还挺不错。官网https://prometheus.io/download/ 提供了多种平台的安装包,不过我很懒:

docker pull prom/prometheus

docker run -p 9090:9090 prom/prometheus

打开浏览器访问http://localhost:9090看到prometheus运行成功。

Exporter

通过菜单status--targets可以看到目前正在运行的exporter任务,exporter主要是来负责导出数据到prometheus,不过实际上是prometheus pull数据。当前只有prometheus自己的任务,我们需要加入新的任务。这里需要修改prometheus的配置文件来新增,具体位置在/etc/prometheus/prometheus.yml,修改如下:

对了,我们要先进入docker 镜像里才行,prometheus不知为何并没有/bin/bash,这里使用docker exec -it ecc /bin/sh的方式。

可以看到我一口气加入了3个exporter,并且声明了他们的地址,但目前他们还不存在,我们需要单独下载和运行这些exporter。这里,我想监控一台centos机器的系统指标,就需要node_exporter https://github.com/prometheus/node_exporter, 我还想监控一下我本机windows10系统的性能指标,就需要wmi exporter https://github.com/martinlindhe/wmi_exporter,最后我想通过sql查询的方式得到具体业务系统的数据,就需要 prometheus-sql exporter https://github.com/chop-dbhi/prometheus-sql。

我需要将他们分别部署在对应的机器上,然后运行他们即可。对于node和wmi来说还是比较简单的,直接运行即可。这里介绍一下prometheus-sql,他还需要一个额外的sql-agent来执行处理sql,按照官方的推荐:

docker pull dbhi/sql-agent

docker run -d -p 5000:5000 dbhi/sql-agent

然后就可以不管他了。

prometheus-sql需要一个queries.yml来配置数据库连接及必要的sql语句:

-num_products:

driver:mssql

connection:

host:192.168.1.100

port:1433

user:sa

password:369

database:KXI

select HotelCode as hotel_code,DataType as data_type,convert(char(10),QueueDate,120) as queue_date,count(*) as error_count from queuemessage where status='F'

group by HotelCode,DataType,convert(char(10),QueueDate,120)

interval:30s

data-field:error_count

将之放在prometheus-sql.exe同级目录即可,接下来powershell执行:

./prometheus-sql.exe -service http://localhost:5000

现在我们查看prometheus的status--targets,他们都run起来了。

我们可以在prometheus首页执行一些查询,比如执行node_memory_Active可以查看centos机器的内存使用情况,执行wmi_cs_physical_memory_bytes - wmi_os_physical_memory_free_bytes可以查看windows机器的内存占用,可以看到一个难看的图。

Grafana

图很难看,我们需要高大上一点,所以下面要祭出Grafana,依然很懒:

docker pull grafana/grafana

docker run -d -p 3000:3000 grafana/grafana

访问http://localhost:3000 看到登录页就说明run起来了。默认登录用户名密码都是admin。我们需要创建一个Prometheus的数据源:

注意点击save & test如果不报错就成功了,这是一切的基础,很重要。

接下来就是创建dashboard了,通过左边菜单的加号可以创建,Grafana提供了多种图例,这里我们尝试第一种graph,然后通过点击title找到edit进行详细设置,可以设置诸如数据源,具体的查询,告警通知等等:

可以看到我本机内存占用较高,毕竟搭建了这一整套环境。

我们还有一个查看酒店消息错误数的exporter,我们也通过grafana实现。依然是新建graph,然后进入edit模式。我们需要先将axes--mode设置为series,value设置为current,因为我的需求是查看各个酒店消息错误数的对比,并且不考虑时间轴的波动。设置后图表将变成柱状图。现在我们可以在metrics写query了:

sum(query_result_num_products) by (hotel_code)

这是一个按照酒店代码sum聚合查询。我们还需要设置legend format为{}来格式化一些横轴为纯净的酒店代码,最终效果图:

可以看到fsdh和opera1酒店的指标数据数相对较高,就显得其他酒店似乎没有错误数了?如果能有一个条件选择器过滤选择具体一些酒店是否会更好一些?grafana提供了变量功能来实现。我们需要点击右上方的settings--variables新建一个变量:

变量名为HotelCode,是基于Query方式获取,所以要指定查询的数据源,这里是Prometheus,并指定在每次进入dashboard时要Refresh一次。然后就可以写Query了,注意这里的label_values是grafana提供的,用于将具体的维度值截取出来。再往下,我们需要多选,同时也要有一个All选项来选中所有值,所以要勾选Multi-value和Include All option,最下面就是查询的预览结果,是我想要的。

回到dashboard,我们会发现界面上出现一个HotelCode筛选器,可以下拉选择一些hotelcode,但是选中也没有效果,因为我们还没有设置变量的具体应用场景。我们再次回到图表中,需要修改查询加入变量:

sum(query_result_num_products) by (hotel_code)

除了fsdh和opera1之外剩下的酒店都选中,这回看起来明朗多了。

Alert

作为一个监控系统,报警通知是必不可少的功能,grafana支持对指定维度的指标数据设置警戒值报警,报警方式丰富,从传统的email,到时下流行的钉钉,虽然没有短信方式,但也有webhook方式来自行扩展,下面我们来尝试加入一个报警通知,这里采用钉钉。

首先下载注册钉钉,然后需要创建一个团队,通过机器人管理创建自定义的webhook机器人,最后记得将发布的地址copy一下即可。

接下来就是grafana的配置了。在左侧菜单alerting--notification channels创建通知方式如下:

url填入之前复制的钉钉机器人地址。

Grafana的告警还是有一些限制的,首先只有graph的图表才支持,然后告警是指定不包含参数的查询的,所以之前例子里涉及HotelCode参数的查询都无法设置告警。这边我新建一个图表查询:

sum(query_result_num_products) by (hotel_code)

在graph的alert--alert config进行配置,我们可以给告警设置一个友好的名字,默认60s检查一次,通过conditions来设置具体的警戒值条件,在这里我设置指标值的最大值,在B查询在过去5分钟内达到12765。然后在alert--notification选择具体的通知方式和消息。

从上图看指标值明显超过警戒值,我们需要在alert--alert rules重启,60s内我的钉钉就会收到消息:

告警信息包含了基本的名字和描述,点击可跳转到对应graph页面。

最后在权限控制方面,Grafana通过role+organization可实现用户可看或编辑哪些dashboard。grafana有集成keycloak的可能,因为支持oauth2.0。

有关监控方面的技术框架还有很多值得深挖,未来先从构建我们内部使用的监控平台开始吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G0DEAU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券