容器标准输出

简介

input_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、环境变量等)。

配置参数

基本参数

筛选容器参数

数据处理参数

数据处理环境变量

默认日志字段

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

样例

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

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

1. 获取环境变量。

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

命令提示:

docker inspect

crictl inspect

ctr -n k8s.io containers info

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

2. 创建iLogtail采集配置。

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

    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. 创建Logtail采集配置。

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

    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层级的信息。

命令提示:

kubectl describe

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

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

    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. 创建Logtail采集配置。 Logtail采集配置示例如下所示。

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

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

采集输出在标准错误流的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. 创建Logtail采集配置。 Logtail采集配置示例如下所示。

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

Last updated