0x00 Prometheus容器监控解决方案
Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。它是一个独立的开放源码项目,并且独立于任何公司。不同于传统的运维监控工具,Prometheus是面向容器和微服务的监控系统,采用基于时间序列的存储方式,监控采集更加精确,监控频率更高,和容器和微服务兼容性更好。随着目前容器和微服务的使用日趋广泛,Prometheus的应用范围将会越来越广。
0x01 Prometheus架构
Prometheus是面向容器和微服务的监控系统,对容器和微服务的兼容性好。
服务器通过Pull模型以http协议监控数据,监控精确,监控频率高。
图形数据化展示通过Grafana展示,采用专业的数据函数和公式,将数据以更精准和可读的方式展现出来。
报警方式通过AlertManager输出,兼容目前市场是主流的报警方式,例如微信,电话,邮件等。
下面这张图说明了Prometheus的整体架构,以及生态中的一些组件作用:
0x02 Prometheus主要特征和优势
Prometheus的主要特征有:
- 多维度数据模型
- 灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过pull模型拉去时间序列数据
- 也通过中间网关支持push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示,grafana也支持它
Prometheus相对比其他监控的优势:
- 监控数据的精细程度高,采集精度可以达到1~5s
- 集群部署速度和监控脚本制作快,大大缩短监控搭建的时间成本
- 开源软件更新快,bug修复快,周边插件丰富,到手即用,支持多种客户端开发语言
- 本身基于数学计算模型,直接使用数学公式和数学函数,可以实现很复杂的业务逻辑监控(例如QPA曲线的弯曲、凸起,下跌的比例等模糊概念)
- 结合Grafana展示图形,效果美观实用
- 特别针对目前流行容器监控适配,采集深度大
Prometheus生态包括了很多组件,它们中的一些是可选的:
- 主服务Prometheus Server负责抓取和存储时间序列数据
- 客户库负责检测应用程序代码
- 支持短生命周期的PUSH网关
- 基于Rails/SQL仪表盘构建器的GUI
- 多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式
- 警告管理器
- 命令行查询工具
- 其他各种支撑工具
- 多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署
0x03 Prometheus配合Grafana和AlertManager实现数据展示和多渠道报警
Grafana展示Prometheus监控的数据
如下是Prometheus支持的报警渠道,支持邮件,Pageduty,Wehooks,微信等。
# Configurations for several notification integrations.
email_configs:
[ - <email_config>, ... ]
hipchat_configs:
[ - <hipchat_config>, ... ]
pagerduty_configs:
[ - <pagerduty_config>, ... ]
pushover_configs:
[ - <pushover_config>, ... ]
slack_configs:
[ - <slack_config>, ... ]
opsgenie_configs:
[ - <opsgenie_config>, ... ]
webhook_configs:
[ - <webhook_config>, ... ]
wechat_configs:
[ - <wechat_config>, ... ]