首页
/ Apache SkyWalking监控数据导入Prometheus:配置详解

Apache SkyWalking监控数据导入Prometheus:配置详解

2026-02-04 05:01:54作者:裘晴惠Vivianne

你是否正在为微服务架构下的监控数据整合而烦恼?是否需要将SkyWalking的APM数据与Prometheus的时序分析能力结合,构建统一的可观测性平台?本文将系统讲解如何通过Telemetry模块和PromQL插件实现SkyWalking监控数据向Prometheus的标准化导入,解决多源监控数据孤岛问题。

读完本文你将掌握:

  • SkyWalking与Prometheus数据集成的两种核心方案
  • Telemetry指标导出的完整配置流程(含Docker环境)
  • PromQL查询适配与数据格式转换技巧
  • 高可用部署架构设计与性能调优参数
  • 常见问题诊断与兼容性处理方法

技术背景与架构设计

数据集成方案对比

方案 实现原理 适用场景 数据粒度 部署复杂度
Telemetry导出 通过OAP内置指标暴露Prometheus格式数据 基础监控指标(JVM/系统/业务) 分钟级聚合 ★☆☆☆☆
PromQL插件 实现Prometheus Query API兼容接口 需要Prometheus原生查询能力 原始指标+聚合指标 ★★☆☆☆
第三方Exporter 独立服务拉取SkyWalking API数据转换 复杂数据加工场景 按需定制 ★★★☆☆

核心组件交互流程

flowchart LR
    subgraph SkyWalking OAP Server
        A[Telemetry模块] -->|Prometheus格式| B[HTTP端点:1234]
        C[PromQL插件] -->|实现Prometheus API| D[HTTP端点:9090]
    end
    E[Prometheus Server] -->|拉取指标| B
    F[Grafana] -->|查询数据| E
    G[Prometheus Alertmanager] -->|告警规则| E

Telemetry配置详解

基础配置(application.yml)

SkyWalking OAP通过Telemetry模块原生支持Prometheus指标导出,核心配置位于oap-server/server-starter/src/main/resources/application.yml

telemetry:
  selector: ${SW_TELEMETRY:prometheus}
  prometheus:
    host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
    port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
    sslEnabled: ${SW_TELEMETRY_PROMETHEUS_SSL_ENABLED:false}
    sslKeyPath: ${SW_TELEMETRY_PROMETHEUS_SSL_KEY_PATH:""}
    sslCertChainPath: ${SW_TELEMETRY_PROMETHEUS_SSL_CERT_CHAIN_PATH:""}
    metricsPath: ${SW_TELEMETRY_PROMETHEUS_METRICS_PATH:/metrics}
    scheduleDelay: ${SW_TELEMETRY_PROMETHEUS_SCHEDULE_DELAY:60} # 单位:秒
    scheduleDelayUnit: ${SW_TELEMETRY_PROMETHEUS_SCHEDULE_DELAY_UNIT:SECONDS}

关键参数说明:

  • port: 指标暴露端口,默认1234(需与Prometheus配置一致)
  • scheduleDelay: 指标采集周期,建议生产环境设置为30-60秒
  • metricsPath: 指标访问路径,默认/metrics(Prometheus默认拉取路径)

Docker环境变量配置

在容器化部署场景(如docker-compose.yml),通过环境变量快速配置:

services:
  oap:
    image: apache/skywalking-oap-server:9.7.0
    environment:
      - SW_TELEMETRY=prometheus
      - SW_TELEMETRY_PROMETHEUS_PORT=1234
      - SW_TELEMETRY_PROMETHEUS_SCHEDULE_DELAY=30
    ports:
      - "1234:1234" # Prometheus指标端口

指标类型与命名规范

Telemetry模块导出的指标遵循Prometheus规范,主要包含三类指标:

  1. 系统级指标(JVM/OS)

    jvm_memory_used_bytes{area="heap",service="oap-server"} 125829120
    process_cpu_usage{service="oap-server"} 0.05
    
  2. OAP内部指标

    oap_receive_span_count_total{cluster="default",service="oap-server"} 12345
    oap_storage_batch_write_latency_seconds_sum{storage="elasticsearch"} 45.6
    
  3. 业务监控指标(通过OAL定义)

    service_resp_time_seconds_avg{service="user-service"} 0.23
    service_success_rate{service="order-service"} 0.995
    

Prometheus采集配置

prometheus.yml配置示例

scrape_configs:
  - job_name: 'skywalking-oap'
    scrape_interval: 30s
    scrape_timeout: 10s
    metrics_path: '/metrics'
    static_configs:
      - targets: ['oap-server:1234']  # SkyWalking OAP服务地址
        labels:
          cluster: 'prod'
          component: 'apm'

高级采集策略

scrape_configs:
  - job_name: 'skywalking-oap'
    scrape_interval: 30s
    metrics_path: '/metrics'
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        regex: 'skywalking-oap'
        action: keep
    kubernetes_sd_configs:
      - role: pod
        namespaces:
          names: ['monitoring']

PromQL插件配置与使用

启用PromQL插件

application.yml中启用PromQL查询兼容性模块:

promql:
  selector: ${SW_PROMQL:default}
  default:
    restHost: ${SW_PROMQL_REST_HOST:0.0.0.0}
    restPort: ${SW_PROMQL_REST_PORT:9090}
    restContextPath: ${SW_PROMQL_REST_CONTEXT_PATH:/}

该配置会在OAP服务器上启动一个兼容Prometheus Query API的服务(默认端口9090),允许Grafana等工具直接通过PromQL查询SkyWalking数据。

典型PromQL查询示例

  1. 查询服务平均响应时间

    service_resp_time_seconds_avg{service=~"user-service|order-service"}
    
  2. 监控OAP存储延迟

    histogram_quantile(0.95, sum(rate(oap_storage_batch_write_latency_seconds_bucket[5m])) by (le, storage))
    
  3. 服务成功率趋势

    sum(rate(service_success_count_total[5m])) by (service) / sum(rate(service_cpm[5m])) by (service)
    

可视化与告警配置

Grafana仪表盘导入

  1. 安装SkyWalking数据源插件(兼容Prometheus数据源)
  2. 导入官方仪表盘模板(ID: 13492)
  3. 自定义面板配置:
pie
    title 服务调用占比
    "user-service" : 35
    "order-service" : 25
    "payment-service" : 20
    "inventory-service" : 20

告警规则配置

在Prometheus中配置针对SkyWalking指标的告警规则:

groups:
- name: skywalking_alerts
  rules:
  - alert: HighErrorRate
    expr: sum(rate(service_error_count_total[5m])) by (service) / sum(rate(service_cpm[5m])) by (service) > 0.05
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "服务错误率过高"
      description: "服务 {{ $labels.service }} 错误率 {{ $value | humanizePercentage }} (5分钟平均)"

高可用部署架构

集群部署方案

flowchart TB
    subgraph "Kubernetes Cluster"
        subgraph "Namespace: monitoring"
            A[Prometheus Server] -->|联邦| B[Prometheus HA Pair]
            C[Alertmanager]
            D[Grafana]
        end
        subgraph "Namespace: skywalking"
            E[OAP Cluster] -->|指标暴露| A
            F[SkyWalking UI]
        end
    end
    B --> C
    D --> A

性能调优参数

参数 推荐值 说明
SW_TELEMETRY_PROMETHEUS_SCHEDULE_DELAY 30-60 指标采集周期,根据集群规模调整
SW_CORE_MAX_SIZE_OF_BATCH_SQL 2000 存储批量写入大小
SW_STORAGE_ES_BULK_ACTIONS 5000 ES批量操作阈值
prometheus.scrape_interval 30s 抓取间隔,不要小于OAP采集周期

常见问题诊断与解决方案

指标缺失问题排查流程

stateDiagram-v2
    [*] --> CheckOAPConfig
    CheckOAPConfig --> |配置正确| CheckPortAccess
    CheckOAPConfig --> |配置错误| FixConfig
    CheckPortAccess --> |可访问| CheckPrometheusConfig
    CheckPortAccess --> |不可访问| FixNetwork
    CheckPrometheusConfig --> |配置正确| CheckMetricData
    CheckPrometheusConfig --> |配置错误| FixPromConfig
    CheckMetricData --> |数据正常| [*]
    CheckMetricData --> |数据异常| CheckOALScript

典型问题解决方案

  1. 指标重复问题

    • 原因:OAP集群节点未正确配置集群标识
    • 解决:在application.yml中设置clusterName统一标签
  2. 数据延迟过大

    • 调整参数:SW_TELEMETRY_PROMETHEUS_SCHEDULE_DELAY=20
    • 优化存储:增加ES分片数量或调整OAP持久化周期
  3. PromQL查询超时

    • 减少查询范围:添加{service="specific-service"}过滤
    • 调整PromQL插件参数:maxQueryComplexity=5000

版本兼容性与升级指南

兼容性矩阵

SkyWalking版本 Prometheus版本 推荐插件版本
8.5.x - 8.9.x 2.20.x - 2.30.x promql-plugin:0.1.0
9.0.x - 9.4.x 2.30.x - 2.40.x promql-plugin:0.2.0
9.5.x+ 2.40.x+ 内置PromQL模块

升级注意事项

  1. 从8.x升级到9.x时,Telemetry配置路径变化:

    - telemetry:
    -   prometheus:
    + telemetry:
    +   selector: prometheus
    +   prometheus:
    
  2. PromQL插件端口变更:

    • 8.x版本默认端口:12800
    • 9.x版本默认端口:9090

总结与最佳实践

关键配置清单

  1. 必选配置

    • SW_TELEMETRY=prometheus:启用Prometheus导出
    • SW_PROMQL=default:启用PromQL兼容接口
    • Prometheus采集配置:正确设置target和scrape_interval
  2. 最佳实践

    • 生产环境建议同时启用Telemetry和PromQL插件
    • 指标保留策略:原始数据3天,聚合数据30天
    • 监控OAP自身健康状态:配置JVM指标告警
  3. 性能优化建议

    • 对高频指标(如每秒调用数)使用rate()函数降采样
    • 复杂查询使用Recording Rule预计算
    • 大规模部署时启用指标联邦采集

通过本文介绍的配置方法,你可以快速实现SkyWalking监控数据与Prometheus生态的无缝集成,构建从应用性能监控到全局可观测性的完整解决方案。建议结合实际业务需求,选择合适的数据集成方案,并遵循最佳实践进行部署和调优。

下一步行动建议

  1. 按照本文步骤配置测试环境验证数据导出
  2. 导入Grafana仪表盘模板并定制业务视图
  3. 基于实际业务指标设计告警规则
  4. 进行压力测试并优化性能参数
登录后查看全文
热门项目推荐
相关项目推荐