Prometheus Targets
Prometheus Targets(目标) 是理解 Prometheus 工作机制最重要的概念之一。
kube-prometheus-stack所有监控数据采集,本质上都是围绕 Targets 工作。
1. 什么是 Prometheus Target?
简单定义:
Target 就是 Prometheus 定期去抓取(scrape)指标数据的一个目标地址。
例如:
Node Exporter:
http://10.0.0.17:9100/metrics
这个地址就是一个 Target。
Prometheus 会周期性访问:
GET http://10.0.0.17:9100/metrics
返回:
node_cpu_seconds_total 123456
node_memory_MemAvailable_bytes 987654
然后保存。
整个过程:
scrape
Prometheus ------------> Target
HTTP GET
/metrics
Target 返回:
cpu_usage 20
memory 80G
Prometheus保存
2. 怎么查看 Targets?
当前已经安装好了 Prometheus。
访问:
http://服务器IP:9090
进入 Prometheus 页面。
然后:
Status
|
Targets
或者直接:
http://服务器IP:9090/targets
你会看到类似:
Endpoint State
http://node-exporter:9100/metrics UP
http://kube-state-metrics:8080/metrics UP
http://kubernetes-service-endpoints UP
例如:
node-exporter
Endpoint:
http://10.42.0.5:9100/metrics
State:
UP
表示:
Prometheus 可以正常采集。
3. Target 有哪些状态?
最重要:
UP
正常:
State: UP
表示:
Prometheus访问成功。
DOWN
异常:
State: DOWN
例如:
Error:
connection refused
说明:
Prometheus想访问:
10.42.0.5:9100
但是:
-
服务没启动
-
端口错误
-
网络不通
UNKNOWN
例如:
Target UNKNOWN
通常:
配置问题。
4. Target的数据从哪里来?
这是 Kubernetes 中最关键的地方。
传统 Prometheus:
你手动配置:
prometheus.yml
例如:
scrape_configs:
- job_name: node
static_configs:
- targets:
- 10.0.0.1:9100
意思:
监控:
10.0.0.1:9100
但是 Kubernetes 不可能这么干。
因为:
Pod IP 会变化。
例如:
今天:
nginx
10.42.1.10
明天:
nginx
10.42.2.20
所以 Kubernetes 使用:
Service Discovery(服务发现)
5. kube-prometheus-stack 如何产生 Targets?
架构:
ServiceMonitor
|
|
↓
Prometheus Operator
|
↓
Prometheus配置
|
↓
Targets
你之前看到:
monitoring-kube-prometheus-operator
它就是负责这个事情。
6. ServiceMonitor是什么?
这是 kube-prometheus-stack 的核心。
例如:
kube-state-metrics:
有一个 Service:
monitoring-kube-state-metrics
ClusterIP:
10.43.158.191
port:
8080
但是 Prometheus 怎么知道?
靠:
ServiceMonitor。
查看:
kubectl get servicemonitor -n monitoring
你会看到:
类似:
NAME
monitoring-kube-state-metrics
monitoring-prometheus-node-exporter
monitoring-kube-prometheus-prometheus
例如:
kube-state-metrics 的 ServiceMonitor:
大概:
kind: ServiceMonitor
spec:
endpoints:
- port: http-metrics
selector:
matchLabels:
app:kube-state-metrics
意思:
找到:
label:
app=kube-state-metrics
的 Service。
然后抓:
http://service:8080/metrics
7. Prometheus Targets和ServiceMonitor关系
重点来了:
ServiceMonitor
|
|
↓
Prometheus Operator
|
|
↓
prometheus.yml
|
|
↓
Targets
所以:
你不要直接修改:
prometheus.yml
在 Kubernetes 中应该创建:
ServiceMonitor
8. 当前系统有哪些 Targets?
环境大概有:
1)node-exporter
Target:
node-exporter:9100/metrics
采集:
CPU
Memory
Disk
Network
2)kube-state-metrics
Target:
kube-state-metrics:8080/metrics
采集:
Pod状态
Deployment状态
Node状态
PVC状态
3)Prometheus自身
Target:
prometheus:9090/metrics
采集:
Prometheus自己:
查询耗时
存储大小
采集数量
4)kube-apiserver
Target:
https://kubernetes.default.svc
采集:
API请求
API延迟
认证
9. 如何查看某个Target采集的数据?
比如:
查看 node-exporter:
进入:
Prometheus
输入:
node_cpu_seconds_total
执行。
你会看到:
node_cpu_seconds_total{
instance="10.0.0.17:9100",
mode="idle"
}
这里:
instance
就是 Target。
10. Target失败排查流程(非常实用)
生产中经常遇到:
Target DOWN
排查:
第一步
看Target错误:
Prometheus:
Targets
DOWN
Last Error
例如:
connection refused
第二步
检查Service
例如:
kubectl get svc -n monitoring
第三步
检查Endpoint
非常重要:
kubectl get endpoints -n monitoring
例如:
Service:
kube-state-metrics
应该有:
10.42.0.8:8080
如果:
ENDPOINTS <none>
说明:
Service没有找到Pod。
第四步
直接访问metrics
进入Pod:
kubectl exec -it prometheusxxx -n monitoring -- sh
测试:
wget -qO- http://kube-state-metrics:8080/metrics
能看到:
# HELP kube_pod_info
kube_pod_info
说明正常。
11. 和 AIops 的联系
你之前说想往 AIops / Agent 方向发展。
Targets其实就是未来 Agent 的数据入口。
例如:
Prometheus:
Target:
node-exporter
产生:
CPU 99%
Memory 95%
Disk IO high
AI Agent:
调用:
Prometheus API
查询:
rate(node_cpu_seconds_total[5m])
然后:
LLM分析:
发现CPU异常
进一步查询:
哪个Pod占用CPU
kubectl top pod
查看日志
给出修复建议
所以:
理解 Targets = 理解 Kubernetes 可观测性的入口。
建议你下一步学习顺序:
Targets
↓
ServiceMonitor
↓
PromQL
↓
Alert Rule
↓
Grafana Dashboard
↓
Prometheus API
↓
AIops Agent
当前已经到了 Kubernetes 运维向 AIops 过渡的关键节点。你下一步最好直接实践创建一个自己的 ServiceMonitor + Python服务指标采集,这样会把整个链路串起来。
