OpenClaw 日志接入

更新时间:
复制为 MD 格式

介绍如何在主机和 Kubernetes 环境中部署 LoongCollector 数据采集组件,并通过 AgentLoop 控制台完成 OpenClaw 可观测数据的一键接入。

OpenClaw 可观测体系概述

OpenClaw 是一个开源 AI Agent 框架,支持意图理解、任务规划和工具调用等能力,广泛应用于智能客服、代码助手、自动化运维等场景。当大量 OpenClaw 实例在生产环境中运行时,需要一套全链路可观测体系来追踪 Agent 的行为、性能和成本。

AgentLoop 是阿里云面向 LLM 应用的数据观测与数据飞轮平台,围绕 Trace、Log、Metric、Conversation 等运行时数据,提供从采集观测、问题定位到评估实验的端到端闭环能力。

接入 OpenClaw 可观测数据分为两步:

  1. 部署 LoongCollector:在目标主机或集群中安装日志采集组件,实现零侵入的数据采集。

  2. 接入 AgentLoop:通过 AgentLoop 控制台的 OpenClaw 数据接入向导,完成会话日志和运行时日志的采集配置。

前提条件

  • 已开通日志服务 SLS。

  • 目标主机或集群已部署 OpenClaw。

  • (主机场景)已约定好机器组的自定义标识(user_defined_id)。该标识是一个自定义字符串,所有相同标识的机器自动组成一个机器组,SLS 以机器组为粒度统一管控采集配置。

步骤一:部署 LoongCollector

在接入 OpenClaw 可观测数据前,需要在目标主机或集群中部署 LoongCollector。LoongCollector 是 SLS 推出的数据采集器,负责将 OpenClaw 的日志数据写入到 SLS 的 LogStore。

主机场景

说明

以下命令中的 user_defined_idregion_id 需替换为自定义的机器组标识与地域标识。请记住该机器组自定义标识,后续步骤中会使用。默认所有机器在同一地域。

在 ECS 部署 LoongCollector

ECS 场景的 OpenClaw 批量部署可以参考通过云助手公共命令安装OpenClaw

  1. 进入ECS控制台-云助手,筛选目标实例并勾选,单击发送命令。

  2. 将以下命令复制到命令内容。

    #!/bin/bash
    region_id=""; user_defined_id=""; set -euo pipefail; wget -T 30 -t 2 "https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh" -O loongcollector.sh && chmod +x loongcollector.sh && sudo ./loongcollector.sh install "${region_id}-internet" && (sudo /etc/init.d/loongcollectord start >/dev/null 2>&1 || sudo /etc/init.d/ilogtaild start >/dev/null 2>&1 || true) && (sudo /etc/init.d/loongcollectord status >/dev/null 2>&1 || sudo /etc/init.d/ilogtaild status >/dev/null 2>&1) && (sudo test -f /etc/ilogtail/user_defined_id || sudo touch /etc/ilogtail/user_defined_id) && (sudo grep -Fxq "${user_defined_id}" /etc/ilogtail/user_defined_id || echo "${user_defined_id}" | sudo tee -a /etc/ilogtail/user_defined_id >/dev/null)
  3. 查看执行结果,如果显示成功执行,则 LoongCollector 部署完成。

在无影云电脑部署 LoongCollector

无影场景的 OpenClaw 部署可以参考通过无影云电脑快速部署OpenClaw(Clawdbot)

  1. 无影云电脑企业版控制台,单击发送远程命令。

  2. 将以下命令复制到命令内容,筛选并勾选目标实例。

    说明

    无影场景需要在安装命令中指定 uid 参数,为日志服务 Project 所属阿里云主账号 ID。

    #!/bin/bash
    region_id=""; uid=""; user_defined_id=""; set -euo pipefail; wget -T 30 -t 2 "https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh" -O loongcollector.sh && chmod +x loongcollector.sh && sudo ./loongcollector.sh install "${region_id}-internet" && (sudo /etc/init.d/loongcollectord start >/dev/null 2>&1 || sudo /etc/init.d/ilogtaild start >/dev/null 2>&1 || true) && (sudo /etc/init.d/loongcollectord status >/dev/null 2>&1 || sudo /etc/init.d/ilogtaild status >/dev/null 2>&1) && sudo mkdir -p /etc/ilogtail/users && (sudo test -f "/etc/ilogtail/users/${uid}" || sudo touch "/etc/ilogtail/users/${uid}") && (sudo test -f /etc/ilogtail/user_defined_id || sudo touch /etc/ilogtail/user_defined_id) && (sudo grep -Fxq "${user_defined_id}" /etc/ilogtail/user_defined_id || echo "${user_defined_id}" | sudo tee -a /etc/ilogtail/user_defined_id >/dev/null)
  3. 查看执行结果,确认命令执行成功。

其他主机场景

其他主机场景,请参考 LoongCollector 安装采集器官方文档完成安装。安装时请确保已配置用户标识和自定义标识。

Kubernetes 场景

Kubernetes 场景下,安装 LoongCollector 组件后会自动创建机器组(命名为 k8s-group-${cluster_id} 的自定义标识型机器组,标识与机器组名一致),直接用于接入 OpenClaw 可观测数据。

ACK 部署 LoongCollector

在 ACK 集群中,通过控制台安装 LoongCollector 组件,支持在新建集群时启用或为已有集群安装。

方式一:新建集群时启用

创建 ACK 集群时,在组件配置页面勾选使用日志服务(默认已勾选),并指定目标 Project(默认命名为 k8s-log-{cluster_id})。系统会自动安装 LoongCollector 并完成基础配置。

方式二:为已有集群安装

  1. 登录容器服务ACK控制台,在左侧导航栏选择集群列表。

  2. 单击目标集群名称,进入集群详情页。

  3. 在左侧导航栏选择运维管理-组件管理。

  4. 在日志与监控区域找到 loongcollector 组件,单击安装。

  5. 在安装对话框中确认参数,单击确定。

验证安装

安装完成后,在守护进程集中查看 loongcollector-ds 的状态是否正常。如果状态正常,则安装成功。

ACS 部署 LoongCollector

ACS 场景部署 OpenClaw 参考 ACS Sandbox 部署最佳实践

ACS(容器计算服务)集成了日志服务 SLS,支持采集集群的容器日志(包括标准输出和文件日志)。

方式一:创建集群时启用日志服务

创建 ACS 集群时,勾选使用日志服务选项。系统会自动安装日志服务组件 alibaba-log-controller,并完成与 SLS 的集成配置。

方式二:为已有集群启用日志服务组件

  1. 登录容器计算服务ACS控制台,在左侧导航栏选择集群列表。

  2. 在运维管理-组件管理-日志与监控区域找到 alibaba-log-controller 组件。

  3. 单击安装,在安装对话框中单击确认。

重要

ACS 集群安装完日志组件后,需要重建业务 Pod,采集才能生效。

执行以下命令确认日志服务组件正常运行:

kubectl get po -n kube-system | grep alibaba-log-controller

其他 Kubernetes 场景

对于自建 Kubernetes 集群,请参考 LoongCollector Kubernetes 安装配置文档,下载自定义安装包,编辑 values.yaml 中的以下必填项后执行安装脚本:

  • projectName:SLS 项目名称。

  • region:地域。

  • aliUid:阿里云账号 UID。

  • accessKeyIDaccessKeySecret:访问密钥。

  • clusterID:集群 ID。

步骤二:接入 AgentLoop

LoongCollector 部署就绪后,通过 AgentLoop 控制台完成 OpenClaw 日志数据的接入配置。支持以下两种接入方式:

  • 通过控制台一键接入:适用于主机场景、Kubernetes 场景和容器场景。

  • 通过 CRD 接入:适用于 Kubernetes 场景,支持版本化管理和 GitOps 流程。

通过控制台一键接入

AgentLoop 提供了针对 OpenClaw 的一键数据接入向导,能够自动创建 LogStore、配置采集规则和数据解析模板,全程只需填写几个参数。

  1. 进入AgentLoop 控制台主页,在左侧导航栏单击接入中心,找到AI应用可观测下的OpenClaw并单击。

  2. 在弹出的页面中选择日志接入页签,选择对应的接入场景(主机场景或 Kubernetes 场景)。

  3. 填写配置参数。

    参数

    说明

    应用名

    用于在单个 Project 下唯一标识一组 OpenClaw 实例,可填写符合格式要求的自定义字符串。输入完成后,单击初始化资源,等待显示"初始化资源完成"。

    Project

    存储日志的 SLS 项目。主机场景可使用工作空间默认的 Project。Kubernetes 场景推荐选择默认创建的 k8s-log-{cluster_id}

    机器组

    选择或创建机器组。主机场景单击立刻创建,自定义机器组名称,选择机器组标识为用户自定义标识,填写步骤一中自定义的 user_defined_id。Kubernetes 场景推荐选择默认创建的 k8s-group-${cluster_id}

  4. 选择要接入的日志类型。SLS 已上线会话日志、运行时日志和定时任务日志的一键接入能力,并为各日志文件预填了默认路径。

    说明

    如果 OpenClaw 的安装目录或运行用户与默认配置不同,请在提交前修改对应的日志路径,否则可能导致采集失败。

  5. 单击下一步,等待提示开通成功,完成接入。

通过 CRD 接入(Kubernetes 场景)

CRD 接入方式适用于 Kubernetes 场景,支持版本化管理,可以纳入 GitOps 或 CI/CD 流程。接入流程分为两步:先通过 CRD 创建 SLS 采集配置,再在 AgentLoop 控制台导入已采集的数据。

使用 CRD 创建 SLS 采集配置

参考以下 OpenClaw 专用 CR 模板(包含运行时日志、会话日志和定时任务日志),编写 YAML 文件。复杂字段可参考AliyunPipelineConfig参数说明文档。

说明

模板中的 ${app_name} 用于唯一标识一组 OpenClaw 实例,请记住该值,后续在 AgentLoop 控制台接入时需要使用。${cluster_id} 替换为实际集群 ID。

运行时日志 CR 模板

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: openclaw-runtime-config-${app_name}
spec:
  config:
    flushers:
      - Logstore: openclaw-runtime
        Type: flusher_sls
    global: {}
    inputs:
      - ContainerFilters:
          K8sPodRegex: ^(openclaw.*)$
        EnableContainerDiscovery: true
        FileEncoding: utf8
        FilePaths:
          - /tmp/openclaw/*.log
        MaxDirSearchDepth: 0
        Type: input_file
    processors:
      - Script: "* | parse-json content | project-away content | extend \"__tag__:__service_name__\" = '${app_name}'"
        TimeoutMilliSeconds: 1000
        Type: processor_spl
  logstores:
    - name: openclaw-runtime
      productCode: openclaw_gateway
  machineGroups:
    - name: k8s-group-${cluster_id}
  project:
    name: k8s-log-${cluster_id}

会话日志 CR 模板

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: openclaw-session-config-${app_name}
spec:
  config:
    flushers:
      - Logstore: openclaw-session
        Type: flusher_sls
    global: {}
    inputs:
      - ContainerFilters:
          K8sPodRegex: ^(openclaw.*)$
        EnableContainerDiscovery: true
        FileEncoding: utf8
        FilePaths:
          - /home/*/.openclaw/agents/*/sessions/*.jsonl
        MaxDirSearchDepth: 0
        Type: input_file
    processors:
      - Script: "* | parse-json content | project-away content | extend \"__tag__:__service_name__\" = '${app_name}'"
        TimeoutMilliSeconds: 1000
        Type: processor_spl
  logstores:
    - encryptConf: {}
      name: openclaw-session
      productCode: openclaw_audit
  machineGroups:
    - name: k8s-group-${cluster_id}
  project:
    name: k8s-log-${cluster_id}

定时任务日志 CR 模板

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: openclaw-cron-config-${app_name}
spec:
  config:
    flushers:
      - Logstore: openclaw-cron
        Type: flusher_sls
    global: {}
    inputs:
      - ContainerFilters:
          K8sPodRegex: ^(openclaw.*)$
        EnableContainerDiscovery: true
        FileEncoding: utf8
        FilePaths:
          - /home/*/.openclaw/cron/runs/*.jsonl
        MaxDirSearchDepth: 0
        Type: input_file
    processors:
      - Script: "* | parse-json content | project-away content | extend \"__tag__:__service_name__\" = '${app_name}'"
        TimeoutMilliSeconds: 1000
        Type: processor_spl
  logstores:
    - encryptConf: {}
      name: openclaw-cron
      productCode: openclaw_cron
  machineGroups:
    - name: k8s-group-${cluster_id}
  project:
    name: k8s-log-${cluster_id}

编写完成后,执行以下命令将 CR 下发到集群:

kubectl apply -f <your-openclaw-pipeline.yaml>
说明

通过 CRD 方式创建的采集配置,后续变更应通过更新 CR 完成,在 SLS 控制台无法修改。

在 AgentLoop 控制台接入数据

CRD 配置下发完成后,需要在 AgentLoop 控制台完成数据导入。

  1. 进入AgentLoop 控制台主页,确保左上角的工作空间与上一步 Project 所在地域一致。在左侧导航栏单击接入中心,找到AI应用可观测下的OpenClaw并单击。

  2. 在弹出的页面中选择日志接入,单击k8s场景,填写以下参数:

    参数

    说明

    应用名

    输入上一步 CRD 中配置的 app_name。输入完成后单击初始化资源,等待显示"初始化资源完成"。

    Project

    选择 CRD 中配置的 Project。

    机器组

    选择 CRD 中配置的机器组。

    容器名称

    与 CRD 中 K8sPodRegex 参数保持一致。

  3. 确认日志类型。已通过 CRD 接入的日志类型会提示"日志源已接入 SLS,尚未接入 AgentLoop"。未通过 CRD 接入的日志类型可以选择是否开启并定义日志路径,一并接入。

  4. 选择完成后,单击立刻接入,完成流程。

步骤三:日志审计效果验证

接入成功后,AgentLoop 控制台的“审计”->“OpenClaw洞察”中即可查看 OpenClaw 的可观测报表,帮助企业从会话追踪、成本分析、质量评估等维度全面洞察 Agent 运行状况。

AgentLoop控制台左侧,点击“AI应用”,也可以看到已接入的应用,并进行更多的探索。

敏感数据脱敏

LoongCollector版本要求>3.3.0

OpenClaw 的日志中可能包含用户手机号、邮箱、IP 地址等敏感信息。为避免敏感数据明文写入 LogStore,可以使用 SLS SPL 提供的 mask 脱敏算子进行数据保护。

SLS 支持两种脱敏方式:

  • 服务端脱敏:通过写入处理器配置 SPL 脱敏规则,在数据写入 LogStore 时进行脱敏处理。

  • 端侧脱敏:在 LoongCollector 采集端配置 SPL 脱敏规则,将敏感信息的保护前置到数据采集阶段。

以下示例展示了在 LoongCollector 中配置端侧脱敏的采集规则:

flushers:
  - Type: flusher_sls
    Logstore: China-agentloop-openclaw
    Endpoint: cn-shanghai-intranet.log.aliyuncs.com
    Region: cn-shanghai
    TelemetryType: logs
    processors:
      - Type: processor_spl
        Script: |
          * | extend content = mask(content, 'regex',
            '(1[3-9]\d{9})', 'md5')
          * | extend content = mask(content, 'regex',
            '([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})', 'md5')
          * | extend content = mask(content, 'regex',
            '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', 'const', '***')
说明

经过端侧 SPL 处理后,日志的上下文信息仍然完整可读,不影响审计与问题排查,而其中的个人敏感信息已在采集阶段完成脱敏保护。