-
Prometheus Operator提供k8s service 和 deployment 监控的定义,并且管理普罗米修斯实例的部署
Prometheus Operator具体做了什么
-
执行完整 Kube-Prometheus 的初始安装和配置
-
Prometheus servers
-
Alertmanager
-
Grafana
-
Host node_exporter
-
kube-state-metrics
-
-
使用ServiceMonitor实体定义监控指标endpoint,并自动配置到prometheus中
-
使用 Operator CRD 和 ConfigMap 自定义和扩展服务,使我们的配置完全可移植且具有声明性
Operator 定义了下面的CRD
-
Prometheus,它定义了所需的 Prometheus 部署。
-
ServiceMonitor,它以声明方式指定应如何监视服务组,以前是用job发现目标,但现在用SM。
-
PrometheusRule,它定义了所需的 Prometheus 规则文件,该文件可由包含 Prometheus 警报和记录规则的 Prometheus 实例加载。
-
Alertmanager,它定义了所需的 Alertmanager 部署。
-
Operator 存储库中的kube-prometheus目录包含默认服务和配置,因此您不仅可以获得 Prometheus Operator 本身,还可以获得完整的设置,您可以从一开始就开始使用和自定义。
架构图
ServiceMonitor作用
-
ServiceMonitor 描述了 Prometheus 监视的目标集,跟job作用差不多。
-
如果存在与 ServiceMonitor 条件匹配的新指标端点,则此目标将自动添加到选择该 ServiceMonitor 的所有 Prometheus 服务器。
-
ServiceMonitor 的目标是 Kubernetes 服务,而不是 pod 直接公开的端点
-
按命名空间、标签等过滤端点
-
定义不同的抓取端口
-
定义所有额外的抓取参数,如抓取间隔、使用的协议、TLS 凭证、重新标记策略等。
使用serviceMonitor采集我们自定义的指标
编写 myPod_serviceMonitor
-
endpoints代表最后采集的targets
-
interval采集间隔
-
port 采集端口
-
scheme采集协议
-
-
jobLabel: app.kubernetes.io/name 的意思是最后job标签使用这个标签的value
-
namespaceSelector代表过滤哪个ns下的svc
-
selector代表svc的标签选择器
举例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app.kubernetes.io/name: ink8s-pod-metrics
name: example-pod-metrics #sm名称
namespace: monitoring
spec:
endpoints:
- interval: 15s
port: https-self
scheme: http
jobLabel: app.kubernetes.io/name
namespaceSelector: #匹配命名空间
matchNames:
- default
selector:
matchLabels: #匹配标签
app.kubernetes.io/name: example-pod-metrics
编写 myPod_svc
-
在default ns下的svc
-
打上标签app.kubernetes.io/name: example-pod-metrics 和上面的serviceMonitor对应
-
端口和容器端口对应上,端口名字和上面的serviceMonitor对应
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: example-pod-metricsname: example-pod-metrics
namespace: default
spec:
clusterIP: None
ports:
- name: https-self
port: 8080
targetPort: 8080
selector:
app: example-pod-metrics
然后 example-pod-metrics 下的pod指标就会被SM收集到传到Prometheus
使用PrometheusRule添加自定义指标的告警规则
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
labels:
app.kubernetes.io/name: example-pod-metrics
prometheus: k8s
role: alert-rules
name: example-pod-metrics-k8s-prometheus-rules
namespace: monitoring
spec:
groups:
- name: example-pod-metrics-k8s-prometheus-rules01
rules:
- alert: pod_control_plane_pod_detail01
annotations:
description: Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed to reload its configuration.
runbook_url: https://github.com/prometheus-operator/kube-prometheus/wiki/prometheusbadconfig
summary: test
expr: |
example_pod_metrics_get_pod_control_plane_pod_detail > 0 #这里写告警规则
for: 1m
labels:
severity: critical
-
上面元信息中的标签要和prometheus-prometheus.yaml里的 ruleSelector对应上
-
prometheus: k8s
-
role: alert-rules
-
prometheus-prometheus.yaml下的:
ruleSelector:
matchLabels:
prometheus: k8s
role: alert-rules