技术学习分享_一航技术 技术资讯 K8S中使用EFK的filebeat配置详解

K8S中使用EFK的filebeat配置详解

广告位

前言

近期公司不少项目都上了 K8S,随着项目越来越多,有时候会出现“服务异常”等情况,需要上到服务器敲一大堆的命令,才有可能找到疑似的异常原因。

如果我们将这些数据全部记录到一个基于 EFK 的日志系统,有方便简洁的界面,能够快速找到错误数据、快速修复问题、快速更新,立马就省心多了。

接下来,就让小编为大家介绍一下这款神器的配置~

注意事项

K8S中使用EFK的filebeat配置详解

配置文件详解(抽取关键部分)

filebeatConfig:
### filebeat配置文件
filebeat.yml: |
filebeat.inputs:
### 收集日志类型:容器日志(container)
- type: container
paths:
### 日志路径,可以用通配符
- /var/log/containers/messagecenter-realease*.log
fields:
### 给日志分组,用于下面发完es数据的index做区分
type: "messagecenter-realease"
- type: container
paths:
- /var/log/containers/messagecenter-master*.log
fields:
type: "messagecenter-master"
### 可以让字段位于根节点,默认为false
json.keys_under_root: true
### 对于同名的key,覆盖原有key值
json.overwrite_keys: true
### 用processors中的decode_json_fields处理器进行处理,它类似logstash中的filter
processors:
- decode_json_fields:
fields: ['message'] ## 要进行解析的字段,默认容器日志中,所有日志信息都存在message字段
target: "" ### json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下
overwrite_keys: false #如果解析出的json结构中某个字段在原始的event(在filebeat中传输的一条数据为一个event)中也存在,是否覆盖event中该字段的值,默认值:false
process_array: false #数组是否解码,默认值:false
max_depth: 1 #解码深度,默认值:1
### 输出数据地址,这里是输出到es
output.elasticsearch:
# 发送数据到收集日志的ES
hosts: 'elasticsearch-log-master:9200'
indices:
###统一日志索引为 log- 开头,方便定时删除数据
- index: "log-messagecenter-realease" ###在es对应生成的index索引名
when.equals:
### 这里跟上面的fields.type做匹配分组
fields.type: "messagecenter-realease"
- index: "log-messagecenter-master"
when.equals:
fields.type: "messagecenter-master"
  • 注意:采集文件的数据内容,建议是 json 格式,有 message、timestamp 等字段。

关键配置解释:

1、日志路径,可以用通配符,如/var/log/containers/messagecenter-realease*.log,可以匹配到/var/log/containers这个目录下的以messagecenter-realease开头,以.log结尾的所有文件里面的数据。

2、fields.type:将日志分组,用于区分 ES 中不同的索引数据。

3、json.keys_under_root:将 json 数据拆解字段后,可以让字段解析到顶级结构下,默认为 false。

4、json.overwrite_keys:对于同名的 key,会覆盖原有 key 值。

5、processors.decode_json_fields.fields:要进行 json 解析的字段,默认容器日志中,所有日志信息都存在 message 字段。

6、processors.decode_json_fields.target:将文件中的 json 内容解析到指定的字段,如果为空(””),则解析到顶级结构下。

7、processors.decode_json_fields.overwrite_keys:如果解析出的 json 结构中某个字段在原始的 event(在 filebeat 中传输的一条数据为一个 event)中也存在,是否覆盖 event 中该字段的值,默认值:false。

8、output.elasticsearch.hosts:采集到的数据,存到哪个地址,这里以ES为例,存到elasticsearch-log-master:9200

9、output.elasticsearch.indices.index:这个是 ES 的索引名,不存在则会自动新增。

10、output.elasticsearch.indices.when.equals.fields.type:这里跟上面第二步的fields.type进行匹配分组对应,将第二步采集到的数据,存到这个分组下的索引当中。

效果

kibana查询工具

K8S中使用EFK的filebeat配置详解

采集数据字段拆解后,方便查询每个字段的信息。

K8S中使用EFK的filebeat配置详解

总结

上述内容介绍了日志收集的配置文件详情,如果有新的项目接入,只需要复制一个配置进行修改,就可以达到开箱即用的效果,实在是太方便了。建议每个项目单独搞一个配置项,这样查看起来方便明了。

需要注意的是:在同一个项目中,日志数据收集的格式要固定,不能一时一个样,不然 ElasticSearch 可不认账(在 es 里面同一个索引,数据格式不同会插入数据失败的),所以要统一。

如果大家对此感兴趣,后续我们对数据格式的规范问题再做讨论~

以上就是本期分享,欢迎各位关注、留言,大家的支持就是我的动力!

本文来自网络,不代表技术学习分享_一航技术立场,转载请注明出处。

作者: 一航技术

上一篇
下一篇
广告位

发表回复

返回顶部