概述
Grafana Alloy 通过 Prometheus 指标暴露了丰富的监控数据,涵盖了系统性能、组件状态、配置管理、日志处理等多个维度。本文将详细解释每个指标的含义、用途和监控价值。
1. 构建信息指标
alloy_build_info
1
| alloy_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.24.4",revision="30277f7",tags="netgo,builtinassets,promtail_journal_enabled",version="v1.9.2"} 1
|
指标类型: Gauge
含义: 提供 Alloy 构建信息的常量指标
标签说明:
branch
: 构建分支goarch
: 目标架构 (amd64)goos
: 目标操作系统 (linux)goversion
: Go 编译器版本revision
: Git 提交哈希tags
: 构建标签version
: Alloy 版本号
监控价值: 用于版本管理、兼容性检查和问题排查时的环境确认。
2. 组件控制器指标
alloy_component_controller_evaluating
1
| alloy_component_controller_evaluating{controller_id="",controller_path="/"} 0
|
指标类型: Gauge
含义: 跟踪控制器是否正在进行图评估
值含义:
监控价值: 检测组件评估是否卡住或频繁触发。
alloy_component_controller_running_components
1
| alloy_component_controller_running_components{controller_id="",controller_path="/",health_type="healthy"} 3
|
指标类型: Gauge
含义: 当前运行的组件总数
标签说明:
health_type
: 组件健康状态 (healthy/unhealthy)
监控价值: 监控组件健康状态分布,及时发现异常组件。
alloy_component_dependencies_wait_seconds
1
| alloy_component_dependencies_wait_seconds_bucket{controller_id="",controller_path="/",le="0.005"} 2
|
指标类型: Histogram
含义: 组件等待依赖更新后被评估的时间分布
监控价值:
- 检测组件依赖链的性能瓶颈
- 优化组件启动顺序
- 发现依赖死锁问题
alloy_component_evaluation_queue_size
1
| alloy_component_evaluation_queue_size{controller_id="",controller_path="/"} 1
|
指标类型: Gauge
含义: 等待在工作池中被评估的组件数量
监控价值:
alloy_component_evaluation_seconds
1
| alloy_component_evaluation_seconds_bucket{controller_id="",controller_path="/",le="0.005"} 2
|
指标类型: Histogram
含义: 组件评估耗时分布
监控价值:
3. 配置管理指标
alloy_config_hash
1
| alloy_config_hash{cluster_name="",sha256="d9c2272a88ea08d0ee0e95f352077329357cad4408c066378360bf27808cb2ac"} 1
|
指标类型: Gauge
含义: 当前活动配置文件的哈希值
监控价值:
alloy_config_last_load_success_timestamp_seconds
1
| alloy_config_last_load_success_timestamp_seconds 1.7526530693099432e+09
|
指标类型: Gauge
含义: 最后一次成功加载配置的时间戳
监控价值: 监控配置重载频率和成功率。
alloy_config_last_load_successful
1
| alloy_config_last_load_successful 1
|
指标类型: Gauge
含义: 配置是否成功加载
值含义:
alloy_config_load_failures_total
1
| alloy_config_load_failures_total 0
|
指标类型: Counter
含义: 配置加载失败总次数
监控价值: 监控配置文件质量和语法错误。
4. 标签存储指标
alloy_labelstore_global_ids_count
1
| alloy_labelstore_global_ids_count 0
|
指标类型: Gauge
含义: 全局 ID 总数
监控价值: 监控标签存储的内存使用情况。
alloy_labelstore_last_stale_check_timestamp
1
| alloy_labelstore_last_stale_check_timestamp 1.752717869e+09
|
指标类型: Gauge
含义: 最后一次过期检查的时间戳
监控价值: 确保标签清理机制正常工作。
5. 系统资源指标
网络流量指标
1
2
| alloy_resources_machine_rx_bytes_total 3.87777615344e+11
alloy_resources_machine_tx_bytes_total 1.06780165711e+11
|
指标类型: Counter
含义: 主机级别的网络接收/发送字节总数
监控价值:
进程资源指标
1
2
3
4
| alloy_resources_process_cpu_seconds_total 35217.79
alloy_resources_process_resident_memory_bytes 2.31657472e+08
alloy_resources_process_virtual_memory_bytes 3.355598848e+09
alloy_resources_process_start_time_seconds 1.752653069e+09
|
指标说明:
cpu_seconds_total
: 进程 CPU 使用总时间resident_memory_bytes
: 常驻内存大小 (约 232MB)virtual_memory_bytes
: 虚拟内存大小 (约 3.36GB)start_time_seconds
: 进程启动时间戳
监控价值:
6. Go 运行时指标
垃圾回收指标
1
2
3
| go_gc_duration_seconds{quantile="0.5"} 0.000149737
go_gc_gogc_percent 100
go_gc_gomemlimit_bytes 9.223372036854776e+18
|
指标说明:
gc_duration_seconds
: GC 暂停时间分布gc_gogc_percent
: GC 目标百分比 (100%)gc_gomemlimit_bytes
: Go 运行时内存限制
内存统计指标
1
2
3
| go_memstats_alloc_bytes 5.0047336e+07
go_memstats_heap_objects 233785
go_memstats_next_gc_bytes 5.3414458e+07
|
关键指标:
alloc_bytes
: 当前堆分配字节数 (约 50MB)heap_objects
: 堆对象数量next_gc_bytes
: 下次 GC 触发的堆大小
协程指标
1
2
3
| go_goroutines 96
go_threads 24
go_sched_gomaxprocs_threads 16
|
监控价值:
- 检测协程泄漏
- 监控并发性能
- 调优 GOMAXPROCS 设置
7. OpenTelemetry Collector 指标
导出器指标
1
2
| otelcol_exporter_sent_log_records_total{component_id="otelcol.exporter.otlphttp.default"} 477974
otelcol_exporter_send_failed_log_records_total{component_id="otelcol.exporter.otlphttp.default"} 0
|
指标说明:
sent_log_records_total
: 成功发送到目标的日志记录总数 (477,974条)send_failed_log_records_total
: 发送失败的日志记录总数 (0条)
监控价值:
- 监控日志传输成功率
- 检测传输错误和失败
- 评估系统可靠性
队列管理指标
1
2
| otelcol_exporter_queue_capacity{data_type="logs"} 1000
otelcol_exporter_queue_size{data_type="logs"} 0
|
指标说明:
queue_capacity
: 重试队列的固定容量 (1000批次)queue_size
: 当前队列中的批次数量 (0批次)
监控价值:
批处理器指标
1
2
3
| otelcol_processor_batch_batch_send_size_bucket{le="2000"} 13
otelcol_processor_batch_batch_send_size_sum 477974
otelcol_processor_batch_batch_send_size_count 87
|
指标说明:
batch_send_size
: 批次中的单元数量分布batch_send_size_bytes
: 批次字节大小分布batch_size_trigger_send_total
: 因大小触发发送的次数 (26次)timeout_trigger_send_total
: 因超时触发发送的次数 (61次)
监控价值:
HTTP 客户端指标
1
2
3
| http_client_duration_milliseconds_bucket{le="250"} 87
http_client_request_size_bytes_total 2.09639717e+08
http_client_response_size_bytes_total 0
|
指标说明:
duration_milliseconds
: HTTP 请求持续时间分布request_size_bytes_total
: HTTP 请求消息大小 (约209.6MB)response_size_bytes_total
: HTTP 响应消息大小 (0字节)
关键标签:
component_id
: 组件标识http_method
: HTTP 方法 (POST)http_status_code
: HTTP 状态码 (200)net_peer_name
: 目标主机名net_peer_port
: 目标端口
监控价值:
8. Loki 组件指标
查询统计指标
1
2
| loki_logql_querystats_duplicates_total 0
loki_logql_querystats_ingester_sent_lines_total 0
|
含义:
duplicates_total
: LogQL 查询中发现的重复记录数ingester_sent_lines_total
: 查询时从 ingester 发送的日志行数
缓存指标
1
2
3
| loki_querier_index_cache_gets_total 0
loki_querier_index_cache_hits_total 0
loki_querier_index_cache_puts_total 0
|
监控价值:
9. 监控告警建议
关键告警规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
| groups:
- name: alloy-core-alerts
rules:
# 配置加载失败
- alert: AlloyConfigLoadFailure
expr: alloy_config_last_load_successful == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Alloy 配置加载失败"
description: "Alloy 实例 {{ $labels.instance }} 配置加载失败,请检查配置文件语法"
# 组件不健康
- alert: AlloyUnhealthyComponents
expr: alloy_component_controller_running_components{health_type="unhealthy"} > 0
for: 2m
labels:
severity: warning
annotations:
summary: "发现不健康的 Alloy 组件"
description: "Alloy 实例 {{ $labels.instance }} 有 {{ $value }} 个不健康组件"
# 内存使用过高
- alert: AlloyHighMemoryUsage
expr: alloy_resources_process_resident_memory_bytes > 500 * 1024 * 1024
for: 5m
labels:
severity: warning
annotations:
summary: "Alloy 内存使用过高"
description: "Alloy 实例 {{ $labels.instance }} 内存使用 {{ $value | humanize1024 }}B,超过 500MB"
- name: alloy-otel-alerts
rules:
# OpenTelemetry 日志发送失败
- alert: OTelLogSendFailure
expr: rate(otelcol_exporter_send_failed_log_records_total[5m]) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "OpenTelemetry 日志发送失败"
description: "组件 {{ $labels.component_id }} 日志发送失败率: {{ $value | humanizePercentage }}"
# OpenTelemetry 队列积压
- alert: OTelQueueBacklog
expr: otelcol_exporter_queue_size / otelcol_exporter_queue_capacity > 0.8
for: 3m
labels:
severity: warning
annotations:
summary: "OpenTelemetry 导出器队列积压"
description: "组件 {{ $labels.component_id }} 队列使用率 {{ $value | humanizePercentage }},接近容量上限"
# HTTP 请求延迟过高
- alert: HTTPClientHighLatency
expr: histogram_quantile(0.95, rate(http_client_duration_milliseconds_bucket[5m])) > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "HTTP 客户端延迟过高"
description: "组件 {{ $labels.component_id }} HTTP 请求 P95 延迟 {{ $value }}ms,超过 1000ms"
# 批处理效率低下
- alert: BatchProcessorInefficient
expr: rate(otelcol_processor_batch_timeout_trigger_send_total[5m]) / rate(otelcol_processor_batch_batch_send_size_count[5m]) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "批处理器效率低下"
description: "组件 {{ $labels.component_id }} 超时触发批次发送比例 {{ $value | humanizePercentage }},建议调整批次大小或超时时间"
- name: alloy-system-alerts
rules:
# Goroutine 泄漏
- alert: AlloyGoroutineLeak
expr: go_goroutines > 200
for: 10m
labels:
severity: warning
annotations:
summary: "Alloy Goroutine 数量异常"
description: "Alloy 实例 {{ $labels.instance }} Goroutine 数量 {{ $value }},可能存在泄漏"
# GC 时间过长
- alert: AlloyHighGCTime
expr: rate(go_gc_duration_seconds_sum[5m]) / rate(go_gc_duration_seconds_count[5m]) > 0.01
for: 5m
labels:
severity: warning
annotations:
summary: "Alloy GC 时间过长"
description: "Alloy 实例 {{ $labels.instance }} 平均 GC 时间 {{ $value | humanizeDuration }},影响性能"
# 网络流量异常
- alert: AlloyNetworkTrafficAnomaly
expr: rate(alloy_resources_machine_rx_bytes_total[5m]) > 100 * 1024 * 1024
for: 5m
labels:
severity: info
annotations:
summary: "Alloy 网络接收流量异常"
description: "Alloy 实例 {{ $labels.instance }} 网络接收速率 {{ $value | humanize1024 }}B/s,请关注"
|
性能监控仪表板
推荐监控面板:
- 系统概览: CPU、内存、网络使用情况
- 组件状态: 健康组件数量、评估队列大小
- 配置管理: 配置加载状态、变更历史
- 日志处理: 写入速率、丢弃率、重试次数
- Go 运行时: GC 性能、协程数量、内存分配
9. 故障排查指南
常见问题诊断
组件评估缓慢
- 检查
alloy_component_evaluation_seconds
高分位数 - 分析
alloy_component_evaluation_queue_size
积压情况
内存使用异常
- 监控
go_memstats_heap_alloc_bytes
趋势 - 检查
go_memstats_heap_objects
对象数量
日志处理问题
- 分析
loki_write_dropped_*
指标的丢弃原因 - 检查
loki_write_batch_retries_total
重试情况
配置问题
- 监控
alloy_config_load_failures_total
失败次数 - 检查
alloy_config_hash
配置一致性
10. 最佳实践
监控策略
- 分层监控: 系统 → 组件 → 业务指标
- 阈值设置: 基于历史数据建立合理阈值
- 趋势分析: 关注指标变化趋势而非绝对值
- 关联分析: 结合多个指标进行综合判断
性能优化
- 组件配置: 根据评估时间调整组件参数
- 资源分配: 基于内存和 CPU 使用情况调整资源
- 批处理优化: 根据写入指标调整批处理大小
- 缓存调优: 基于缓存命中率优化缓存配置
11. Grafana Dashboard 配置
为了更好地可视化 Alloy 的监控指标,我们提供了一个完整的 Grafana Dashboard 配置。这个面板包含了所有关键指标的可视化展示。
Dashboard 结构
11.1 Alloy 概览
- 运行中的组件数量: 显示当前运行的组件总数,按健康状态分类
- 配置加载状态: 实时显示配置是否成功加载
- 内存使用情况: 常驻内存和虚拟内存的时间序列图
11.2 Loki 写入指标
- 日志发送速率: 每秒发送的日志条目数,监控数据处理吞吐量
- 数据发送速率: 每秒发送的字节数,监控网络带宽使用
- 写入请求延迟分布: P50、P95、P99 延迟饼图,分析性能分布
- 错误和重试率: 丢弃条目和批次重试的速率,监控数据质量
11.3 系统资源
- CPU 使用率: 进程 CPU 使用百分比趋势
- 网络流量: 接收和发送的网络流量对比
11.4 Go 运行时
- Goroutines 数量: 当前 goroutine 数量,检测协程泄漏
- Go 堆内存: 堆内存分配和系统内存使用情况
- 垃圾回收时间: 平均 GC 暂停时间,监控 GC 性能
11.5 Kubernetes 服务发现
- Kubernetes 事件处理速率: 各种 K8s 事件的处理速率
- Kubernetes API 失败次数: API 调用失败统计
Dashboard JSON 配置
完整的 Dashboard 配置已保存在 alloy-complete-dashboard.json
文件中,包含以下主要面板:
系统概览面板:
- 健康组件数量统计
- 配置加载状态显示
- Goroutines 数量监控
- 内存使用情况趋势
OpenTelemetry 指标面板:
- 已发送日志记录总数
- 发送失败日志记录统计
- 日志发送速率趋势
- 导出器队列状态监控
- 批处理器批次大小分布
HTTP 客户端面板:
- HTTP 请求延迟分布 (P50/P95/P99)
- HTTP 请求/响应大小统计
系统资源面板:
Kubernetes 服务发现面板:
- Kubernetes 事件处理速率
- Kubernetes API 失败次数统计
使用方法
导入 Dashboard
1
2
3
4
5
6
| # 将完整的 JSON 配置保存为文件
curl -X POST \
http://your-grafana-url/api/dashboards/db \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d @alloy-monitoring-dashboard.json
|
配置数据源
- 确保 Prometheus 数据源已正确配置
- 验证 Alloy 指标可以正常查询
自定义配置
- 根据实际环境调整查询表达式
- 修改告警阈值和颜色配置
- 添加自定义标签过滤器
Dashboard 特性
- 中文界面: 所有标题和标签都使用中文
- 自动刷新: 30秒自动刷新数据
- 响应式布局: 适配不同屏幕尺寸
- 阈值告警: 关键指标设置了颜色阈值
- 数据源模板: 支持切换不同的 Prometheus 数据源
- 时间范围: 默认显示最近1小时数据,可自定义调整
监控面板优化建议
性能优化
- 合理设置查询间隔,避免过于频繁的查询
- 使用适当的时间窗口进行聚合计算
- 对于历史数据分析,可以增加更长的时间范围
告警集成
- 在关键面板上设置告警规则
- 配置通知渠道(邮件、Slack、钉钉等)
- 设置告警抑制规则,避免告警风暴
权限管理
- 为不同团队设置不同的查看权限
- 创建只读用户避免误操作
- 定期审查和更新权限配置
13. 实际应用案例
案例1:OpenTelemetry 性能优化
基于当前指标数据分析批处理效率:
1
2
3
| # 分析批处理触发机制比例
rate(otelcol_processor_batch_timeout_trigger_send_total[5m]) /
rate(otelcol_processor_batch_batch_send_size_count[5m])
|
当前数据分析:
- 超时触发: 61次 (70.1%)
- 大小触发: 26次 (29.9%)
- 平均批次大小: 5,494条
优化建议:
- 调整
send_batch_size
从 1024 到 2048 - 缩短
timeout
从 5s 到 3s - 提高实时性和处理效率
案例2:HTTP 客户端性能监控
监控网络请求性能和识别瓶颈:
1
2
3
4
5
6
7
| # HTTP 请求延迟分析
histogram_quantile(0.95,
rate(http_client_duration_milliseconds_bucket[5m])
)
# 请求大小趋势
rate(http_client_request_size_bytes_total[5m])
|
当前性能表现:
- 87次请求全部成功 (100%成功率)
- P95延迟 < 250ms (优秀)
- 平均请求大小: 2.4MB
- 总传输: 209.6MB
监控价值:
案例3:内存使用优化
基于实际内存使用数据进行容量规划:
1
2
3
4
5
6
7
8
9
| # 内存使用趋势预测
predict_linear(
alloy_resources_process_resident_memory_bytes[1h],
3600 * 24
)
# GC 效率分析
rate(go_gc_duration_seconds_sum[5m]) /
rate(go_gc_duration_seconds_count[5m])
|
当前内存状态:
- 常驻内存: 242.95MB
- 虚拟内存: 3.28GB
- 堆内存: 41.29MB
- GC 平均时间: 159μs
优化成果:
- 内存使用稳定,无泄漏迹象
- GC 性能优秀,暂停时间短
- 资源配置合理
案例4:队列管理优化
监控队列状态,预防积压问题:
1
2
3
4
5
| # 队列使用率监控
otelcol_exporter_queue_size / otelcol_exporter_queue_capacity
# 队列积压预警
otelcol_exporter_queue_size > 800
|
当前队列状态:
- 队列容量: 1000批次
- 当前大小: 0批次
- 使用率: 0%
管理策略:
- 队列配置充足,无积压风险
- 处理速度匹配数据产生速度
- 系统响应及时
案例5:Kubernetes 集成监控
监控服务发现和 API 调用状态:
1
2
3
4
5
| # Kubernetes 事件处理速率
rate(prometheus_sd_kubernetes_events_total[5m])
# API 调用失败率
rate(prometheus_sd_kubernetes_failures_total[5m])
|
当前集成状态:
- Pod 发现: 3个新增,9个更新
- API 调用失败: 0次
- 服务发现正常工作
监控价值:
- 确保 Kubernetes 集成稳定
- 及时发现 API 权限问题
- 监控集群变化影响
案例6:实时故障排查
当系统出现异常时的排查流程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 1. 检查整体健康状态
alloy_config_last_load_successful
alloy_component_controller_running_components{health_type="healthy"}
# 2. 分析处理链路
rate(otelcol_exporter_sent_log_records_total[5m])
rate(otelcol_exporter_send_failed_log_records_total[5m])
# 3. 检查资源状态
go_goroutines
alloy_resources_process_resident_memory_bytes
# 4. 分析网络状况
rate(http_client_duration_milliseconds_sum[5m]) /
rate(http_client_duration_milliseconds_count[5m])
|
排查模板:
- 系统状态检查: 配置、组件、资源
- 数据流分析: 输入、处理、输出
- 性能指标: 延迟、吞吐量、错误率
- 根因定位: 日志、指标、链路追踪
总结
Grafana Alloy 的指标体系提供了全面的可观测性数据,涵盖了从系统资源到业务逻辑的各个层面。通过合理使用这些指标和配套的 Dashboard,可以实现:
- 主动监控: 及时发现和预防问题
- 性能优化: 基于数据驱动的优化决策
- 故障排查: 快速定位和解决问题
- 容量规划: 基于历史数据进行资源规划
- 可视化管理: 通过 Dashboard 直观展示系统状态
建议根据实际业务需求,选择关键指标建立监控体系,并定期回顾和优化监控策略。同时,充分利用 Grafana Dashboard 的可视化能力,提升监控效率和问题响应速度。