CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/LoongCollector/容器标准输出
文档目录
概览版本管理
什么是输入插件
脚本执行数据【Debug】文本日志【示例】MetricInput主机Meta数据【Debug】Mock数据-Metric主机监控数据MySQL Binlog容器标准输出GO ProfileGPU数据HTTP数据【示例】ServiceInputJournal数据KafkaKubernetes元信息采集【Debug】Mock数据-ServiceSqlServer 查询数据OTLP数据PostgreSQL 查询数据收集 SNMP 协议机器信息Syslog数据

LoongCollector

容器标准输出

servicedockerstdout input插件可以实现从容器标准输出/标准错误流中采集日志,采集的日志内容将会保存在content字段中。支持通过容器元信息筛选待采集容器,并支持多行文本切分、添加容器Meta信息等数据处理操作,概览如下: 容器筛选,每项筛选条件之间为AND关系 支持通过容器Label白名单指定待采集的容器,多个白名单之间关系为OR。 ...

容器标准输出

简介

service_docker_stdout input插件可以实现从容器标准输出/标准错误流中采集日志,采集的日志内容将会保存在content字段中。支持通过容器元信息筛选待采集容器,并支持多行文本切分、添加容器Meta信息等数据处理操作,概览如下:

容器筛选,每项筛选条件之间为AND关系

  • 支持通过容器Label白名单指定待采集的容器,多个白名单之间关系为OR。
  • 支持通过容器Label黑名单排除不要采集的容器,多个黑名单之间关系为OR。
  • 支持通过环境变量白名单指定待采集的容器,多个白名单之间关系为OR。
  • 支持通过环境变量黑名单排除不要采集的容器,多个黑名单之间关系为OR。
  • 支持通过Kubernetes Namespace名称指定待采集的容器。
  • 支持通过Kubernetes Pod名称指定待采集的容器。
  • 支持通过Kubernetes容器名称指定待采集的容器。
  • 支持通过Kubernetes Label白名单指定待采集的容器,多个白名单之间关系为OR。
  • 支持通过Kubernetes Label黑名单排除不要采集的容器,多个黑名单之间关系为OR。

数据处理

  • 支持采集多行日志(例如Java Stack日志等)。
  • 支持上报时自动关联Kubernetes Label信息。
  • 支持上报时自动关联容器Meta信息(例如容器名、IP、镜像、Pod、Namespace、环境变量等)。
  • 支持上报时自动关联宿主机Meta信息(例如宿主机名、IP、环境变量等)。

版本

Stable

版本说明

  • 推荐版本:iLogtail v1.8.0 及以上

配置参数

基本参数

参数 类型 是否必选 说明
Type string 是 插件类型,固定为service_docker_stdout
Stdout bool 否 是否采集标准输出stdout。默认取值为true。

Stderr bool 否 是否采集标准出错信息stderr。默认取值为true。

StartLogMaxOffset Integer 否 首次采集时回溯历史数据长度,单位:字节。建议取值在[131072,1048576]之间。默认取值为128×1024字节。

筛选容器参数

参数 类型 是否必选 说明
IncludeLabel Map,其中LabelKey和LabelValue为String类型 否

容器Label白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置容器Label白名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则容器Label中包含LabelKey的容器都匹配。
  • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才匹配。

    LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为io.kubernetes.container.name,设置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

多个白名单之间为或关系,即只要容器Label满足任一白名单即可匹配。

ExcludeLabel Map,其中LabelKey和LabelValue为String类型 否

容器Label黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置容器Label黑名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则容器Label中包含LabelKey的容器都将被排除。
  • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才会被排除。

    LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为io.kubernetes.container.name,设置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。

IncludeEnv Map,其中EnvKey和EnvValue为String类型 否

设环境变量白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置环境变量白名单,那么EnvKey必填,EnvValue可选填。

  • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器都匹配。
  • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才匹配。

    EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如设置EnvKey为NGINX_SERVICE_PORT,设置EnvValue为^(80|6379)$,表示可匹配服务端口为80、6379的容器。

多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可匹配。

ExcludeEnv Map,其中EnvKey和EnvValue为String类型 否

环境变量黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置环境变量黑名单,那么EnvKey必填,EnvValue可选填。

  • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器的日志都将被排除。
  • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才会被排除。

    EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如设置EnvKey为NGINX_SERVICE_PORT,设置EnvValue为^(80|6379)$,表示可匹配服务端口为80、6379的容器。

多个黑名单之间为或关系,即只要容器的环境变量满足任一键值对即可被排除。

IncludeK8sLabel Map,其中LabelKey和LabelValue为String类型 否

通过Kubernetes Label(定义在template.metadata中)白名单指定待采集的容器。如果您要设置Kubernetes Label白名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都匹配。
  • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才匹配。

    LabelValue默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

多个白名单之间为或关系,即只要Kubernetes Label满足任一白名单即可匹配。

ExcludeK8sLabel Map,其中LabelKey和LabelValue为String类型 否

通过Kubernetes Label(定义在template.metadata中)黑名单排除不采集的容器。如果您要设置Kubernetes Label黑名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都被排除。
  • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才会被排除。

    LabelValue默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

多个黑名单之间为或关系,即只要Kubernetes Label满足任一黑名单对即可被排除。

K8sNamespaceRegex string 否 通过Namespace名称指定采集的容器,支持正则匹配。例如设置为^(default|nginx)$,表示匹配nginx命名空间、default命名空间下的所有容器。
K8sPodRegex string 否 通过Pod名称指定待采集的容器,支持正则匹配。例如设置为^(nginx-log-demo.*)$,表示匹配以nginx-log-demo开头的Pod下的所有容器。
K8sContainerRegex string 否 通过容器名称指定待采集的容器(Kubernetes容器名称是定义在spec.containers中),支持正则匹配。例如设置为^(container-test)$,表示匹配所有名为container-test的容器。

数据处理参数

参数 类型 是否必选 说明
BeginLineRegex string 否

行首匹配的正则表达式。

该配置项为空,表示单行模式。

如果该表达式匹配某行的开头,则将该行作为一条新的日志,否则将此行拼接到上一条日志。

BeginLineCheckLength Integer 否

行首匹配的长度,单位:字节。

默认取值为10×1024字节。

如果行首匹配的正则表达式在前N个字节即可体现,推荐设置此参数,提升行首匹配效率。

BeginLineTimeoutMs Integer 否

行首匹配的超时时间,单位:毫秒。

默认取值为3000毫秒。

如果3000毫秒内没有出现新日志,则结束匹配,将最后一条日志上传到日志服务。

MaxLogSize Integer 否

日志最大长度,默认取值为0,单位:字节。

默认取值为512×1024字节。

如果日志长度超过该值,则不再继续查找行首,直接上传。

ExternalK8sLabelTag Map,其中LabelKey和LabelValue为String类型 否

设置 Kubernetes Label(定义在 template.metadata 中)日志标签后,LoongCollector 将在日志中新增 Kubernetes Label 相关字段。

例如设置 LabelKey 为 app,LabelValue 为 k8s_label_app,当 Pod 中包含 Label app=serviceA 时,会写入字段 k8s_label_app: serviceA;若无名为 app 的 label,则添加空字段 k8s_label_app: 。

ExternalEnvTag Map,其中EnvKey和EnvValue为String类型 否

设置容器环境变量日志标签后,LoongCollector 将在日志中新增容器环境变量相关字段。

例如设置 EnvKey 为 VERSION,EnvValue 为 env_version,当容器中包含环境变量 VERSION=v1.0.0 时,会以 tag 形式添加字段 env_version: v1.0.0;若无该环境变量,则添加空字段 env_version: 。

数据处理环境变量

环境变量 类型 是否必选 说明
ALIYUN_LOG_ENV_TAGS string 否

设置全局环境变量日志标签后,在日志中新增 Agent 所在容器可见的环境变量相关字段。多个环境变量名以 | 分隔。

例如设置为 node_name|node_ip,当采集 Pod 内暴露对应环境变量时,会以 tag 形式添加字段 node_ip:172.16.0.1 与 node_name:worknode。

默认日志字段

所有使用本插件上报的日志均额外携带下列字段。目前暂不支持更改。

字段名称 说明
_time_ 日志采集时间,例如2021-02-02T02:18:41.979147844Z。
_source_ 日志源类型,stdout或stderr。
_image_name_ 镜像名
_container_name_ 容器名
_pod_name_ Pod名
_namespace_ Pod所在的命名空间
_pod_uid_ Pod的唯一标识

样例

示例1:通过容器环境变量黑白名单过滤容器

采集环境变量含NGINX_SERVICE_PORT=80且不含POD_NAMESPACE=kube-system的容器的标准输出。

1. 获取环境变量。

您可以登录容器所在的宿主机查看容器的环境变量。具体操作,请参见获取容器环境变量。

{% hint style="info" %}
命令提示:

docker inspect

crictl inspect

ctr -n k8s.io containers info
{% endhint %}

            "Env": [
                ...
                "NGINX_SERVICE_PORT=80",

2. 创建 LoongCollector 采集配置。

LoongCollector 采集配置示例如下所示。

    inputs:
      - Type: service_docker_stdout
        Stdout: true
        Stderr: false
        IncludeEnv:
          NGINX_SERVICE_PORT: "80"
        ExcludeEnv:
          POD_NAMESPACE: "kube-system"

示例2:通过容器Label黑白名单过滤容器

采集容器Label含io.kubernetes.container.name:nginx且不含io.kubernetes.pod.namespace:kube-system容器的标准输出。

1. 获取容器Label。

您可以登录容器所在的宿主机查看容器的Label。具体操作,请参见获取容器Label。

            "Labels": {
                ...
                "io.kubernetes.container.name": "nginx",

2. 创建LoongCollector 采集配置。

LoongCollector 采集配置示例如下所示。

    inputs:
      - Type: service_docker_stdout
        Stdout: true
        Stderr: false
        IncludeLabel:
          io.kubernetes.container.name: "nginx"
        IncludeLabel:
          io.kubernetes.pod.namespace": "kube-system"

示例3:通过Kubernetes Namespace名称、Pod名称和容器名称过滤容器

采集default命名空间下以nginx-开头的Pod中的nginx容器的标准输出。

1. 获取Kubernetes层级的信息。

{% hint style="info" %}
命令提示:

kubectl describe
{% endhint %}

Name:         nginx-76d49876c7-r892w
Namespace:    default
...
Containers:
  nginx:
    Container ID:...

2. 创建LoongCollector 采集配置。 LoongCollector 采集配置示例如下所示。

    inputs:
      - Type: service_docker_stdout
        Stdout: true
        Stderr: false
        K8sNamespaceRegex: "^(default)$"
        K8sPodRegex: "^(nginx-.*)$"
        K8sContainerRegex: "^(nginx)$"

示例4:通过Kubernetes Label过滤容器

采集Kubernetes Label含app=nginx且不含env=test开头的所有容器的标准输出。

1. 获取Kubernetes层级的信息。

Name:         nginx-76d49876c7-r892w
Namespace:    default
...
Labels:       app=nginx
              ...

2. 创建LoongCollector 采集配置。 LoongCollector 采集配置示例如下所示。

    inputs:
      - Type: service_docker_stdout
        Stdout: true
        Stderr: false
        IncludeK8sLabel:
          app: "nginx"
        ExcludeK8sLabel:
          env: "^(test.*)$"

示例5:多行日志的采集配置

采集输出在标准错误流的Java异常堆栈(多行日志)。

1. 获取日志样例。

2021-02-03 14:18:41.969 ERROR [spring-cloud-monitor] [nio-8080-exec-4] c.g.s.web.controller.DemoController : java.lang.NullPointerException
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
...

根据有区分度的行首编写正则。

行首:2021-02-03 ...

正则:\d+-\d+-\d+.*

2. 创建LoongCollector 采集配置。 LoongCollector 采集配置示例如下所示。

    inputs:
      - Type: service_docker_stdout
        Stdout: false
        Stderr: true
        BeginLineCheckLength: 10
        BeginLineRegex: "\\d+-\\d+-\\d+.*"

文章大纲