日志采集与加工

更新时间:
复制为 MD 格式

日志采集与加工为阿里云Elasticsearch(ES)提供托管的服务端写入能力,解决自建 ELK 方案中日志高并发写入的性能瓶颈和运维复杂度问题。创建任务后,平台自动生成写入 Endpoint,只需在采集端(如 Filebeat、OpenTelemetry Collector)中配置该 Endpoint,即可将日志数据写入 Elasticsearch。

使用限制

  • 支持 ES 7.10 和 8.17.0 版本。

  • OpenTelemetry 采集方式仅支持 8.17.0 版本,Filebeat 采集方式支持 7.10 和 8.17.0 版本。

步骤一:创建日志写入任务

  1. 登录阿里云Elasticsearch控制台

  2. 单击目标实例ID进入基本信息,在左侧导航栏单击离线数据处理

  3. 离线数据处理页面,找到日志采集与加工服务卡片,单击立即使用

  4. 日志采集与加工服务页面,单击创建,配置以下参数:

    参数

    说明

    任务名称

    自定义任务名称,用于标识该写入任务。

    API Key

    在下拉菜单中选择可用的 API Key。如暂无可用 API Key,请提前前往 OpenSearch-AI 搜索开放平台完成创建

    用户名

    目标 Elasticsearch 实例的用户名,用于写入鉴权。

    密码

    目标 Elasticsearch 实例的密码。

    专有网络

    选择日志源端所在的 VPC,默认为 Elasticsearch 实例所在的 VPC。每个写入任务绑定一个 VPC,请确保日志源端与所绑定的 VPC 网络互通。

    交换机

    在下拉菜单中选择 VSwitch,默认为 Elasticsearch 实例所在的 VSwitch。不满足可用区要求的 VSwitch 将置灰显示,不可选择。

  5. 确认各参数配置无误,单击完成,等待任务创建完成。

    任务创建完成后,系统自动生成一个写入 Endpoint(格式为 http://t-**********.private.-hangzhou.es-log.aliyuncs.com),用于接收日志数据。

步骤二:获取写入 Endpoint

任务创建完成后,在任务详情页面获取写入 Endpoint,后续采集端将通过该地址发送日志数据。

  1. 在日志采集与加工服务页面的任务列表中,找到目标任务,单击查看

  2. 在任务详情页面,获取写入 Endpoint:

    • VPC私网地址:默认启用,适用于同 VPC 内的采集端。

    • 公网地址:默认关闭。如需从公网采集日志,开启公网域名并配置公网访问白名单。

  3. 在任务详情页面下方,根据 Elasticsearch 实例版本和采集方式,查看对应的配置文件模板:

    • 8.17.0 版本:支持 OpenTelemetry Collector 和 Filebeat。

    • 7.10 版本:仅支持 Filebeat。

    单击复制即可获取已填入 Endpoint 和鉴权信息的完整配置文件。

步骤三:部署 OpenTelemetry 采集端

OpenTelemetry(OTel)采集方式仅支持 8.17.0 版本。如使用 Filebeat 采集方式,将步骤二中复制的 Filebeat 配置文件应用到 Filebeat 即可,无需执行本步骤。

以下以在 ACK 集群中部署 Elastic Agent(OTel 兼容模式)为例,说明如何将容器日志通过托管写入 Endpoint 采集到 Elasticsearch。

1. 了解 OTel 配置文件

步骤二中复制的 OTel 配置文件已自动填入写入 Endpoint 和鉴权信息,核心结构如下:

receivers:
  # 日志接收器:采集指定路径下的日志文件
  filelog:
    include: [/path/to/logs/*.log]   # 日志文件路径,根据实际路径修改

    exclude: [ ]

    start_at: end                    # 从文件末尾开始读取,仅采集新增日志
    multiline:
      line_start_pattern: ^2025-     # 多行日志的起始标志,根据实际日志格式修改
exporters:
  # 日志导出器:将日志发送到托管写入 Endpoint
  elasticsearch/logs:
    endpoints: ["http://es-cn-xxxxxxpxi00xxxxxx.elasticsearch.aliyuncs.com:9200"]  # 任务详情页中的写入 Endpoint
    user: "elastic"
    password: "your_password"
    tls:
      insecure_skip_verify: false
    retry:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
service:
  pipelines:
    logs:
      receivers: [filelog]
      exporters: [elasticsearch/logs]

配置项

说明

receivers.filelog.include

日志文件采集路径,支持通配符。需与业务容器的实际日志输出路径一致。

receivers.filelog.start_at

设为 end 表示从文件末尾开始读取,避免重复采集历史日志。

receivers.filelog.multiline

多行日志识别规则。例如 Java 异常栈跨越多行,需配置起始行的正则匹配模式。

exporters.elasticsearch/logs.endpoints

写入 Endpoint 地址,从任务详情页自动填入。

exporters.elasticsearch/logs.user

Elasticsearch 实例的用户名。

exporters.elasticsearch/logs.password

Elasticsearch 实例的密码。

exporters.elasticsearch/logs.retry

失败重试策略,按 5s → 30s 递增间隔重试,避免数据丢失。

根据实际环境修改 receivers.filelog.include 中的日志路径和 multiline.line_start_pattern 中的日志格式。详细配置项说明参见 OpenTelemetry Collector Receivers

2. 在 ACK 中创建 ConfigMap

将 OTel 配置文件以 ConfigMap 的形式部署到 ACK 集群。

  1. 登录容器服务 ACK 控制台,选择目标集群。

  2. 在左侧导航栏,单击配置管理 > 配置项

  3. 单击创建,创建一个名为 otel-config 的配置项,添加键值对:

    • otel.yml

    • :粘贴步骤二中复制的 OTel 配置文件内容。

3. 部署 Sidecar 容器

在业务应用的 Deployment 或 StatefulSet 中,以 Sidecar 模式添加 Elastic Agent 容器,与业务容器共享日志卷。

  1. 在 ACK 控制台的工作负载 > 无状态(或有状态)中,找到目标工作负载,单击编辑

  2. 添加共享日志卷:在数据卷区域,单击增加本地存储,添加一个 emptyDir 类型的卷(如命名为 app-log),并挂载到业务容器的日志输出路径。

  3. 单击添加容器,配置 Sidecar 容器:

    • 镜像名称elastic/elastic-agent:9.1.5(建议预先推送到阿里云容器镜像服务 ACR)

    • 环境变量:添加 ELASTIC_AGENT_OTEL,值为 true,启用 OpenTelemetry 采集模式

  4. 为 Sidecar 容器配置两个卷挂载:

    挂载项

    卷名称

    容器路径

    说明

    共享日志卷

    app-log

    /path/to/logs

    与业务容器的日志路径一致

    OTel 配置

    otel-config(ConfigMap)

    /usr/share/elastic-agent/otel.yml(子路径:otel.yml

    挂载单个文件,避免覆盖目录

  5. 单击更新提交变更。Kubernetes 自动滚动重启 Pod,新 Pod 将包含业务容器和 Sidecar 容器。

4. 验证日志采集

  1. 在 ACK 控制台查看 Sidecar 容器的日志,确认其已正常启动。

  2. 登录 Kibana 控制台,执行以下查询验证日志是否成功写入:

    GET /logs-filelog-default/_search
    {
      "query": {
        "match_all": {}
      }
    }

    查询返回业务日志记录,表示采集链路已建立。

管理日志写入任务

在日志采集与加工服务页面的任务列表中,可对已有任务执行以下操作:

操作

说明

查看

查看任务详情,包括创建信息、写入 Endpoint、采集端配置

停止

暂停运行中的写入任务,暂停后采集端将无法通过该 Endpoint 写入数据

删除

删除写入任务,删除后该任务的 Endpoint 将永久失效

常见问题

如果 Elasticsearch 中没有写入预期的日志数据,可按以下步骤排查:

  1. 确认任务状态

    登录阿里云Elasticsearch控制台,在写入任务列表页面,确认任务状态是否为运行中。若任务状态异常,请检查 VPC 专有网络及交换机配置是否正确,确保日志源端与所绑定的 VPC 网络互通。

  2. 查看任务错误日志

    在任务列表单击image进入任务详情页面查看错误日志。

    若错误日志中存在异常记录,请根据错误信息进行针对性排查。例如,日志中出现以下报错,表示 Elasticsearch 用户认证失败,请检查账号密码或 API Key 是否正确配置:

    reason: unable to authenticate user [elastic] for REST request [/_bulk]
    type: security_exception
    status: 401
  3. 提交工单

    若通过以上步骤仍无法定位问题,请提交工单寻求技术支持,并在工单中附上详细的问题描述及相关错误日志,以便技术人员快速定位问题。

相关文档