最近更新时间:2022-07-12 20:15:59
Filebeat是由Elastic开发的一款开源日志采集软件,使用者可以将其部署到需要采集日志的机器上对日志进行采集,并输出到指定的日志接收端如elasticsearch、kafka、logstash等等。KLog团队对开源Filebeat进行了二次开发并提供新增特性,我们称之klog-filebeat
,其新增特性如下:
关于Filebeat自身的详细特性,可以参考filebeat官方文档。
klog-filebeat
可以点击此处下载。wget "https://ks3-cn-beijing.ksyun.com/klog/filebeat/klog-filebeat.latest.tar.gz"
安装比较简单,解压缩到您需要的路径即可:
tar xvf klog-filebeat.latest.tar.gz
执行如下命令,运行klog-filebeat。
./filebeat -e
klog-filebeat需要2个配置文件,分别是filebeat.yml
和credential.ini
,这两个配置文件均在klog-filebeat压缩包中,解压后即可看到。
这个配置文件的内容是您的金山云access_key
和secret_key
。内容示例:
[klog]
access_key = AKLT6-bcdesfg-ajsIjfiejI9
secret_key = Jf2390j9E9finfiDIOFJFD8483+dfsDVdOCTFazCnDEAw+mxA/7Lfeh3ugErwoKKb5wNOIei==
这个是主配置文件,内容示例如下:
filebeat.inputs:
- type: log
enabled: true
paths:
# 需要采集的日志文件
- /var/log/*.log
output.klog:
endpoint: https://klog-cn-beijing.ksyun.com
credential:
path: credential.ini
check_interval: 60
targets:
- project_name: yourProjectName
pool_name: yourPoolName
fields:
- key: message
关于output.klog
的详细配置说明可参考下面的yml文件完整配置。其余详细配置可参考filebeat官方文档。
注意:在输出到klog的情况下,
filebeat
的modules
功能无法使用。
内网endpoint:http://klog-cn-beijing-internal.ksyun.com
文件完整示例以及配置项含义分别如下:
# ------------------------------ Filebeat Input ----------------------------
filebeat.inputs:
- type: log
enabled: true
# 需要采集的日志文件
paths:
- /your/app/log/path.log
# 如果您的日志是以json形式打印的,则可设为true或false,这样filebeat会自动解析json内容。
# 设置为false时,解析出来的map对象存在于filebeat事件对象的名为json的字段中。
# 设置为true时,解析出来的map对象的各字段直接存在于filebeat事件对象中。
# 删除这个配置项时,日志作为普通文本,存在于filebeat事件对象的message字段中。
json.keys_under_root: false
# ------------------------------ KLog Output -------------------------------
# klog-filebeat特有配置。表示将采集到的日志发送到klog服务端。
output.klog:
# klog服务的日志接收地址。如果使用内网域名,请使用http协议
endpoint: https://klog-cn-beijing.ksyun.com
# 最大批量条数,默认为2048
bulk_max_size: 2048
# 用于发送的协程数,默认为1
worker_num: 1
# 发送时使用的压缩传输方式,默认为lz4。取消压缩写none
compress_method: lz4
# 从哪个文件读取您在金山云的 access_key 和 secret_key
credential:
# 文件路径
path: credential.ini
# 每隔多少秒检查一次ini文件的修改时间。如果发生改变,则重新加载ini
check_interval: 60
# 发送到指定的klog工程和日志池。每个target代表一对工程和日志池。
# 可以设置多个target, 各target之间支持重复设置工程和日志池。
targets:
# 目标工程名称
- project_name: yourProjectName
# 使用字段yourField1的值作为目标工程名称。
# project_name和project_name_from_field可以只配置其中一项。如果两项同时配置,则优先使用project_name_from_field。
# project_name_from_field: yourField1
# 目标日志池名称
pool_name: yourPoolName
# 使用字段yourField2的值作为目标日志池名称。
# pool_name和pool_name_from_field可以只配置其中一项。如果两项同时配置,则优先使用pool_name_from_field。
# pool_name_from_field: yourField2
# 需要发送的段,可以设置多个,不设置则为发送事件的所有字段。
fields:
# 需要发送的字段名。字段名里面不可有"."
- key: message
# 该字段是map类型时,如果设置为true,则表示只发送它的后代字段。默认为false。
skip_root: false
# 过滤器。可以设置多个。匹配所有过滤器的日志条目将会发送到该target。未配置filters的,会全部发送。
filters:
# 对哪个字段过滤
- key: message
# 阈值。支持字符串和数值。所有数值在内部都转换成float64
value: ""
# 比较符。支持的计算有:>, >=, <, <=, ==, !=, exists, not_exists, contains(仅字符串), not_contain(仅字符串)
operator: "!="
# ------------------------------ Klog新增的处理器 --------------------------
processors:
#grok处理器可以把普通文本日志解析为json对象。
#由于grok是基于正则表达式的,所以开启该选项会增加filebeat的资源消耗。
- grok:
# 解析哪个字段
source_field: message
# 解析结果保存到哪个字段
target_field: yourField3
# 用于解析的表达式
pattern: "%{IPORHOST:client} %{WORD:method} %{URIPATHPARAM:request} %{INT:size} %{NUMBER:duration}"
# 用于解析的自定义表达式,不是必填的
patterns:
MYPATTERN: "\\d+"
127.0.0.1 - - [26/Mar/2020:19:09:19 -0400] "GET / HTTP/1.1" 401 - "" "Mozilla/5.0 Gecko" "-"
数据解析表达式如下:
pattern: "%{IPORHOST}\s-\s-\s\[%{HTTPDATE:timestamp}\]"
通过如上表达式,只解析出timestamp字段对应的内容”26/Mar/2020:19:09:19 -0400“。
filebeat
事件是原生Filebeat
数据处理过程中的重要概念。
Filebeat采集到的每条日志,在Filebeat内部都表示为一条事件数据。
Filebeat对日志数据字段的读取、转换和新增都是对事件字段的操作。一条简单的事件数据如下:
{
"@timestamp": "2020-09-21T03:08:07.682Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.9.1"
},
"log": {
"offset": 423019,
"file": {
"path": "/path/to/your.log"
}
},
"message": "2020-09-21 03:08:07.682 [INFO][47] ipsets.go 304: Finished resync family=\"inet\" numInconsistenciesFound=0 resyncDuration=2.18885ms",
"input": {
"type": "log"
},
"ecs": {
"version": "1.5.0"
},
"host": {
"name": "filebeat-cwssh"
},
"agent": {
"name": "filebeat-cwssh",
"type": "filebeat",
"version": "7.9.1",
"hostname": "filebeat-cwssh",
"ephemeral_id": "decf7010-9f78-41f7-85b6-7a0cc5ba4115",
"id": "7b2bc79a-9da8-4038-ba55-993af4d9ac71"
}
}
filebeat
使用字段massage
保存日志原始内容。
在配置filebeat.yml
时,可以使用诸如"message"、“log.file.path”、“host.name”、"json.field1"等形式表示事件的字段。
纯净模式