文章目录
- 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 对日志文件进行读取的时候如何处理,比如扫描文件的时候是否支持软连接的文件路径,是否对日志文件进行计算密文,以便更好的识别是否是同一个文件。
parsers 和 prospector 后面内容有详细介绍。也可以参考官方文档
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.autodiscover
和 file.inputs
存在一些区别。
-
filebeat.inputs
指定带通配符的路径:当你使用filebeat.inputs
指定带通配符的路径时,Filebeat会根据通配符匹配的规则来收集符合条件的日志文件。这种方式适用于静态的日志路径,例如指定某个固定目录下的所有日志文件。但是它并不会动态地适应新创建的容器日志
。 -
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 或者说让他们真正有效工作起来,还需要进一步配置。
有两种方案:
- 给每个 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 目录,这两个都是软连接,而实际收集日志的时候需要找到实际的日志文件,于是就需要挂载到容器里面多个目录。
- 如果是非容器部署,那就可以使用这两个目录。
- 给每个 provider 配置基于 hints 的自动发现,hints 是 Elasticsearch 的提示系统 。并配置一个默认配置
hints.default_config
,或者使用templates
,并指定被收集日志的路径。hints.default_config
和templates
可以结合起来使用,具体细节后面章节有详细介绍。
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
可以将 node
或 cluster
作为值。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
可以配置 input
和 module
,还可以使用条件 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-standard
或 shark-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.log
的 hints。
一旦容器启动,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: container
或 type: 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"}
- 将
json.*
选项与模板一起使用
filebeat.autodiscover:
providers:
- type: kubernetes
node: ${NODE_NAME}
templates:
- condition: # 条件
contains