阿里云国际版ACK可观测性全景指南:ARMS Prometheus监控 + SLS日志服务 + 分布式链路追踪(2026最新版)

📅 · ChengziCloud - 一站式国际云开户与充值服务

一句话结论

Meta Description: 全面掌握阿里云国际版ACK可观测性体系:ARMS Prometheus监控、SLS日志采集分析、分布式链路追踪、Grafana可视化大盘。

本文要点
  • 前言
  • ACK可观测性产品矩阵全景图
  • ARMS Prometheus:ACK指标监控的生产级方案
  • SLS日志服务:ACK日志的集中式管理
  • 分布式链路追踪:打通微服务调用链
  • Grafana统一可视化大盘
  • 生产环境可观测性Checklist

Meta Description: 全面掌握阿里云国际版ACK可观测性体系:ARMS Prometheus监控、SLS日志采集分析、分布式链路追踪、Grafana可视化大盘。从零搭建生产级ACK监控告警平台。

关键词:阿里云ACK可观测性、ARMS Prometheus监控、SLS日志服务、ACK链路追踪、Grafana大盘、Kubernetes监控、ACK告警配置

前言

在云原生时代,可观测性(Observability) 已经从"锦上添花"变成了"生存必备"。当你的ACK集群上跑着几十个微服务、上百个Pod时,没有一套完整的监控-日志-追踪体系,故障排查就像在黑暗中摸索。

阿里云国际版为ACK提供了全套托管的可观测性产品矩阵:ARMS Prometheus(托管Prometheus监控)、SLS日志服务(集中式日志管理)、链路追踪Tracing Analysis(分布式调用链分析)以及Grafana托管服务(可视化大盘)。本文将逐一拆解每个组件的配置与最佳实践。

ACK可观测性产品矩阵全景图

在深入配置之前,先了解阿里云ACK可观测性生态的全貌:

产品对标开源核心能力计费方式推荐场景
ARMS PrometheusPrometheus + Thanos指标采集、存储、查询、告警按指标数据量/节点数生产级指标监控
SLS日志服务Elasticsearch + Logstash日志采集、索引、分析、可视化按写入量/存储量集中式日志管理
链路追踪Jaeger / Zipkin分布式调用链分析、依赖拓扑按Span数量微服务调用链诊断
Grafana托管Grafana统一可视化大盘免费(托管)多数据源统一展示
ACK控制台监控Kubernetes Dashboard集群/节点/Pod基础指标免费基础资源监控
云监控CMS—ECS/SLB/RDS等云资源监控免费(基础)云产品资源监控

核心思路:ARMS Prometheus 管指标(Metrics),SLS 管日志(Logs),链路追踪管调用链(Traces)——三者组成可观测性"三柱"。

一、ARMS Prometheus:ACK指标监控的生产级方案

1.1 为什么不用自建Prometheus?

很多团队习惯在ACK集群里自建Prometheus Operator,但生产环境会遇到三个致命问题:

问题自建PrometheusARMS Prometheus
数据持久化需要自己配置PVC/远程存储,Pod漂移可能丢数据全托管存储,数据90天自动保留
高可用需要部署Thanos/Cortex,配置复杂开箱即用,SLA 99.9%
大规模集群单机Prometheus内存OOM是常态自动分片,支持万级节点集群
告警管理自建Alertmanager,无ACK事件集成内置告警模板,支持ACK事件、钉钉/企业微信通知

1.2 开启ARMS Prometheus监控

通过阿里云控制台操作(或CLI/API):


# 方式一:控制台操作
# ACK控制台 → 集群列表 → 选择目标集群 → 运维管理 → Prometheus监控 → 开启

# 方式二:aliyun CLI(国际版)
aliyun cs MODIFY_CLUSTER_CONFIG \
  --ClusterId <cluster-id> \
  --region ap-southeast-1 \
  --body '{
    "arms_prometheus": {
      "enabled": true,
      "retention_days": 90
    }
  }'

开启后,ARMS会自动部署 arms-prom 组件到集群中(DaemonSet + Deployment形式),无需手动管理。

1.3 关键指标速查表

ARMS Prometheus预置了大量ACK专属指标和控制台大盘。以下是生产环境最常用的一组PromQL查询:

监控场景PromQL查询告警阈值建议
节点CPU100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)> 80%
节点内存(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100> 85%
Pod CPU限流rate(container_cpu_cfs_throttled_seconds_total[5m])> 0.1
Pod重启次数rate(kube_pod_container_status_restarts_total[15m]) > 0> 0
Deployment副本不足kube_deployment_spec_replicas - kube_deployment_status_replicas_available> 0
PVC使用率kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes * 100> 80%
API Server延迟histogram_quantile(0.99, rate(apiserver_request_duration_seconds_bucket[5m]))> 1s (P99)

1.4 配置ACK专属告警规则

ARMS Prometheus自带ACK场景化告警模板,建议第一时间启用以下告警:


# 通过ARMS控制台 → 告警规则 → 创建Prometheus告警
# 或通过Terraform/Pulumi等IaC方式管理

# 示例:节点不可用告警
apiVersion: monitoring.aliyun.com/v1
kind: PrometheusRule
metadata:
  name: ack-node-alerts
  namespace: arms-prom
spec:
  groups:
  - name: node.rules
    rules:
    - alert: NodeNotReady
      expr: kube_node_status_condition{condition="Ready",status="true"} == 0
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "节点 {{ $labels.node }} 已不可用超过5分钟"
        
    - alert: NodeDiskPressure
      expr: kube_node_status_condition{condition="DiskPressure",status="true"} == 1
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "节点 {{ $labels.node }} 磁盘空间不足"

    - alert: HighPodRestartRate
      expr: rate(kube_pod_container_status_restarts_total[15m]) > 0.05
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Pod {{ $labels.pod }} 频繁重启,速率: {{ $value }}次/秒"

二、SLS日志服务:ACK日志的集中式管理

2.1 Logtail采集架构

阿里云ACK通过 Logtail 组件采集容器日志,架构如下:


┌────────────────────────────────────────────────────────────┐
│                       ACK 集群                              │
│  ┌─────────────────┐  ┌─────────────────┐                  │
│  │   Pod A          │  │   Pod B          │                 │
│  │  stdout/stderr   │  │  /var/log/app/*  │                 │
│  └──────┬───────────┘  └────────┬─────────┘                │
│         │                       │                           │
│  ┌──────▼───────────────────────▼──────────┐                │
│  │        Logtail DaemonSet                │                │
│  │  (每个节点一个Pod,自动采集容器日志)      │                │
│  └────────────────────┬────────────────────┘                │
└───────────────────────┼─────────────────────────────────────┘
                        │
              ┌─────────▼─────────┐
              │   SLS Logstore    │
              │  (日志存储+索引)   │
              └─────────┬─────────┘
                        │
          ┌─────────────┼─────────────┐
          │             │             │
     ┌────▼────┐  ┌─────▼────┐  ┌─────▼─────┐
     │ 查询分析 │  │ 可视化   │  │ 告警通知   │
     │ (SQL)   │  │ (图表)   │  │ (钉钉等)   │
     └─────────┘  └──────────┘  └───────────┘

2.2 安装Logtail并配置采集

Logtail通过ACK组件管理安装:


# 方式一:ACK控制台 → 运维管理 → 组件管理 → 安装 logtail-ds

# 方式二:aliyun CLI
aliyun cs INSTALL_ADDON \
  --ClusterId <cluster-id> \
  --name logtail-ds \
  --region ap-southeast-1

安装后,在SLS控制台创建Logtail采集配置。以下是生产级配置示例——采集Spring Boot应用JSON日志:


# Logtail采集配置(通过SLS控制台操作)
# 关键配置项:
inputType: container_stdout           # 采集标准输出
inputDetail:
  IncludeLabel:
    app: spring-boot-api              # 只采集带此标签的Pod
  ExcludeLabel:
    env: test                         # 排除测试环境
  
processorType: processor_parse_json   # 解析JSON日志
processorDetail:
  SourceKey: content
  KeepSource: false                   # 解析后丢弃原始字段
  
# 索引配置(加速查询)
index:
  keys:
    level: text                       # 日志级别(INFO/WARN/ERROR)
    traceId: text                     # 链路追踪ID
    message: text                     # 日志内容
    timestamp: long                   # 时间戳
  ttl: 30                             # 日志保留30天

2.3 SLS查询与分析实战

SLS支持类SQL的查询语法,比 kubectl logs 强大得多:


-- 1. 查询最近1小时ERROR级别日志
* | SELECT "timestamp", "message" 
    WHERE "level" = 'ERROR' 
    AND __time__ > now() - 3600
    ORDER BY __time__ DESC 
    LIMIT 100

-- 2. 按服务统计错误率(日志分析)
* | SELECT "app_name", 
    COUNT(*) as total,
    COUNT_IF("level" = 'ERROR') as errors,
    ROUND(COUNT_IF("level" = 'ERROR') * 100.0 / COUNT(*), 2) as error_rate
    WHERE __time__ > now() - 3600
    GROUP BY "app_name"
    HAVING errors > 0
    ORDER BY error_rate DESC

-- 3. 通过traceId串联一次请求的所有日志
* | SELECT "timestamp", "service", "message"
    WHERE "traceId" = 'a1b2c3d4e5f6'
    ORDER BY "timestamp" ASC

-- 4. P99响应时间分析(需要日志中包含duration字段)
* | SELECT 
    approx_percentile("duration_ms", 0.50) as p50,
    approx_percentile("duration_ms", 0.95) as p95,
    approx_percentile("duration_ms", 0.99) as p99
    WHERE __time__ > now() - 3600

2.4 SLS告警配置

基于日志内容配置告警,比指标告警更细粒度:

告警场景SLS查询条件通知渠道
应用异常level = 'ERROR' 出现频率 > 10次/分钟钉钉群 + 短信
认证失败message like '%Authentication failed%'钉钉群
慢请求duration_ms > 3000邮件
磁盘日志暴涨Logstore写入速率突增 > 3倍钉钉群

三、分布式链路追踪:打通微服务调用链

3.1 ACK链路追踪方案对比

阿里云ACK支持两种链路追踪方案:

方案原理侵入性适用场景
ARMS Tracing(推荐)自动注入Java Agent,无需改代码零侵入Java应用(Spring Boot/Dubbo等)
OpenTelemetry SDK在代码中手动集成OTel SDK需改代码多语言(Go/Python/Node.js等)
Jaeger Operator在ACK自建Jaeger需改代码自建方案,完全控制

3.2 零侵入接入ARMS链路追踪(Java)

Java应用接入ARMS链路追踪只需两步——在Deployment中加上ARMS Agent的InitContainer和JVM参数:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  template:
    metadata:
      labels:
        app: order-service
    spec:
      # 关键:共享Volume传递Agent文件
      volumes:
      - name: arms-agent
        emptyDir: {}
      
      initContainers:
      - name: arms-agent-init
        image: registry.ap-southeast-1.aliyuncs.com/arms/arms-agent:latest
        command: ['cp', '-r', '/arms-agent/.', '/arms-agent-dir/']
        volumeMounts:
        - name: arms-agent
          mountPath: /arms-agent-dir
      
      containers:
      - name: app
        image: your-registry/order-service:latest
        env:
        # 关键JVM参数:加载ARMS Agent
        - name: JAVA_TOOL_OPTIONS
          value: >-
            -javaagent:/arms-agent/arms-bootstrap.jar
            -Darms.licenseKey=<your-arms-key>
            -Darms.appName=order-service
            -Darms.env=production
            -Darms.region=ap-southeast-1
        volumeMounts:
        - name: arms-agent
          mountPath: /arms-agent

接入后,ARMS控制台会自动展示服务拓扑、调用链瀑布图、接口耗时分析。

3.3 Go应用接入OpenTelemetry

对于Go/Python等非JVM语言,推荐使用OpenTelemetry SDK:


// Go应用接入OpenTelemetry示例
package main

import (
    "context"
    "net/http"
    
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
    "go.opentelemetry.io/otel/sdk/trace"
    "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
)

func initTracer() (*trace.TracerProvider, error) {
    // 通过OTLP协议上报到ARMS
    exporter, err := otlptracegrpc.New(
        context.Background(),
        otlptracegrpc.WithEndpoint("tracing-analysis-dc.ap-southeast-1.aliyuncs.com:8090"),
        otlptracegrpc.WithInsecure(),
    )
    if err != nil {
        return nil, err
    }
    
    tp := trace.NewTracerProvider(
        trace.WithBatcher(exporter),
        trace.WithResource(resource.NewWithAttributes(
            semconv.ServiceNameKey.String("order-service"),
        )),
    )
    otel.SetTracerProvider(tp)
    return tp, nil
}

func main() {
    tp, _ := initTracer()
    defer tp.Shutdown(context.Background())
    
    // 自动注入HTTP tracing
    http.Handle("/api/orders", otelhttp.NewHandler(orderHandler, "CreateOrder"))
    http.ListenAndServe(":8080", nil)
}

四、Grafana统一可视化大盘

4.1 创建ACK专用Grafana大盘

阿里云提供了Grafana托管工作区,支持一键导入ACK监控大盘模板:


# 在ACK控制台 → 运维管理 → Grafana → 创建工作区
# 或使用aliyun CLI创建

# 导入ACK预置大盘模板(Dashboard ID):
# - 节点监控大盘:12884
# - Pod资源大盘:15757
# - API Server监控:12006
# - CoreDNS监控:14981

创建完成后,Grafana可以同时接入ARMS Prometheus(指标)、SLS(日志)、CloudMonitor(云资源)三个数据源,在一个页面中实现从指标异常 → 日志上下文 → 调用链追踪的完整排查路径。

4.2 核心大盘JSON配置要点


{
  "panels": [
    {
      "title": "集群Pod状态概览",
      "targets": [
        {
          "expr": "sum(kube_pod_status_phase{phase='Running'}) by (namespace)",
          "legendFormat": "{{ namespace }}"
        }
      ]
    },
    {
      "title": "节点资源水位",
      "targets": [
        {
          "expr": "100 - (avg by(node) (rate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)",
          "legendFormat": "CPU: {{ node }}"
        },
        {
          "expr": "(1 - node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes) * 100",
          "legendFormat": "Memory: {{ node }}"
        }
      ]
    }
  ]
}

五、生产环境可观测性Checklist

在ACK集群投产前,逐项确认以下配置:

检查项配置要求验证命令/方法
✅ ARMS Prometheus已开启所有节点的指标正常上报ARMS控制台 → 指标探索 → up 查询
✅ 四大核心告警已配置节点不可用、Pod重启、磁盘压力、CPU过载ARMS → 告警规则列表
✅ 告警通知渠道已打通钉钉群/企业微信/邮件至少一个触发测试告警验证
✅ Logtail已安装并采集应用日志正常流入SLSSLS控制台 → Logstore → 数据预览
✅ SLS日志索引已配置关键字段(level/traceId/message)可查SLS查询 `*SELECT * LIMIT 1`
✅ 链路追踪已接入服务拓扑可见,调用链可查ARMS → 应用列表 → 调用链查询
✅ Grafana大盘已创建核心指标面板正常渲染Grafana工作区URL可访问
✅ 日志保留策略已设定SLS Logstore TTL已设(建议30-90天)SLS控制台 → Logstore属性

六、常见问题 FAQ

Q: ARMS Prometheus和ACK自带的监控有什么区别?

A: ACK控制台的监控只提供基础的CPU/内存/网络指标,数据保留时间短(通常7天),无法自定义告警和PromQL查询。ARMS Prometheus是完整的托管Prometheus服务,支持自定义指标、持久化存储、多维度告警和大盘。

Q: 自建Prometheus迁移到ARMS需要改动多少配置?

A: 几乎零改动。ARMS Prometheus完全兼容PromQL和Prometheus配置格式。已有的PrometheusRule、ServiceMonitor、PodMonitor可以直接迁移,只需把数据写入地址改为ARMS的Remote Write endpoint。

Q: SLS日志服务的成本怎么控制?

A: 三招控成本:(1)合理设置Logstore的TTL(不必永久保留);(2)使用数据加工过滤掉DEBUG级别日志;(3)低频查询的日志降低索引字段数量。通常可以降低40%-60%费用。

Q: 链路追踪对应用性能有影响吗?

A: ARMS Java Agent采用采样机制(默认10%采样率,可调),对应用CPU开销通常在1-3%以内。如果使用全量采集可能有一定影响,建议生产环境保持10%-20%采样率。

Q: 跨账号/跨地域的ACK集群能做到统一可观测性吗?

A: 可以。同一个ARMS工作区可以接入多个ACK集群(不同账号通过RAM角色授权),SLS支持跨地域日志汇集(通过日志服务数据加工),Grafana工作区可以连接所有集群的数据源。建议在管理账号集中搭建全局可观测性平台。

总结

阿里云国际版ACK的可观测性体系已经相当成熟——ARMS Prometheus负责指标监控,SLS负责日志管理,链路追踪负责调用链分析,三者通过Grafana统一呈现,形成完整的"Metrics + Logs + Traces"三角矩阵。

对于刚上ACK的团队,建议按照以下顺序逐步建设:先开ARMS + 配置4大核心告警(1天)→ 安装Logtail采集日志(半天)→ 接入链路追踪(1天)→ 搭建Grafana大盘(半天)。全部配置完成通常不超过3个工作日,但带来的故障排查效率提升是数量级的——从"翻几百行kubectl logs"变成"一条追踪ID看全程"。


本文由 chengzicloud.cloud 提供,点击访问首页了解更多