日志采集与加工服务

更新时间:
复制 MD 格式

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

优势

传统日志采集方案通常需要在采集端与 Elasticsearch 之间自建 Kafka + Logstash 多级管道来应对高并发写入。日志采集与加工服务将这些中间组件整合为全托管的服务端写入通道,将四级链路简化为两级,核心优势如下:

对比维度

传统架构

日志采集与加工服务

链路架构

采集端 → Kafka → Logstash → ES,四级串联,组件多

采集端 → 托管服务 → ES,两级链路,配置一个写入 Endpoint 即可接入

运维负担

需自行部署和维护 Kafka、Logstash,管理 Broker 扩缩容、Topic、Partition、Consumer Group 等

全托管,无需购买和维护额外中间件

故障排查

故障点多,需逐一排查各环节状态和配置

链路短,排查范围大幅缩小

写入能力

依赖自行管理的 Kafka 缓冲能力,需手动扩缩容

托管的高并发写入,自动应对流量洪峰,保障数据不丢失

资源成本

需按峰值流量预留 Kafka 和 Logstash 集群资源,低峰期闲置浪费

按需使用,无需预留独立集群资源

兼容性

各组件间存在版本兼容要求,升级需同步调整配置

支持 Filebeat 和 OTel 两种接入协议,兼容现有采集端,全托管免维护

使用限制

  • 支持 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. 提交工单

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

相关文档