shark云原生-日志体系-filebeat高级配置(适用于生产)-更新中

在这里插入图片描述

文章目录

  • 1. filebeat.inputs 静态日志收集器
  • 2. filebeat.autodiscover 自动发现
    • 2.1. autodiscover 和 inputs
    • 2.2. 如何配置生效
    • 2.3. Providers 提供者
    • 2.4. Providers kubernetes
    • 2.5. 配置 templates
      • 2.5.1. kubernetes 自动发现事件中的变量字段
      • 2.5.2 配置 templates
    • 2.6. 基于提示(hints)的自动发现
      • 2.6.1 支持的 **hints**的完整列表:
      • 2.6.2. kubernetes 启用 hints
      • 1.2.4. Appenders
      • 1.2.5. 处理混杂格式日志
  • 2. processors 处理器
    • 2.1. 定义处理器
    • 2.2. 常用处理器
      • 2.2.1. 去除日志中的某些行
      • 2.2.2. 向输出的数据中添加某些自定义字段
      • 2.2.3. 从事件中删除某些字段
    • 2.2.4. add_kubernetes_metadata 详解
      • 2.2.4.1. Indexers 索引器
      • 2.2.4.2. Matchers
    • 2.3. Condition 条件
  • 3. 配置索引生命周期管理
    • 3.1. 配置选项
  • 4. 配置Elasticsearch索引模板加载
  • 5. parsers 解析器
  • 6. 勘探者 prospector
    • 6.1. scanner 扫描器
      • 6.1.1. symlinks 软链接
      • 6.1..2. fingerprint 指纹
  • 7. file_identity 文件标识
    • 7.1. fingerprint

此文档中主要是针对 configmap 对象中关于 filebeat 配置文件内容针对生产环境如何配置的说明。

1. filebeat.inputs 静态日志收集器

在 kubernetes 环境中,有可能你需要同时收集集群中每个节点(服务器)的系统日志,比如 /var/log/ 目录下的日志,这些日志文件级别都是静态的,文件名称固定的,因此这里有必要介绍手动指定的方式: filebeat.inputs
这里主要介绍的是 Filebeat 配置文件中 filebeat.inputs 的配置。

filebeat.inputs 配置项的作用就是告诉 Filebeat 程序可以从哪儿获取需要读取的数据。支持多种输入模块,比如普通文件中、redis 中、kafka 中等,路径的配置可以使用通配符进行模糊匹配。

配置示例:

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
    # 支持通配符
    - /log/spms-*[a-z].log
# 可以写多个
- type: filestream
  paths:
    - "/var/log/apache2/*"
  • log log 输入模块适用于普通文本日志文件、syslog 格式的日志。
  • filestream filestream 输入模块是 Filebeat 7.13.0 版本中引入的新输入模块,用于从文件中读取结构化数据。filestream 输入模块支持读取 JSON 格式、NDJSON 格式等结构化数据文件,它可以更高效地处理结构化数据文件,并提供更好的性能。

不同的输入模块支持不同的配置项,在 filestream 下可以配置如下选项(这些配置项同时支持 log 输入模块)。

    - type: filestream
      # id 是集群中的唯一标识
      id: sys-logs
      paths:
          # 日志收集的路径
        - /var/log/*.log
      parsers:
          # 解析器
        - syslog: ~
      prospector:
        # 勘探者
        scanner:
          symlinks: true
      processors:
          # 处理器名称
        - add_host_metadata:

parsers 解析器,主要对输入的数据进行解析,不同的数据有不同的格式,比如docker容器的日志格式一般是 json, 就需要使用 container 解析器进行解析处理。

prospector 勘探者,主要是控制 Filebeat 对日志文件进行读取的时候如何处理,比如扫描文件的时候是否支持软连接的文件路径,是否对日志文件进行计算密文,以便更好的识别是否是同一个文件。

parsersprospector 后面内容有详细介绍。也可以参考官方文档

processors 处理器,主要会把每次日志事件内容进行处理,比如添加某些字段,删除某些字段,删除这个事件等。处理器可以给每个 inputs 的输入模块配置不同的处理器,后面章节有专门的详解介绍。


还有几个值得注意的配置项:

harvester_buffer_size 每个采集器在获取文件时使用的缓冲区的大小(以字节为单位)。默认值为16384。

max_bytes 单个日志消息可以具有的最大字节数。max_bytes之后的所有字节都将被丢弃而不发送。此设置对于多行日志消息特别有用,因为多行日志信息可能会变大。默认值为10MB(10485760)。

close_inactive指定在文件不再更新的情况下多久后关闭文件句柄。我们建议您将close_inactive设置为一个大于日志文件最不频繁更新的值。例如,如果日志文件每隔几秒钟更新一次,则可以安全地将 close_inactive 设置为1m。如果存在更新率非常不同的日志文件,则可以使用具有不同值的多个配置。

2. filebeat.autodiscover 自动发现

当您在容器上运行应用程序时,它们会成为监控系统的移动目标。自动发现允许您跟踪它们,并在发生更改时调整设置。

2.1. autodiscover 和 inputs

在Filebeat中,自动发现 filebeat.autodiscoverfile.inputs 存在一些区别。

  1. filebeat.inputs 指定带通配符的路径:当你使用 filebeat.inputs 指定带通配符的路径时,Filebeat会根据通配符匹配的规则来收集符合条件的日志文件。这种方式适用于静态的日志路径,例如指定某个固定目录下的所有日志文件。但是它并不会动态地适应新创建的容器日志

  2. filebeat.autodiscover:Filebeat 的自动发现功能允许它动态地发现和收集新创建的容器日志。当容器启动时,Filebeat 可以检测到新的容器日志源,并自动开始收集这些日志。这使得在容器动态创建和销毁时,Filebeat可以及时地调整以收集新的日志

所以,带通配符的路径的 filebeat.inputs 并不能收集到新创建的容器日志,这时就需要使用自动发现功能来实现动态收集新创建的容器日志。

2.2. 如何配置生效

您可以在filebeat.yml配置文件的 `filebeat.autodiscover`部分定义自动发现设置。并且必须配置一个提供者程序列表。就像下面这样: ```yaml data: filebeat.yml: |- filebeat.autodiscover.providers: - type: kubernetes ... - type: docker ... ``` 可以配置多个,就像上面的一样。也可以配置一个就像下面的一样: ```yaml data: filebeat.yml: |- filebeat.autodiscover.providers: - type: kubernetes ... ```

要想启用 provider 或者说让他们真正有效工作起来,还需要进一步配置。

有两种方案:

  1. 给每个 provider 配置 templates ,并指定被收集日志的路径。
data:
  filebeat.yml: |-
    filebeat.autodiscover.providers:
      - type: kubernetes
        templates:
          - config:
              - type: container
                paths:
                  - "/var/lib/docker/containers/${data.kubernetes.container.id}/*.log"

  • 容器方式运行的 Filebeat,不建议使用 /var/log/container 和 /var/log/pods 目录,这两个都是软连接,而实际收集日志的时候需要找到实际的日志文件,于是就需要挂载到容器里面多个目录。
  • 如果是非容器部署,那就可以使用这两个目录。
  1. 给每个 provider 配置基于 hints 的自动发现,hints 是 Elasticsearch 的提示系统 。并配置一个默认配置 hints.default_config,或者使用 templates ,并指定被收集日志的路径。hints.default_configtemplates 可以结合起来使用,具体细节后面章节有详细介绍。
data:
  filebeat.yml: |-
    filebeat.autodiscover.providers:
      - type: kubernetes
        hints.enabled: true
        hints.default_config:
            type: filestream
            id: kubernetes-container-logs-${data.kubernetes.pod.name}-${data.container.id}
            paths:
            - /var/lib/docker/containers/${data.container.id}/*.log

  • templates 的路径 paths 中需要使用 data.kubernetes.container.id
  • hins.default_config 中使用如下两个都可以:
    • data.container.id
    • data.kubernetes.container.id

版本区别
经过实验,Filebea 8.11.x 及以下的版本,在 docker 为容器运行时的环境中,支持如下简单的配置,就可以收集到在目录 /var/lib/docker/container/ 下的所有容器的日志。

data:
  filebeat.yml: |-
    filebeat.autodiscover.providers:
      - type: kubernetes
        hints.enabled: true

2.3. Providers 提供者

自动发现 Providers 的工作方式是监视系统上的事件,并将这些事件转换为具有通用格式的内部自动发现事件。

配置 Providers 时,您可以选择使用自动发现事件中的字段来设置条件,当满足条件时,会启动特定的配置。

启动时,Filebeat 将扫描现有容器并为它们启动适当的配置。然后它将监视新的开始/停止事件。这样可以确保您不必担心状态,而只需定义所需的配置。

经常使用的有如下两种 Providers:

  • docker Docker 自动发现 provider 监视Docker容器的启动和停止。

  • kubernetes Kubernetes自动发现提供程序监视Kubernete node、pod 和 service 的启动、更新和停止。

因为此专栏主要是云原生,所以只介绍 kubernetes 的 providers,docker 的请参考官方文档

2.4. Providers kubernetes

kubernetes自动发现提供程序具有以下配置设置:
node
(可选)指定要将filebeat定位到的节点,以防无法准确检测到,例如在主机网络模式下运行filebeat时。就是指定一个这个 Filebeat 运行在哪个kubernetes 工作节点上。

data:
  filebeat.yml: |-
    filebeat.autodiscover.providers:
       - type: kubernetes
         node: ${NODE_NAME}   # 一般不用明确设置
       

一般设置值是一个 Pod 的环境变量 NODE_NAME,而这个变量的值是从 Pod 运行是 spec.nodeName 字段的值获取的。

      env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

namespace
(可选)选择要从中收集元数据的命名空间。如果未设置,处理器将从所有命名空间收集元数据。默认情况下未设置。命名空间配置仅适用于命名空间范围内的kubernetes资源。这个只能同时配置一个命名空间,建议使用条件判断替代。

cleanup_timeout
当容器在一段时间内没有产生任何活动时(即没有日志产生或文件变化),Filebeat会停止监视该容器的配置。这可以帮助节省资源并避免不必要的日志收集。你可以根据实际需求,通过配置来调整这个时间,以满足你对日志收集的要求。默认 60s。

kube_config
(可选)使用给定的配置文件作为Kubernetes客户端的配置。它默认为KUBECONFIG环境变量(如果存在)。

使用此选项,有几个条件:

  • 删除了关于 Filebeat daemonset对象使用的 rbac 相关资源对象。删除 Filebeat 关于 daemonset 对象yaml文件中 serviceAccountName: filebeat 的配置。
  • kube_config 指定的配置文件路径是真的 Filebeat Pod 内的路径,因此需要把配置文件映射到 Filebeat Pod 中。
    这需要再 daemonset 对象的 yaml 文件中添加如下配置:
        volumeMounts:
        - name: kubeconfig
          mountPath: /root/.kube/config
          readOnly: true
      volumes:
      - name: kubeconfig
        hostPath:
          path: /root/.kube/config

此示例我使用了默认的 kubernetes admin 的认证文件,实际生产中你应该自己创建一个有合适权限的认证文件。

  • 最后在 configmap 的yaml 文件中设置。
data:
  filebeat.yml: |-
    filebeat.autodiscover.providers:
       - type: kubernetes
         kube_config: /root/.kube/config

resource
(可选)选择要进行发现的资源。目前支持的Kubernetes资源有 pod、service 和node。如果未配置,则资源默认为pod。

scope
(可选)指定需要在何种级别执行自动发现。scope 可以将 nodecluster 作为值。node 作用域允许发现指定节点(服务器)中的资源。cluster 作用域允许集群范围内的发现。在 node 范围内只能发现pod和节点资源。

2.5. 配置 templates

通过定义配置模板(templates),自动发现子系统可以在服务开始运行时对其进行监控。

2.5.1. kubernetes 自动发现事件中的变量字段

配置模板可以包含自动发现事件中的变量。这些变量可以在 data 命名空间下访问,例如访问Pod IP: ${data.kubernetes.pod.ip}

下面是 templates 中可用的字段。提供者程序 kubernetes 会在每个日志事件中添加 kubernetes.* 字段:
如下是一个日志事件的输入示例

{
  "@timestamp": "2024-07-05T03:38:37.974Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.14.1"
  },
  "host": {
    "name": "k8s-node1"
  },
  "message": "{\"log\":\"\\u003cjemalloc\\u003e: Unsupported system page size\\n\",\"stream\":\"stderr\",\"time\":\"2024-07-05T03:38:34.86180604Z\"}",
  "input": {
    "type": "filestream"
  },
  "kubernetes": {
    "pod": {
      "name": "fluent-bit-ftwlr",
      ...
    },
    "namespace": "kubesphere-logging-system",
    "namespace_uid": "bd47727c-53d7-4132-a4e1-c29886116ceb",
    "namespace_labels": {
      "kubernetes_io/metadata_name": "kubesphere-logging-system",
      ...
    },
    "daemonset": {
      "name": "fluent-bit"
    },
    "labels": {
      "app_kubernetes_io/name": "fluent-bit",
      ...
    },
    "container": {
      "name": "fluent-bit"
    },
    "node": {
      "labels": {
        "beta_kubernetes_io/arch": "arm64",
        ...
      },
      "hostname": "k8s-node1",
      "name": "k8s-node1",
      "uid": "e05fe0cf-2042-4d02-bedc-789ad567aea6"
    }
  },
  "container": {
    "id": "a57df33b6a61dac0593bc177f0a31b14683ec485e3ee9981f302c8a3c30c80cb",
    "runtime": "docker",
    "image": {
      "name": "dockerhub.kubekey.local/kubesphere/fluent-bit:v1.9.4"
    }
  },
  ...
}

如果 include_annotations 配置被添加到提供程序配置,那么配置中存在的注解列表将被添加到事件中。

如果 include_labels 配置被添加到提供程序配置,那么配置中存在的标签列表将被添加到事件中。

如果将 exclude_labels 配置添加到提供程序配置中,则该配置中存在的标签列表将从事件中排除。

如果在提供程序配置中将 labels.dot-config设置为 true,那么 Labels 中的 . 将替换为 _。默认情况下为 true

如果在提供程序配置中将 annotations.dedot-config 设置为 true,那么 Annotations . 中将替换为_。默认情况下为 true

2.5.2 配置 templates

Filebeat 的 templates 可以配置 inputmodule ,还可以使用条件 condition

示例配置:
如下配置启动了一个用于在 kube-system 命名空间中运行的所有pod容器的 docker 输入模块: container

filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        - condition:
            equals:
              kubernetes.namespace: kube-system
          config:
            - type: container
              paths:
                - /var/lib/docker/containers/${data.kubernetes.container.id}/${data.kubernetes.container.id}-json.log
              exclude_lines: ["^\\s+[\\-`('.|_]"]  # drop asciiart lines

正则表达式 ^\s+[\-`('.|_]

如果你希望使用 modules 来进一步处理容器中的日志,可以使用 docker 输入模块来替换默认的 输入模块。如下是配置示例:

filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        - condition:
            equals:
              kubernetes.container.image: "redis"
          config:
            - module: redis
              log:
                input:
                  type: container
                  paths:
                    - /var/lib/docker/containers/${data.kubernetes.container.id}/*.log

上面配置的意思是,当容器的镜像名是 redis 时,使用日志处理模块 redis 对日志进一步的处理。

常用的条件运算符
在条件配置中,除了 equals 运算符,还有一些其他条件运算符可供使用。以下是一些常见的条件运算符列表:

  • equals:等于
  • not_equals:不等于
  • contains:包含
  • not_contains:不包含
  • regexp:正则表达式匹配
  • startswith:以某字符串开头
  • endswith:以某字符串结尾
  • in:在给定的列表中
  • not_in:不在给定的列表中
  • range:范围匹配

这些条件运算符可以帮助你更精细地定义 autodiscover 的规则,以便根据不同的条件来匹配和处理日志文件。

例如下面的配置实现,指对命名空间开头是 sahrk-standardshark-bluespace 的Pod日志进行收集。

指定某些命名空间

data:
  filebeat.yml: |-
    filebeat.autodiscover:
      providers:
      - type: kubernetes
        templates:
        - condition:
            regexp:
              kubernetes.namespace: "^shark-standard|^shark-bluespace"
          config:
          - type: container
            paths:
              - /var/lib/docker/containers/${data.kubernetes.container.id}/${data.kubernetes.container.id}-json.log

2.6. 基于提示(hints)的自动发现

Filebeat支持基于 hints 程序提示的自动发现。

  • 默认配置
    首先,只要有效配置了 hints(怎么算有效,参考章节: 2.2. 如何配置生效
    此时所有 Pod 容器的日志会被自动收集。如果不希望某些 Pod 容器日志不希望被收集,可以在 annotations 中添加如下配置表示不收集Filebeat Pod 的日志。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: filebeat
      namespace: default
      labels:
        k8s-app: filebeat
      annotations:
        co.elastic.logs/enabled: "false"
    ...
    
  • 进阶配置实现更多功能
    提示系统在Kubernetes Pod annotations或 Docker labels 中查找前缀为 co.elastic.loghints
    一旦容器启动,Filebeat 就会检查它是否包含任何 hints,并启动相应的配置。 从而hints会告诉Filebeat如何获取给定容器的日志。

docker-compose 示例:

version: "3.9"
services:
  nginx:
    labels:
      co.elastic.logs/module: nginx
      co.elastic.logs/fileset.stdout: access
      co.elastic.logs/fileset.stderr: error
    restart: always
    image: nginx:1.20.2-alpine-upstream

kubernetes 示例:

apiVersion: apps/v1
kind: <kind name>
metadata:
  annotations:
    co.elastic.logs/json.message_key: "log"
    co.elastic.logs/json.add_error_key: "true"

默认情况下,将使用 filestream 的输入模块从容器中检索日志。您可以通过配置不同的 hints (即 annotations)来修改此行为。

2.6.1 支持的 hints的完整列表:

co.elastic.logs/enabled
Filebeat默认情况下从所有容器获取日志,您可以将此提示设置为 "false" 以忽略容器的输出。Filebeat不会从中读取或发送日志。

还有如果禁用默认配置 hints.default_config.enabled: false,则可以使用此注解仅对设置为 true 的容器启用日志检索。如果您打算将其与Kubernetes一起使用,请记住注解值只能是字符串类型,因此您需要相应地将其明确定义为 "true""false"

co.elastic.logs/multiline.*
多行设置。有关所有支持选项的完整列表,请参阅多行消息
就是 Java 程序抛出异常的日志,一条日志信息别保存为连续的多行。

co.elastic.logs/json.*
JSON设置。如果是 type: filestream(默认)输入模块,请参阅ndjson以获取所有支持选项的完整列表。如果是 type: containertype: log 输入模块,请参阅json以获取所有支持选项的完整列表。

例如,以下带有json选项的提示:

co.elastic.logs/json.message_key: "log"
co.elastic.logs/json.add_error_key: "true"

这转化为如下 yaml 配置

  • filestream
parsers:
  - ndjson:
      message_key: "log"
      add_error_key: "true"
  • log
json.message_key: "log"
json.add_error_key: "true"

co.elastic.logs/include_lines
希望Filebeat包含的行,包含的行需要和一个正则表达式列表相匹配。

co.elastic.logs/exclude_lines
与要Filebeat排除的行匹配的正则表达式列表。

co.elastic.logs/module
指定用于解析容器中日志的 module,而不是使用原始docker inuput。
例如,处理nginx日志,有 nginx module,处理mysql日志有专门的 mysql module。
有关支持的模块列表,请参阅模块

co.elastic.logs/fileset
配置模块后,将容器日志映射到模块处理器。您可以这样配置哪些容器的日志使用该模块进行智能地处理:

co.elastic.logs/fileset: access

或者在容器中为每个流配置一个文件集(stdout和stderr):

co.elastic.logs/fileset.stdout: access
co.elastic.logs/fileset.stderr: error

co.elastic.logs/processors
定义要添加到Filebeat input/module 配置的处理器。

如果处理器配置使用列表数据结构,则必须枚举对象字段。例如,下面的 rename 处理器配置 hints:

processors:
  - rename:
      fields:
        - from: "a.g"
          to: "e.d"
      fail_on_error: true

将看起来像:

co.elastic.logs/processors.rename.fields.0.from: "a.g"
co.elastic.logs/processors.rename.fields.1.to: "e.d"
co.elastic.logs/processors.rename.fail_on_error: 'true'

如果处理器配置使用映射数据结构,则不需要枚举。例如,等效于下面的add_fields配置

processors:
  - add_fields:
      target: project
      fields:
        name: myproject

转换为 annotations 后:

co.elastic.logs/processors.1.add_fields.target: "project"
co.elastic.logs/processors.1.add_fields.fields.name: "myproject"

为了提供处理器定义的排序,可以提供数字。如果没有,提示生成器将执行任意排序:

# 有的
co.elastic.logs/processors.1.dissect.tokenizer: "%{key1} %{key2}"

# 没有的
co.elastic.logs/processors.dissect.tokenizer: "%{key2} %{key1}"

在上述示例中,将首先执行标记为1的处理器定义。

2.6.2. kubernetes 启用 hints

基础配置
Kubernetes自动发现提供程序要启用 hints,只需设置hints.enabled

filebeat.autodiscover:
  providers:
    - type: kubernetes
      hints.enabled: true

Filebeat 的 8.12.x 及以上版本还应该同时配置 hints.default_config

当看到新容器时将启动的默认配置,如下所示:

filebeat.autodiscover:
  providers:
    - type: kubernetes
      hints.enabled: "true"
      hints.default_config:
        type: container
        paths:
          - /var/lib/docker/containers/${data.container.id}/${data.container.id}.log  # CRI path

限定名称空间
如果你希望只对某些刚兴趣的名称空间中的Pod日志进行收集。

data:
  filebeat.yml: |-
    filebeat.autodiscover:
      providers:
      - type: kubernetes
        hints.enabled: "true"
        templates:
        - condition:
            regexp:
              kubernetes.namespace: "^spms-standard|^spms-bluespace"
          config:
          - type: container
            paths:
              - /var/lib/docker/containers/${data.kubernetes.container.id}/${data.kubernetes.container.id}-json.log

并且在这种情况下,你仍然可以通过在命名空间不符合正则表达式 ^spms-standard|^spms-bluespace的Pod 中添加注解 co.elastic.logs/enabled: "true" 实现日志的收集。如下示例所示:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: default
  labels:
    k8s-app: filebeat
  annotations:
    co.elastic.logs/enabled: "true"

可以用适合自己需求、有用的信息注释Kubernetes Pods,以启动Filebeat 输入或 module:

annotations:
  co.elastic.logs/multiline.pattern: '^\['
  co.elastic.logs/multiline.negate: "true"
  co.elastic.logs/multiline.match: after

多容器Pod
当一个pod有多个容器时,除非在提示中输入容器名称,否则设置是共享的。例如,这些提示为pod中的所有容器配置多行设置,但为名为 sidecar 的容器设置特定的 exclude_lines hint。

annotations:
  co.elastic.logs/multiline.pattern: '^\['
  co.elastic.logs/multiline.negate: "true"
  co.elastic.logs/multiline.match: after
  co.elastic.logs.sidecar/exclude_lines: '^DBG'

多组 hints
当容器需要在其上定义多个 input 时,可以为 annotations 集提供数字前缀。如果有没有数字前缀的提示,那么它们会被分组到一个配置中。

annotations:
  co.elastic.logs/exclude_lines: '^DBG'
  co.elastic.logs/1.include_lines: '^DBG'
  co.elastic.logs/1.processors.dissect.tokenizer: "%{key2} %{key1}"

上述配置将生成两个 input 配置。第一个 input 只处理调试日志,并将其传递给一个 dissect.tokenizer。第二个 input 处理除调试日志以外的所有内容。

可以在命名空间的注释上配置 hints,当 Pod 级别的注解缺失时,可以在 Namespace 的注解上配置 hints 作为默认值。生成的提示是 Pod 注解和 Namespace 注解的组合,其中 Pod 的优先级更高。要启用 Namespace 默认值,请按照以下方式为 Namespace 对象配置 add_resource_metadata

filebeat.autodiscover:
  providers:
    - type: kubernetes
      hints.enabled: true
      add_resource_metadata:
        namespace:
          include_annotations: ["nsannotation1"]

1.2.4. Appenders

Appenders允许用户在模板或构建器的帮助下附加已经构建的配置。可以将追加程序配置为仅在匹配所需条件时应用。所应用的配置类型特定于每个附加程序。

配置附加器可以在模板或构建器生成的配置之上应用配置。只要提供的条件匹配,就会应用配置。如果没有提供任何条件,它总是适用的。

filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        ...
      appenders:
        - type: config
          condition.equals:
            kubernetes.namespace: "prometheus"
          config:
            fields:
              type: monitoring

1.2.5. 处理混杂格式日志

从运行在Kubernetes上的工作负载收集日志时,这些应用程序以json格式进行日志记录是很常见的情况。在这种情况下,可以应用特殊处理,以便正确解析这些json日志并将其解码为字段。Bellow提供了两种不同的方式来配置filebeat的自动发现,以便识别和解析json日志。我们将使用一个带有两个容器的Pod的示例,其中只有一个日志是json格式的。

示例日志:

{"type":"log","@timestamp":"2020-11-16T14:30:13+00:00","tags":["warning","plugins","licensing"],"pid":7,"message":"License information could not be obtained from Elasticsearch due to Error: No Living connections error"}

  1. json.* 选项与模板一起使用
filebeat.autodiscover:
  providers:
      - type: kubernetes
        node: ${NODE_NAME}
        templates:
          - condition: # 条件
              contains
上一篇:如何把普通用户添加到sudoers file【让普通用户拥有sudo权限】有图有代码


下一篇:使用Keil将STM32部分程序放在RAM中运行