1、Prometheus架构
《Prometheus架构》
2、Prometheus各模块组件作用及原理
《Prometheus各组件协作流程》
1、Prometheus核心模块:
Prometheus Server、Pushgateway、Job/Exporter、Service Discovery、Alertmanager、Dashboard。
2、Prometheus主要特点:
● 一种基于度量名和键值对的时间序列数据多维数据模型;
● 一个灵活的查询语言来利用这个维度;
● 不依赖于分布式存储;单服务器节点是自治的;
● 时间序列收集通过HTTP上的拉模型实现;
● 通过中间网关支持推送时间序列;
● 通过服务发现或静态配置发现目标;
● 图形和仪表板支持的多种模式;
3、Prometheus各模块组件作用
1、Prometheus Server
Prometheus Server包含抓取、存储和查询功能:
(1)、抓取:周期性从Job、Exporter、Pushgateway组件中通过http轮询的形式拉取监控指标数据。
(2)、存储:抓取到的监控数据通过一定的规则清理和数据整理(抓取前使用服务发现提供的relabel_configs方法,抓取后使用作业内的metrics_relabel_configs方法)。
● 本地存储:默认由TSDB存储到本地磁盘,不支持NFS。
● 远程存储:适用于存储大量的监控数据,支持OpenTSDB、InfluxDB、Elasticsearch、Graphite、CrateDB、Kakfa、PostgreSQL、TimescaleDB、TiKV等。
(3)、查询:客户端就通过PromQL语句对数据进行查询。
2、Pushgateway
Pushgateway是一种用于监控Prometheus服务器无法抓取的资源的解决方案,是可选组件,由Go语言编写,在Apache 2.0许可证下开源。应用程序主动推送指标到Pushgateway,Pushgateway接收指标,然后Pushgateway也作为target被Prometheus服务器抓取。
3、Job/Exporter
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
(1)、Exporter分为2类:
● 直接采集:Exporter直接内置了对Prometheus监控的支持,比如node、cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
● 间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。
(2)、blackbox_exporter组件作用:提供 http、dns、tcp、icmp 的监控数据采集。
应用场景:
● HTTP测试:定义 Request Header 信息,判断 Http status / Http Respones Header / Http Body 内容
● TCP测试:业务组件端口状态监听,应用层协议定义与监听
● ICMP测试:主机探活机制
● POST测试:接口联通性
● SSL证书过期时间
4、Alertmanager
Alertmanager负责整个集群的告警发送、分组、调度、警告抑制等功能。独立于Prometheus的一个告警组件,需要单独安装部署。Alertmanager不做告警规则计算。
Alertmanager支持Prometheus集群方式接入,Alertmanager可以配置为一个集群,通过服务发现动态发现告警集群中节点的上下线从而避免单点问题,Alertmanager也支持集群内多个实例之间的通信。
Prometheus Server和Alertmanager关系与区别:告警功能由Prometheus Server和Alertmanager 协同完成,Prometheus Server负责收集目标实例的指标,定义告警规则以及产生警报,并将相关的警报信息发送到Alertmanager。Alertmanager负责对告警信息进行管理 ,根据配置的接收人信息,将告警发送到对应的接收人与介质。
5、Service Discovery(kube-state-metrics)
Prometheus通过服务发现机制对云以及容器环境下的监控场景提供了完善的支持。
(1)、服务发现两种模式:
● 静态发现:通过配置文件。
● 动态发现:通过部署服务发现组件。支持服务发现组件Kubernetes、DNS、Zookeeper、Azure、EC2和GCE等。例如,Prometheus可以使用Kubernetes的API获取容器信息的变化(如容器的创建和删除)来动态更新监控对象。
(2)、kube-state-metrics组件作用:是一个为prometheus采集k8s资源数据的exporter。它基于client-go开发,轮询Kubernetes API,并将Kubernetes的结构化信息转换为metrics。
指标类别包括:
CronJob Metrics
DaemonSet Metrics
Deployment Metrics
Job Metrics
LimitRange Metrics
Node Metrics
PersistentVolume Metrics
PersistentVolumeClaim Metrics
Pod Metrics
Pod Disruption Budget Metrics
ReplicaSet Metrics
ReplicationController Metrics
ResourceQuota Metrics
Service Metrics
StatefulSet Metrics
Namespace Metrics
Horizontal Pod Autoscaler Metrics
Endpoint Metrics
Secret Metrics
ConfigMap Metrics
6、Dashboard
Web UI、Grafana、API clients统一理解为Prometheus的Dashboard。
Prometheus服务器除了内置查询语言PromQL以外,还支持表达式浏览器及表达式浏览器上的数据图形界面。实际工作中使用Grafana等作为前端展示界面,用户也可以直接使用Client向Prometheus Server发送请求以获取数据。
4、更多k8s学习资料
1、kubernetes原理精讲【基础原理+实践篇】