filebeat-自动发现(autodiscover)
filebeat通过调用docker或k8s的api 发现容器或pod,根据获取到的信息来收集日志。
·
前言
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
配置模板中可以使用的字段
-
通用字段
- host
- port (exposed)
- kubernetes.labels
- kubernetes.annotations
-
pod字段
- kubernetes.container.id
- kubernetes.container.image
- kubernetes.container.name
- kubernetes.namespace
- kubernetes.node.name
- kubernetes.pod.name
- kubernetes.pod.uid
-
node字段
- kubernetes.node.name
- kubernetes.node.uid
-
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
co.elastic.logs/enabled
:默认是true采集所有容器日志,改为false的话会忽略该容器日志。co.elastic.logs/multiline.*
:多行日志处理方式。co.elastic.logs/json.*
:json解析模式处理。co.elastic.logs/include_lines
:只收集匹配正则表达式的行。co.elastic.logs/exclude_lines
:排除匹配正则表达式的行。co.elastic.logs/module
:使用filebeat的日志模板。co.elastic.logs/fileset
:文件集,还不知道具体怎么使用。co.elastic.logs/raw
:将 filebeat.input 的配置转换成 json 字符串形式表示。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的配置。如果不满足,则应用默认配置。
更多推荐
已为社区贡献1条内容
所有评论(0)