我正在浏览 filebeat 文档,其中它具有处理输入日志事件的有前景的功能 - https://www.elastic.co/guide/en/beats/filebeat/current/configuration-processors.html 我应该使用它能够改变我的logevetns。
支持的处理器有:
不幸的是,它没有提到如何添加自定义处理器,以便我 可以按照我想要的方式改变日志事件。假设我想以格式处理日志,
timestamp a:1,b:2,c:100
到
{ "timestamp" : timestamp, "message" : { "a": 1, "b" : 2, "c": 100}}
Logstash 可能是一种解决方案,但它只是从 filebeat 发送到 Logstash,然后再发送到 Elasticsearch 的开销。
您可以通过脚本处理器来完成此操作,您需要提供自定义脚本(javascript)代码来形成新的(已处理)字段。
例如,这是一个示例脚本处理器,用于根据您编写的内容创建新字段:
processors:
- script:
when:
has_fields:
- "timestamp"
lang: javascript
source: |-
function process(event) {
var timestamp = event.Get("timestamp");
var messageObj = {};
for (var kv of timstamp.split(",")) {
var kvSplit = kv.split(":");
messageObj[kvSplit[0]] = kvSplit[1];
}
var jsonObj = {timestamp: timestamp, message: messageObj}
// avoiding collision with existing "message" field, you can use that as well,
// and maybe you can rename this field to "message" later after this processor
event.Put("new_message", JSON.stringify(jsonObj)); // stringifying it, you can try without it.
return event;
}