Prometheus
介绍
Prometheus 是一个开源的服务端监控系统和时序数据库,提高了通用的数据模型和快捷数据采集、存储和查询接口。核心组件是Prometheus server 会定期从静态配置的监控目标或是基于服务发现自动配置的目标中进行拉去数据,当新拉取的数据大于配置的内存缓存区时,数据就会持久化到存储设备中。
每个被监控的主机都可以通过专用的export 程序提供输出监控数据的接口。
特点
- 多维数据模型:由度量名称和键值对标识的时间序列数据
- 时序数据:是在一段时间内通过反复测量二获得的观测值的集合;将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴。
- 内置时间序列数据库:Prometheus,外置数据库:openTSDB
- 支持作为数据源接入Grafana
监控体系
-
系统层
- CPU、Load、Memory、swap、disk、I/O、process
- 网络监控:网络设备、工作负载、网络延迟、丢包率
-
中间件
- 消息中间件:kafka、RocketMQ等
- web服务容器:tomcat、apache、php、spring等
- 数据库/缓存数据库:Mysql、MongoDB、redis、es等
-
应用层
- 衡量应用程序代码状态和性能
- 监控分类:
-
白盒监控:自省指标,可以自己生成指标,只要等待监控系统来采集时提供出去即可
-
黑盒监控:基于探针的监控方式,不会主动干预、影响数据 (不用实现代码,可以使用官方的,只需yml配置文件和systmd)
[root@cinder1 src]# cat /etc/systemd/system/blackbox_exporter.service [Unit] Description=blackbox_exporter After=network.target [Service] WorkingDirectory=/usr/local/blackbox ExecStart=/usr/local/blackbox/blackbox_exporter \ --config.file=/usr/local/blackbox/blackbox.yml [Install] WantedBy=multi-user.target
-
-
业务层
- 衡量应用程序的价值,如日活、转化率等
级别 | 监控什么 | exporter |
---|---|---|
网路 | 网络协议:http dns tcp icmp; | |
网路硬件:路由器、交换机等 | BlockBox Exporter、SNMP Exporter | |
主机 | 资源用量 | node Exporter |
容器 | 资源用量 | cadvisor |
应用(包括Library) | 延迟、错误、QPS内部状态 | 代码集中集成Prometheus Client |
中间件状态 | 资源用量,以及服务状态 | 代码集中集成Prometheus Client |
编排工具 | 集群资源用量,调度等 | k8s Components |
时间序列数据
-
数据来源
基于HTTP方式,从配置文件中指定的网络端点上周期性的获取数据。
-
收集数据方式
- Exporters : 工作在被监控端,周期性的抓取数据并转换为Prometheus兼容格式等待Prometheus来收集,自己不推送
- Instrumentation: 被监控对象内部自身由数据收集、监控的功能,只要等待Prometheus去收集
- Pushgateway: 短周期数据收集(5-10s)
-
获取方式
主动从Target上拉去数据,而非等待被监控端推送
组件
- Prometheus Server: 收集和存储时间序列数据
- Client Library:客户端,用于基于程序内建的测量系统
- Push Gateway:中转站,由于Server端只会使用pull的方式拉取数据,而某些节点只能使用push的方式推送数据,他们push的数据就会暂存到此,等待Server统一拉取
- Exporters:将现有的应用程序或服务的指标暴露给Server端
- Altermanager:独立的告警指示,从Server端接收到“警告通知”后,会进行去重、分组、并路由到相应的接收方,发出报警,常见的接收方式为:电子邮件、钉钉、企业微信等。
- Service Discovery:服务发现,用于动态发现待监控的目标,并支持多种服务发现机制:文件、DNS、Consul、K8s等
- grafana:跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给警告接收方。
数据流向
- Server端定期从配置好的Exporters中拉取metrics,或者接收来自Push Gateway的metrics,或从其他的Server端拉取metric。
- 在本地存储收集到的metrics,并运行定义好的alerts rules(警报规则),记录新的时间序列或者向Alert manager推送警报。
- Alertmanager根据配置文件,对比接收到的警报进行处理,发出警报。
- 在图形界面中,可视化采集数据。