filebeat-自动发现(autodiscover)

前言

filebeat通过调用docker或k8s的api 发现容器或pod,根据获取到的信息来收集日志。
官网详解

Providers类型

docker

配置示例:

filebeat.autodiscover:
  providers:
    - type: docker
      templates:
        - condition:   # 满足条件的才采集
            contains:
              docker.container.image: redis
          config:
            - module: redis   # 使用filebeat自带的redis日志模板,也可以不使用
              log:
                input:
                  type: container
                  paths:
                    - /var/lib/docker/containers/${data.docker.container.id}/*.log

在key值上面不需要用data引用,就比如上面示例的docker.container.image。在value值上面需要用data引用,就比如上面配置示例的${data.docker.container.id}

配置模板中可以使用的字段

  • host
  • port
  • docker.container.id
  • docker.container.image
  • docker.container.name
  • docker.container.labels

示例:

{
  "host": "10.4.15.9",
  "port": 6379,
  "docker": {
    "container": {
      "id": "382184ecdb385cfd5d1f1a65f78911054c8511ae009635300ac28b4fc357ce51",
      "name": "redis",
      "image": "redis:3.2.11",
      "labels": {
        "io.kubernetes.pod.namespace": "default"
        ...
      }
    }
  }
}

通过data可以引用对应的字段,比如上面的示例使用${data.port}就是6379。

kubernetes

配置示例:

filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        - condition:   # 满足条件的才采集
            equals:
              kubernetes.container.image: "redis"
          config:
            - module: redis   # 使用filebeat自带的redis日志模板,也可以不使用
              log:
                input:
                  type: container
                  paths:
                    - /var/log/containers/*-${data.kubernetes.container.id}.log

配置模板中可以使用的字段

  1. 通用字段

    • host
    • port (exposed)
    • kubernetes.labels
    • kubernetes.annotations
  2. pod字段

    • kubernetes.container.id
    • kubernetes.container.image
    • kubernetes.container.name
    • kubernetes.namespace
    • kubernetes.node.name
    • kubernetes.pod.name
    • kubernetes.pod.uid
  3. node字段

    • kubernetes.node.name
    • kubernetes.node.uid
  4. svc字段

    • kubernetes.namespace
    • kubernetes.service.name
    • kubernetes.service.uid
    • kubernetes.annotations

示例:

{
  "host": "172.17.0.21",
  "port": 9090,
  "kubernetes": {
    "container": {
      "id": "bb3a50625c01b16a88aa224779c39262a9ad14264c3034669a50cd9a90af1527",
      "image": "prom/prometheus",
      "name": "prometheus"
    },
    "labels": {
      "project": "prometheus",
      ...
    },
    "namespace": "default",
    "node": {
      "name": "minikube"
    },
    "pod": {
      "name": "prometheus-2657348378-k1pnh"
    }
  },
}

通过data可以引用对应的字段,比如上面的示例使用${data.port}就是9090。

配置模板中的condition

支持的条件包括:

  • equals:等于,只能接受整数或字符串。
  • contains:包含,只能接受字符串。
  • regexp:正则匹配。
  • range:范围
    • lt:小于
    • lte:小于等于
    • gt:大于
    • gte:大于等于
  • network:是否在某个IP网络范围内。
  • has_fields:是否存在指定字段。
  • or:或
  • and:与
  • not:非

基于提示的自动发现

在 Kubernetes Pod 注释或 Docker 标签中找到带有前缀co.elastic.logs,并按照这个前缀的配置进行日志采集。

配置示例:

filebeat.autodiscover:
      providers:
        - type: kubernetes or docker
          node: ${NODE_NAME} # output时增加一个node字段
          hints.enabled: true # 开启基于提示的自动发现
          hints.default_config:
            type: container
            paths:
              - /var/log/containers/*${data.kubernetes.container.id}.log
  1. co.elastic.logs/enabled:默认是true采集所有容器日志,改为false的话会忽略该容器日志。
  2. co.elastic.logs/multiline.*:多行日志处理方式。
  3. co.elastic.logs/json.*:json解析模式处理。
  4. co.elastic.logs/include_lines:只收集匹配正则表达式的行。
  5. co.elastic.logs/exclude_lines:排除匹配正则表达式的行。
  6. co.elastic.logs/module:使用filebeat的日志模板。
  7. co.elastic.logs/fileset:文件集,还不知道具体怎么使用。
  8. co.elastic.logs/raw:将 filebeat.input 的配置转换成 json 字符串形式表示。
  9. co.elastic.logs/processors:配置处理器,filebeat的处理器有很多,还得具体了解下官网

高级用法appenders

由于很多配置可能是默认动态生成的,所以可能存在特殊情况不能使用默认配置。

配置示例:

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

上面的配置是指满足kubernetes命名空间是prometheus条件的时候,则应用config的配置。如果不满足,则应用默认配置。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Filebeat 是一个轻量级的开源日志文件数据收集器,它可用于将日志和事件数据从多个来源发送到诸如 Elasticsearch、Logstash、Kafka 等目的地。下面是 Filebeat 配置文件的详细解释: 1. `filebeat.inputs`: 这是一个数组,定义了要收集的日志文件的来源和类型。每个输入都包含一个 `type` 字段表示文件类型,如日志文件、系统日志等,以及相关的配置信息。 2. `filebeat.outputs`: 这也是一个数组,定义了将收集到的日志数据发送到的目的地。可以配置多个输出,例如 Elasticsearch、Logstash 等。每个输出通常包含一个 `hosts` 字段,表示要发送到的目标主机和端口。 3. `filebeat.modules`: 这是一个数组,定义了预定义模块的配置。预定义模块提供了对常见日志文件的结构化解析和分析功能,可以轻松集成到 Filebeat 中。 4. `filebeat.config.modules`: 这是一个布尔值,用于指定是否启用预定义模块。如果设置为 true,则 Filebeat 将加载并启用配置文件中定义的预定义模块。 5. `filebeat.autodiscover`: 这是一个对象,用于自动发现和动态管理容器化环境中的日志文件。可以根据特定的标签或其他条件自动配置输入。 6. `filebeat.registry.path`: 这是一个字符串,指定用于保存 Filebeat 状态和元数据的注册表文件的路径。注册表文件记录了已经发送的日志文件的位置,以便在重启后继续从上次中断的位置发送。 7. `filebeat.harvester.buffer_size`: 这是一个整数,表示每个 harvester(日志收集器)的缓冲区大小,用于在发送之前缓冲日志事件。 以上是一些常见的 Filebeat 配置文件的详细解释,你可以根据具体需求进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值