Grafana Alloy 指标详解

概述

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
含义: 跟踪控制器是否正在进行图评估
值含义:

  • 0: 控制器空闲
  • 1: 控制器正在评估组件图

监控价值: 检测组件评估是否卡住或频繁触发。

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
含义: 配置是否成功加载
值含义:

  • 1: 成功
  • 0: 失败

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,请关注"

性能监控仪表板

推荐监控面板:

  1. 系统概览: CPU、内存、网络使用情况
  2. 组件状态: 健康组件数量、评估队列大小
  3. 配置管理: 配置加载状态、变更历史
  4. 日志处理: 写入速率、丢弃率、重试次数
  5. Go 运行时: GC 性能、协程数量、内存分配

9. 故障排查指南

常见问题诊断

  1. 组件评估缓慢

    • 检查 alloy_component_evaluation_seconds 高分位数
    • 分析 alloy_component_evaluation_queue_size 积压情况
  2. 内存使用异常

    • 监控 go_memstats_heap_alloc_bytes 趋势
    • 检查 go_memstats_heap_objects 对象数量
  3. 日志处理问题

    • 分析 loki_write_dropped_* 指标的丢弃原因
    • 检查 loki_write_batch_retries_total 重试情况
  4. 配置问题

    • 监控 alloy_config_load_failures_total 失败次数
    • 检查 alloy_config_hash 配置一致性

10. 最佳实践

监控策略

  1. 分层监控: 系统 → 组件 → 业务指标
  2. 阈值设置: 基于历史数据建立合理阈值
  3. 趋势分析: 关注指标变化趋势而非绝对值
  4. 关联分析: 结合多个指标进行综合判断

性能优化

  1. 组件配置: 根据评估时间调整组件参数
  2. 资源分配: 基于内存和 CPU 使用情况调整资源
  3. 批处理优化: 根据写入指标调整批处理大小
  4. 缓存调优: 基于缓存命中率优化缓存配置

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 请求/响应大小统计

系统资源面板:

  • CPU 使用率趋势
  • 网络流量监控
  • 垃圾回收时间统计

Kubernetes 服务发现面板:

  • Kubernetes 事件处理速率
  • Kubernetes API 失败次数统计

使用方法

  1. 导入 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
  2. 配置数据源

    • 确保 Prometheus 数据源已正确配置
    • 验证 Alloy 指标可以正常查询
  3. 自定义配置

    • 根据实际环境调整查询表达式
    • 修改告警阈值和颜色配置
    • 添加自定义标签过滤器

Dashboard 特性

  • 中文界面: 所有标题和标签都使用中文
  • 自动刷新: 30秒自动刷新数据
  • 响应式布局: 适配不同屏幕尺寸
  • 阈值告警: 关键指标设置了颜色阈值
  • 数据源模板: 支持切换不同的 Prometheus 数据源
  • 时间范围: 默认显示最近1小时数据,可自定义调整

监控面板优化建议

  1. 性能优化

    • 合理设置查询间隔,避免过于频繁的查询
    • 使用适当的时间窗口进行聚合计算
    • 对于历史数据分析,可以增加更长的时间范围
  2. 告警集成

    • 在关键面板上设置告警规则
    • 配置通知渠道(邮件、Slack、钉钉等)
    • 设置告警抑制规则,避免告警风暴
  3. 权限管理

    • 为不同团队设置不同的查看权限
    • 创建只读用户避免误操作
    • 定期审查和更新权限配置

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])

排查模板:

  1. 系统状态检查: 配置、组件、资源
  2. 数据流分析: 输入、处理、输出
  3. 性能指标: 延迟、吞吐量、错误率
  4. 根因定位: 日志、指标、链路追踪

总结

Grafana Alloy 的指标体系提供了全面的可观测性数据,涵盖了从系统资源到业务逻辑的各个层面。通过合理使用这些指标和配套的 Dashboard,可以实现:

  • 主动监控: 及时发现和预防问题
  • 性能优化: 基于数据驱动的优化决策
  • 故障排查: 快速定位和解决问题
  • 容量规划: 基于历史数据进行资源规划
  • 可视化管理: 通过 Dashboard 直观展示系统状态

建议根据实际业务需求,选择关键指标建立监控体系,并定期回顾和优化监控策略。同时,充分利用 Grafana Dashboard 的可视化能力,提升监控效率和问题响应速度。

0%