ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SkyWalking OAP 自观测(SO11Y)仪表盘:从 Prometheus 遥测到 MAL 指标分析与面板定制

SkyWalking OAP 自观测(SO11Y)仪表盘:从 Prometheus 遥测到 MAL 指标分析与面板定制 可观测性APM链路追踪指标监控日志分析微服务【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址https://gitcode.com/gh_mirrors/sk/skywalking点击查看免费下载导读本指南围绕 SkyWalking OAP 的自观测Self ObservabilitySO11Y仪表盘展开讲解 OAP 如何收集自身运行状态指标、通过 Prometheus HTTP 端点暴露、再经 OpenTelemetry Collector 回传到 OAP 完成 MAL 分析入库最终在 UI 仪表盘上可视化展示的全链路数据流。读完本文你将掌握 SO11Y 指标的数据流、核心指标清单与单位含义、静态 IP 与 Kubernetes 两种场景下的部署配置以及基于otel-rules/oap.yaml的 MAL 表达式自定义指标与仪表盘的完整方法。SkyWalking OAP 后端本身是一套分布式流处理系统。为了让运维团队掌握其自身运行状态SkyWalking 提供了 backend 遥测能力即self-observabilityso11y。OAP 不仅收集和导出 Prometheus 格式的指标供外部消费还提供一套内建仪表盘将这些自观测指标可视化详见 dashboards-so11y.md。一、SO11Y 数据流从 OAP 自身遥测到仪表盘自观测仪表盘的数据流是一个遥测-回采-回流的闭环共四步暴露SkyWalking OAP 内部收集自身指标并暴露一个 Prometheus HTTP 端点默认0.0.0.0:1234/metrics供拉取拉取SkyWalking OAP 自身或 OpenTelemetry CollectorKubernetes 场景下推荐后者从第 (1) 步的 Prometheus 端点抓取指标回流OAP或 OpenTelemetry Collector通过 OpenTelemetry gRPC exporter 将指标推送回 SkyWalking OAP Server分析入库OAP Server 使用 MALMetrics Analysis Language 解析表达式完成过滤、计算、聚合并存储结果最终呈现在 UI 或 GraphQL API 上。从源码结构看第 4 步的 MAL 规则位于 otel-rules/oap.yaml该文件是 OAP 自观测指标分析的唯一入口规则文件而第 1 步的遥测暴露由telemetry模块实现相关配置见 backend-telemetry.md。┌─────────────┐ (1) 暴露 /metrics ┌──────────────────┐ │ SkyWalking │ ───────────────────▶ │ Prometheus 端点 │ │ OAP Server │ │ 0.0.0.0:1234 │ └─────────────┘ └──────────────────┘ ▲ │ │ (3) OTLP gRPC 推送 │ (2) 抓取 │ ▼ ┌─────────────┐ ┌──────────────────┐ │ OAP / OTel │ ◀─────────────────── │ OTel Collector / │ │ 分析入库 │ (4) MAL 解析聚合 │ OAP 自身 │ └─────────────┘ └──────────────────┘二、Set up开启遥测与 OpenTelemetry 回采完整配置请遵循 OAP Self Observability Telemetry 文档。核心要点如下。2.1 默认遥测配置telemetry默认即开启 Prometheus 实现selector默认为prometheustelemetry: selector: ${SW_TELEMETRY:prometheus} none: 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:}除自观测外该遥测机制还支撑 OAP 熔断circuit breaking 功能。2.2 静态 IP 或主机名场景如果 OAP 实例有固定 IP/主机名按两步开启自观测相关模块配置 Prometheus telemetrytelemetry: selector: ${SW_TELEMETRY:prometheus} prometheus: host: 127.0.0.1 port: 1543配置 OpenTelemetry 从 OAP telemetry 抓取指标。可直接参考仓库中的 E2E 测试用例receivers: prometheus: config: scrape_configs: - job_name: skywalking-so11y scrape_interval: 5s static_configs: - targets: [oap:1234] labels: host_name: http://localhost:1234 service: oap-server processors: batch: exporters: otlp: endpoint: oap:11800 tls: insecure: true service: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp注意两点关键约定job_name必须为skywalking-so11y这与 otel-rules/oap.yaml 中的过滤器filter: { tags - tags.job_name skywalking-so11y }严格对应用于只筛选 SO11Y 指标静态标签service: oap-server与host_nameMAL 规则的expSuffix: instance([service], [host_name], Layer.SO11Y_OAP)依赖这两个标签来构建实例维度。2.3 Kubernetes 场景Service Discovery 抓取若 OAP 集群部署在 Kubernetes 上实例Pod没有静态 IP/主机名可借助 OpenTelemetry Collector 的 Kubernetes 服务发现机制自动发现 oap-server 实例并抓取指标随后转发至 OAP 的 OpenTelemetry receiver。Step 1配置 oap-server设置指标端口prometheus-port: 1234设置环境变量SW_TELEMETRYprometheus SW_OTEL_RECEIVERdefault SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULESoap使用 Apache SkyWalking Kubernetes Helm 安装的示例helm -n istio-system install skywalking skywalking \ --set elasticsearch.replicas1 \ --set elasticsearch.minimumMasterNodes1 \ --set elasticsearch.imageTag7.5.1 \ --set oap.replicas2 \ --set ui.image.repositoryapache/skywalking-ui \ --set ui.image.taglatest \ --set oap.image.tag$TAG \ --set oap.image.repository$HUB/skywalking-oap \ --set oap.storageTypeelasticsearch \ --set oap.ports.prometheus-port1234 \ # 暴露自观测指标端口 --set oap.env.SW_TELEMETRYprometheus \ --set oap.env.SW_OTEL_RECEIVERdefault \ # 启用 Otel receiver --set oap.env.SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULESoap # 为 Otel 指标添加 oap analyzerStep 2配置 OpenTelemetry Collector 抓取任务- job_name: skywalking-so11y # 确保与 so11y.yaml 中的 job 名一致仅筛选 so11y 指标 metrics_path: /metrics kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_container_name, __meta_kubernetes_pod_container_port_name] action: keep regex: oap;prometheus-port - source_labels: [] target_label: service replacement: oap-server - source_labels: [__meta_kubernetes_pod_name] target_label: host_name regex: (.) replacement: $$12.4 可选方案直接对接 Prometheus Grafana除回传 OAP 外用户也可以直接利用该 Prometheus 端点对接自有 Prometheus 和 Grafana。Prometheus 端点在http://0.0.0.0:1234/与http://0.0.0.0:1234/metrics打开。如需自定义 host/porttelemetry: selector: ${SW_TELEMETRY:prometheus} prometheus: host: 127.0.0.1 port: 1543如需以 SSL 暴露安全端点私钥与证书链文件在变更后会被重新加载telemetry: selector: ${SW_TELEMETRY:prometheus} prometheus: host: 127.0.0.1 port: 1543 sslEnabled: true sslKeyPath: /etc/ssl/key.pem sslCertChainPath: /etc/ssl/cert-chain.pemGrafana 可视化模板可参考仓库中的 SkyWalking OAP Cluster Monitor Dashboard 与 SkyWalking OAP Instance Monitor Dashboard。三、自观测监控模型OAP 即一个 Service自观测监控用于监控 OAP Server 自身的状态与资源。在 OAP 中oap-server是一个Service其所属层Layer为SO11Y_OAP实例Instance维度由servicehost_name两个标签构成见 otel-rules/oap.yaml 的expSuffix。该模型已在 E2E 测试中验证参见 so11y-cases.yaml 中的swctl查询用例——包括layer ls检查SO11Y_OAP层、service ls检查oap-server服务、instance list --service-nameoap-server检查实例等。四、自观测指标清单下表完整列出仪表盘所覆盖的自观测指标单位、指标名、描述与数据来源。所有指标名均以meter_oap为前缀由 otel-rules/oap.yaml 的metricPrefix: meter_oap统一添加。UnitMetric NameDescriptionData SourceCount Per Minutemeter_oap_instance_jvm_gc_countGC Countoap self observabilityMBmeter_oap_instance_jvm_memory_bytes_usedMemoryoap self observabilityms / minmeter_oap_instance_jvm_young_gc_timeGC Time (ms / min)oap self observabilityms / minmeter_oap_instance_jvm_old_gc_timeGC Time (ms / min)oap self observabilityCount Per Minutemeter_oap_instance_mesh_countMesh Analysis Count (Per Minute)oap self observabilityCount Per Minutemeter_oap_instance_mesh_analysis_error_countMesh Analysis Count (Per Minute)oap self observabilitymsmeter_oap_instance_trace_latency_percentileTrace Analysis Latency (ms)oap self observabilityCountmeter_oap_jvm_class_loaded_countClass Countoap self observabilityCountmeter_oap_jvm_class_total_unloaded_countClass Countoap self observabilityCountmeter_oap_jvm_class_total_loaded_countClass Countoap self observabilityCountmeter_oap_instance_persistence_prepare_countPersistence Count (Per 5 Minutes)oap self observabilityCountmeter_oap_instance_persistence_execute_countPersistence Count (Per 5 Minutes)oap self observabilityCountmeter_oap_jvm_thread_live_countThread Countoap self observabilityCountmeter_oap_jvm_thread_peak_countThread Countoap self observabilityCountmeter_oap_jvm_thread_daemon_countThread Countoap self observabilitymsmeter_oap_instance_persistence_execute_percentilePersistence Execution Latency Per Metric Type (ms)oap self observabilitymsmeter_oap_instance_persistence_prepare_percentilePersistence Preparing Latency Per Metric Type (ms)oap self observabilityCountmeter_oap_jvm_thread_runnable_countThread State Countoap self observabilityCountmeter_oap_jvm_thread_timed_waiting_countThread State Countoap self observabilityCountmeter_oap_jvm_thread_blocked_countThread State Countoap self observabilityCountmeter_oap_jvm_thread_waiting_countThread State Countoap self observabilityCount per minutemeter_oap_instance_metrics_aggregationAggregation (Per Minute)oap self observabilitymsmeter_oap_instance_mesh_latency_percentileMesh Analysis Latency (ms)oap self observabilityCount per minutemeter_oap_instance_trace_countTrace Analysis Count (Per Minute)oap self observabilityCount per minutemeter_oap_instance_trace_analysis_error_countTrace Analysis Count (Per Minute)oap self observabilityPercentagemeter_oap_instance_cpu_percentageCPU (%)oap self observabilityCountmeter_oap_instance_metrics_persistent_cachecount of metrics cache hit and no-hitoap self observability从指标构成可以看出SO11Y 覆盖了五大观察维度JVM 资源内存、类加载、线程数与线程状态、GC 行为young/old GC 次数与耗时、核心处理链路Trace 分析、Mesh 分析、指标聚合、持久化执行、处理延迟Trace/Mesh/Persistence 的百分位延迟以及CPU 使用率。4.1 指标背后的 MAL 表达式解析仪表盘中的每个指标都对应 otel-rules/oap.yaml 中的一条 MAL 规则。以下选取典型规则说明其计算逻辑CPU 使用率instance_cpu_percentage- name: instance_cpu_percentage exp: (process_cpu_seconds_total * 100).sum([service, host_name]).rate(PT1M)将累计 CPU 秒数乘以 100 后按实例聚合再以PT1M1 分钟窗口计算速率得到百分比。Trace 分析延迟百分位instance_trace_latency_percentile- name: instance_trace_latency_percentile exp: trace_in_latency.sum([le, service, host_name, protocol]).increase(PT1M).histogram().histogram_percentile([50,75,90,95,99])先按直方图上界le聚合increase(PT1M)取 1 分钟增量再转换为直方图并计算 P50/P75/P90/P95/P99 百分位。这正是仪表盘中trace_latency_percentile与mesh_latency_percentile类指标的数据来源。GC 次数与耗时instance_jvm_gc_count/instance_jvm_gc_time- name: instance_jvm_gc_count exp: jvm_gc_collection_seconds_count.tagMatch(gc, PS Scavenge|Copy|ParNew|G1 Young Generation|PS MarkSweep|MarkSweepCompact|ConcurrentMarkSweep|G1 Old Generation) .sum([service, host_name, gc]).increase(PT1M) .tag({tags - if (tags[gc] PS Scavenge || tags[gc] Copy || tags[gc] ParNew || tags[gc] G1 Young Generation) {tags.gc young_gc_count} }) .tag({tags - if (tags[gc] PS MarkSweep || tags[gc] MarkSweepCompact || tags[gc] ConcurrentMarkSweep || tags[gc] G1 Old Generation) {tags.gc old_gc_count} })通过tagMatch按垃圾收集器名称筛选聚合后使用tag变换将具体 GC 实现归一化为young_gc_count/old_gc_count耗时规则同理归一化为young_gc_time/old_gc_time从而与仪表盘中的 young/old GC 指标对应。指标聚合量instance_metrics_aggregation- name: instance_metrics_aggregation exp: metrics_aggregation.tagEqual(dimensionality, minute).sum([service, host_name, level]).increase(PT1M) .tag({tags - if (tags[level] 1) {tags.level L1 aggregation} }).tag({tags - if (tags[level] 2) {tags.level L2 aggregation} })仅保留minute维度的聚合计数按聚合层级level归一化为 L1 aggregation / L2 aggregation 标签。E2E 测试 so11y-cases.yaml 中正用swctl查询meter_oap_instance_metrics_aggregation{levelL1 aggregation}来验证该规则。4.2 指标可用性的 E2E 验证仓库中的 so11y E2E 用例 通过swctl逐一验证了核心指标的可用性例如# 检查 SO11Y_OAP 层、oap-server 服务及其实例 swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql layer ls swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql service ls swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql instance list --service-nameoap-server # 验证具体指标有值 swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql metrics exec --expressionmeter_oap_instance_cpu_percentage --instance-namehttp://localhost:1234 --service-nameoap-server swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql metrics exec --expressionmeter_oap_instance_trace_count --instance-namehttp://localhost:1234 --service-nameoap-server swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql metrics exec --expressionmeter_oap_instance_trace_latency_percentile{p90,99} --instance-namehttp://localhost:1234 --service-nameoap-server这类查询可直接用于日常运维中通过 GraphQL 校验 SO11Y 数据是否正常。五、Customizations自定义指标与仪表盘SO11Y 的指标、表达式与仪表盘面板均可按需定制指标定义与抓取规则位于发行包config目录下的fetcher-prom-rules/self.yaml定义 Prometheus 抓取的原始指标仓库中该文件随发行包分发打包规则见 apm-dist/src/main/assembly/binary.xml 中fetcher-prom-rules/*.yaml的 include 配置MAL 表达式规则位于 config/otel-rules/oap.yaml。修改该文件中的metricsRules即可新增或调整自观测指标的过滤、计算与聚合逻辑再通过SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULESoap启用仪表盘面板自观测仪表盘面板配置随 SkyWalking Horizon UI bundleapache/skywalking-horizon-ui分发OAP 后端不再托管 UI 仪表盘 JSON。自定义面板需在 Horizon UI 侧进行。5.1 定制示例新增一条自观测指标以新增OTel 指标接收量为例该规则已内建于 oap.yaml其结构可作为自定义模板- name: otel_metrics_received exp: otel_metrics_latency_count.sum([service, host_name]).increase(PT1M)在metricsRules中追加形如name exp的条目并确保exp中的标签聚合维度包含service、host_name以匹配expSuffix定义的实例维度指标前缀自动继承metricPrefix: meter_oap最终指标名为meter_oap_name修改后重启 OAP 或通过动态配置机制使规则生效随后即可在 GraphQL/UI 中按meter_oap_name查询。六、小结SkyWalking OAP 自观测仪表盘打通了OAP 自身遥测 → Prometheus 端点 → OTel Collector 回采 → MAL 分析入库 → UI 面板的完整闭环。掌握本文的数据流与配置后你可以在静态 IP 与 Kubernetes 两种场景下快速开启 SO11Y 监控读懂 27 项自观测指标的含义、单位与其背后的 MAL 计算逻辑借助swctl命令校验指标可用性基于otel-rules/oap.yaml定制自己的自观测指标与面板。进一步阅读MAL 语言详解、OAP 遥测配置、OpenTelemetry Receiver、OAP 熔断机制。赞分享可观测性APM链路追踪指标监控日志分析微服务【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址https://gitcode.com/gh_mirrors/sk/skywalking点击查看免费下载相关推荐SkyWalking OAP 与 Satellite 自可观测性SO11Y仪表盘实战指南SkyWalking OAP 与 Satellite 自可观测性SO11Y仪表盘实战指南 SkyWalking OAP 后端本身是一个分布式流式处理系统其可观测性后端微服务云原生SkyWalking OAP 后端自观测so11y实践Prometheus 遥测指标暴露、OpenTelemetry 采集与 Kubernetes 部署指南SkyWalking OAP 后端自观测so11y实践Prometheus 遥测指标暴露、OpenTelemetry 采集与 Kubernetes 部署指可观测性后端微服务云原生SkyWalking Go Agent 自可观测性so11y监控指标清单、MAL 表达式与仪表盘配置全解SkyWalking Go Agent 自可观测性so11y监控指标清单、MAL 表达式与仪表盘配置全解 Go Agent 自可观测性Self Obse可观测性APM链路追踪指标监控日志分析微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进