Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。
Prometheus是使用Go语言开发的,是GoogleBorgMon监视系统的开源版本。年,Google在Linux基金会的领导下创立了CloudNativeComputingFoundation,并将Prometheus列为其第二大开源项目。Prometheus当前在开源社区中非常活跃。Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取群集性能数据。)与更完整和更全面的功能相比。Prometheus的性能也足以支持数以万计的集群。
1.系统架构图2.基本原理Prometheus的基本原理是通过HTTP协议定期捕获受监视组件的状态。只要提供相应的HTTP接口,任何组件都可以访问监视。不需要SDK或其他集成过程。这非常适用于虚拟化环境监视系统,例如VM,Docker,Kubernetes等。输出监视的组件信息的HTTP接口称为导出器。当前,Internet公司的大多数常用组件都具有可以直接使用的导出程序,例如Varnish,Haproxy,Nginx,MySQL,Linux系统信息(包括磁盘,内存,CPU,网络等)。
常规工作流程是:
Prometheus服务器定期从已配置的作业或导出器中提取指标,或从Pushgateway接收指标,或从其他Prometheus服务器中提取指标。
Prometheus服务器在本地存储收集的指标并运行定义的alert.rules来记录新的时间序列或将警报推送到Alertmanager。
Alertmanager根据配置文件处理收到的警报并发出警报。
在Grafana图形界面中,直观地查看收集的数据。
3.Prometheus的特性多维数据模型。
灵活的查询语言。
在不依赖分布式存储的情况下,单个服务器节点是自治的。
时间序列数据是通过基于HTTP的pull方法收集的。
时间序列数据可以通过中间网关推送。
通过服务发现或静态配置发现目标服务对象。
支持各种图表和界面显示,例如Grafana等。
4.Prometheus的组件PrometheusServer主要负责数据收集和存储,并提供对PromQL查询语言的支持。
Alertmanager警报管理器,用于发出警报。
推送网关支持中间网关,该网关主动推送临时作业的指示器。
导出程序HTTP接口,用于输出受监视的组件信息。
Grafana监视数据显示在WebUI上。
5.服务发现
由于Prometheus通过Pull主动获取监视数据,也就是说,它每隔几秒钟就会从每个目标收集指标。因此,您需要手动指定监视节点列表。当受监视的节点数增加时,每次添加节点时都需要更改配置文件。尽管您可以使用该界面来热更新配置文件,但这仍然很麻烦。这时,您需要通过服务发现(serviceDiscovery,SD)机制来解决。
Prometheus支持多种服务发现机制,这些机制可以自动获取要收集的目标。服务发现机制包括:azure,consul,dns,ec2,openstack,文件,gce,kubernetes,马拉松,triton,zookeeper(神经,服务器集),配置方法可参考手册的配置页面。可以说SD机制非常丰富,但是由于开发资源有限,因此不再开发新的SD机制,仅维护基于文件的SD机制。鉴于我们现有的系统情况,我们选择了静态配置方法。
二、部署PrometheusServer1.使用官方镜像运行由于Prometheus官方映像不具有热重装功能,并且时区相隔八个小时,因此我们选择自己制作映像。当然,您也可以使用正式映像预先创建Prometheus配置文件prometheus.yml和Prometheus规则文件rules.yml,然后将其安装到正式映像并使用以下命令运行它:
dockerrun-d-p:--name=prometheus\-v/root/prometheus/conf/:/etc/prometheus/\prom/prometheus
对于官方映像部署,请参阅我的文章:Docker部署Prometheus来实现