利用Prometheus和Grafana监控SimpleBank
从服务和基础设施上收集的度量指标发送到能够聚合和展示这些数据的系统上。这个系统会利用所收集的度量指标来提供告警功能。为了达到这一目的,使用Prometheus来收集度量指标并使用Grafana来展示这些数据。
1)Prometheus是一个开源的系统监控和告警工具箱,最初由SoundCloud公司开发,现在是一个不依赖于任何公司的独立开源项目。
2)Grafana是一款能够在Graphite、InfluxDB和Prometheus等各种度量指标数据源之上构建可视化仪表盘的工具。
Prometheus使用前提是已经有组件实现了度量指标并且提供Prometheus所需的格式。
同时使用Prometheus和StatsD两种度量指标来展示如何让两种不同的度量指标收集协议共存。StatsD是基于数据推送的工具,而Prometheus是基于数据拉取的工具,使用StatsD的系统会将数据推送到采集服务上,而Prometheus会从源系统中拉取数据。
将重点放在Prometheus的配置和Grafana上创建仪表盘,之后开始监控各个服务和事件队列。
Prometheus配置
global:
scrape_interval: 5s --- 设置Prometheus抓取所配置的目标度量指标的时间间隔
evaluation_interval: 10s
external_labels:
monitor: 'simplebank-demo'
alerting:
alertmanagers:
- static_configs:
- targets:
scrape_configs: --- 用来配置要抓取的目标
- job_name: 'statsd_exporter' --- 作为抓取配置的任务标签
static_configs:
- targets: ['statsd-exporter:9102']
labels:
exporter: 'statsd'
metrics_path: '/metrics'
- job_name: 'rabbitmq'
static_configs:
- targets: ['rabbitmq:15672'] --- 目标主机和度量指标途径拼接到一起可以确定收集度量指标所用的URL。如果默认使用http,URL是“http://rabbitmq:15672/api/metrics”
labels:
exporter: 'rabbitmq'
metrics_path: '/api/metrics'
设置Grafana
为了在Grafana系统中接收度量指标,需要设置数据源。首先,启动Grafana,可以通过3900端口访问Grafana。登录界面,输入用户名和密码都是admin。
登录成功后,点击Add Data Source选项,进入Edit data source界面。为了在Grafana中配置一个Prometheus数据源,需要将Type设置为Prometheus,然后插入Prometheus服务实例的URL,例如http://prometheus:9090。
单击Save & Test按钮,会立刻收到数据源状态的反馈信息。如果Prometheus运行正常,就可以开始使用Grafana来为收集的度量指标搭建仪表盘了。
监控基础设施度量指标:事件队列
为了配置一套监控RabbitMQ的仪表盘,需要用到json格式的配置文件。在源代码库中,找到一个grafana文件夹,RabbitMQ Metrics.json文件记录了仪表盘的布局以及所要收集的度量指标的配置信息。导入该文件后立刻便拥有了一套监控的RabbitMQ仪表盘。
导入路径页面展示了一个监控服务器运行状态的监视器,上面会显示up或者down,此外页面上以图表形式展示了每台主机上的交换(exchange)数、通道(channel)数、消费者(consumer)数量、连接数(connection)、队列数(queue)、每台主机的消息量以及每个队列的消息量。
汇总:grafana支持某个基础设施度量指标模板导入直接监控。
疑问点:grafana怎么知道哪个基础设施?
告警设置
前面已经在收集和存储度量指标了,在指定度量指标的数值背离了所谓的正常值可以发送告警信息。这可以是指定请求的处理时间增大,也可以是错误率升高,还可以是某个计数器异常增加等等。
通过网关服务提交出售订单后,会发生许多事情。这会触发许多事件消息,系统的瓶颈在于market服务处理订单发布事件的速度。在market place order队列中的消息量超过某个阈值时,设置一个告警来发送一条消息。可以配置多种通知方式:电子邮件、slack、pagerduty、pingdom、webhook等。
在告警系统中设置webhook通知,每次消息队列中的消息数超过100时,就会将告警消息通知给webhook。
同样可以使用Grafana来设置告警,并且这些告警会展示在与之相关的面板上。既可以接收告警通知,又可以查看面板上之前的告警记录。
首先添加一个通知渠道以传播告警事件。
1)单击屏幕左上角的Grafana图标。
2)在Alerting菜单中,选择Notification Channels。
3)输入渠道的名称并选择类型为webhook,然后选中Send on All Alerts选项。
4)输入接收告警服务的URL。可以使用告警服务的URL,并监听POST请求。
5)单击Send Test按钮验证该功能是否运行正常。如果正常,单击Save按钮保存这些修改信息。
在创建的RabbitMQ仪表盘下的消息队列面板上配置告警。单击Messages/Queue面板的标题会弹出一个菜单,然后选择Edit。就可以在Alert选项卡下创建告警了
在Alert Config部分,添加告警名称以及期望条件的检查频率以30s为例,接下来设置告警条件(condition)。将告警设置为在最近1min内一旦从队列A中搜集的值超过100就通知用户。
在Alert选项卡下,可以查看所配置告警的历史记录。
至此已经配置了一套收集度量指标数据的监控基础设施,这些数据包括各个服务发送的数据以及这些服务进行异步通信时所使用的核心组件(消息队列的数据)。
摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》