elastic-stack - 我们如何在filebeat输出文件中制作单行json
问题描述
我使用 FileBeat 将 apache2 日志转换为输出文件。生成的输出文件对于每个 apache2 日志消息都有一个 JSON 正文。但在这里我需要 JSON 正文而不是解析。
使用当前的格式,我无法从输出文件中获取每个 JSON 正文,如果我们保留逐行 JSON,那么我们可以拆分输出文件的每一行,并且可以轻松获取每个 JSON 正文。
我修改了 filebeat.yml 文件输出配置。像下面
output.file:路径:“/tmp/logstojson/apache2/” 文件名:filebeat 权限:0600 codec.json:漂亮: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
因为默认值已经是 false(请参阅:filebeat codec doc)
我可以看到的另一个解决方案是通过codec.format:
string: '%{[@timestamp]} %{[message]}'
但这远非干净或高效(如果您的输入有一定程度的变化或复杂性,如果不是完全不可能的话)
也许FB支持该页面中未记录的其他编解码器;ES 的文档有时可能缺乏精确性,因此值得研究。
另一方面:如果您需要对日志进行这种转换/格式化功能,您可能需要考虑使用 logstash(或者,如果您还需要 FB 的轻量级传输,请同时使用 FB 和 LS)。LS 支持文件或文件节拍输入和文件输出,它基本上只是一个比 FB 更完整的 ETL 实用程序(它更像是一个轻量级转发器)。对于此类问题,您应该明确地考虑它。(请参阅 LS 文件输出文档:默认情况下,此输出以 json 格式每行写入一个事件。您可以使用行编解码器自定义行格式,例如)
推荐阅读
- docker - 试图连接“既没有指定图像也没有指定构建上下文”。
- angular - 角度外部服务器的 api 没有“Access-Control-Allow-Origin”标头错误
- python-3.x - ImportError:无法导入名称“协程”
- python - 加载模型 pyspark
- r - 如何创建计划目标以交叉先前地图目标的结果和新变量?
- text - 如何在 ModalRoute 上设置状态()?
- c# - 通过 nuget 安装时引用 Bootstrap 的问题
- java - 我们可以在 eclipse plugin_customization.ini 文件中保留 2 个或更多 org.eclipse.ui/KEY_CONFIGURATION_ID
- python - 如何检查数组中每个项目的while循环中的参数?
- java - 创建将不同的唯一字符串值映射到具有指定范围的唯一整数值