我使用FileBeat将apache2日志转换为输出文件。 generate输出文件具有每个apache2日志消息的JSON主体。但在这里我需要JSON主体在一行而不是解析。
使用当前格式,我无法从输出文件中获取每个JSON主体,如果我们保持行JSON,那么我们可以分割输出文件的每一行,并且可以轻松地获取每个JSON主体。
我修改了filebeat.yml文件输出配置。如下
output.file:path:“/ tmp / logstojson / apache2 /”filename:filebeat权限:0600 codec.json:pretty:false
我没有在输出文件中找到预期的格式。
实际输出文件数据:
{ "@timestamp": "2019-04-09T13:12:47.106Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.6.2",
"pipeline": "filebeat-6.6.2-system-auth-pipeline"
},
"fileset": {
"module": "system",
"name": "auth"
},
"prospector": {
"type": "log"
},
"input": {
"type": "log"
},
"source": "/var/log/auth.log",
"log": {
"file": {
"path": "/var/log/auth.log"
}
},
"message": "Apr 9 13:12:45 ip-172-31-22-12 sudo:
pam_unix(sudo:session): session closed for user root",
"event": {
"dataset": "system.auth"
},
"beat": {
"version": "6.6.2",
"name": "ip-172-31-22-12",
"hostname": "ip-172-31-22-12"
},
"host": {
"name": "ip-172-31-22-12"
},
"offset": 537068
}
预期的输出文件数据:
{ "@timestamp": "2019-04-09T13:12:47.106Z", "@metadata": { "beat": "filebeat", "type": "doc", "version": "6.6.2", "pipeline": "filebeat-6.6.2-system-auth-pipeline" }, "fileset": { "module": "system", "name": "auth" }, "prospector": { "type": "log" }, "input": { "type": "log" }, "source": "/var/log/auth.log", "log": { "file": { "path": "/var/log/auth.log" } }, "message": "Apr 9 13:12:45 ip-172-31-22-12 sudo: pam_unix(sudo:session): session closed for user root", "event": { "dataset": "system.auth" }, "beat": { "version": "6.6.2", "name": "ip-172-31-22-12", "hostname": "ip-172-31-22-12" }, "host": { "name": "ip-172-31-22-12" }, "offset": 537068}
不是一个完整的答案,但如果您在设置codec.json: pretty: false
时没有看到差异,这是正常的,因为默认值已经为假(请参阅:filebeat codec doc)
我能看到的另一个解决方案是通过qazxsw poi手动格式化你的json输出
但这远非干净或有效(如果你的输入有一定程度的变化或复杂性,如果不是完全不可能)
也许FB支持该页面中未记录的其他编解码器; ES的文档有时可能缺乏精确性,因此值得研究。
另请注意:如果您需要在日志中使用这种转换/格式化功能,则可能需要考虑使用logstash(或者,如果您还需要FB的轻量级传输,请同时使用FB和LS)。 LS支持文件或文件输入和文件输出,它基本上只是一个比FB更完整的ETL实用程序(它更像是一个轻量级转发器)。你应该明确地考虑这些问题。 (参见LS文件输出doc:codec.format:
string: '%{[@timestamp]} %{[message]}'
)