Prometheus-Scrape指标抓取
Prometheus-Scrape指标抓取
基于v3.5
工作原理
graph TD
A[ScrapePool] --> B[Target Discovery]
A --> C[Scrape Loop Management]
A --> D[HTTP Client]
B --> B1[Sync Targets]
B1 --> B2[Target Group Processing]
B2 --> B3[Target Creation/Deduplication]
B3 --> B4[Active Targets Update]
C --> C1[Loop Creation]
C1 --> C2[Scrape Interval Setup]
C2 --> C3[Scraper Initialization]
D --> D1[Target Scraper]
D1 --> D2[HTTP Request]
D2 --> D3[Metrics Endpoint]
C3 --> E[Scrape Execution]
E --> E1[Context Timeout Setup]
E1 --> E2[HTTP GET Request]
E2 --> E3[Response Reading]
E3 --> F[Response Processing]
F --> F1[Content Type Detection]
F1 --> F2[Parser Selection]
F2 --> F3[Metric Parsing]
F3 --> G[Cache Management]
G --> G1[Series Caching]
G1 --> G2[Label Processing]
G2 --> G3[Staleness Tracking]
F3 --> H[Storage Append]
H --> H1[Sample Validation]
H1 --> H2[Label Mutation]
H2 --> H3[Appender Interface]
H3 --> H4[TSDB Storage]
H --> I[Exemplar Handling]
I --> I1[Exemplar Parsing]
I1 --> I2[Exemplar Storage]
H --> J[Metadata Handling]
J --> J1[Type/Help/Unit]
J1 --> J2[Metadata Cache]
E --> K[Report Metrics]
K --> K1[Scrape Duration]
K1 --> K2[Scrape Health]
K2 --> K3[Sample Counters]
F --> L[Error Handling]
L --> L1[Staleness Markers]
L1 --> L2[Sample Limit Check]
L2 --> L3[Retry Logic]
style A fill:#e1f5fe
style E fill:#f3e5f5
style F fill:#e8f5e8
style H fill:#fff3e0
style K fill:#fce4ec
classDef process fill:#bbdefb,stroke:#333;
classDef data fill:#c8e6c9,stroke:#333;
classDef storage fill:#ffccbc,stroke:#333;
classDef reporting fill:#f8bbd0,stroke:#333;
class C1,C2,C3,E1,E2,E3, process;
class F1,F2,F3,G1,G2,G3,H1,H2,I1,J1, data;
class H3,H4,I2,J2, storage;
class K1,K2,K3, reporting;
目标发现与同步 (Target Discovery):
- 从服务发现机制获取目标组
- 处理和去重目标
- 更新活动目标列表
抓取循环管理 (Scrape Loop Management):
- 为每个目标创建抓取循环
- 设置抓取间隔和超时
- 初始化抓取器
HTTP 客户端与请求 (HTTP Client):
- 使用配置的 HTTP 客户端
- 向目标端点发送 GET 请求
- 读取响应数据
抓取执行 (Scrape Execution):
- 设置上下文超时
- 发送 HTTP 请求
- 读取并处理响应
响应处理 (Response Processing):
- 检测内容类型
- 选择合适的解析器
- 解析指标数据
缓存管理 (Cache Management):
- 缓存系列信息
- 处理标签变化
- 跟踪陈旧性
存储追加 (Storage Append):
- 验证样本数据
- 进行标签转换
- 通过 Appender 接口写入 TSDB
详细流程
Scape初始化
1 | type Manager struct { |
Run启动
1 | func (m *Manager) Run(tsets <-chan map[string][]*targetgroup.Group) error { |
抓取
1 | // Sync 将目标组转换为实际的抓取目标,并同步当前运行的抓取器与结果集,返回所有已抓取和丢弃的目标 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Joohwan!
评论