监控

Prometheus Targets

·10 分钟阅读·3956 字

Prometheus Target 的发现机制、状态含义与 kube-prometheus-stack 中的来源关系

📋 目录

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服务指标采集,这样会把整个链路串起来。

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro