继续我与ElasticSearch的爱恨交织,我试图将信息从pm2(nodejs)记录到我的弹性搜索群集。
目前的设置如下:
Pm2管理一些节点应用程序,并配置为登录json。这是一个例子:
{"message":"{\n \"className\": \"AppointmentBot\",\n \"dialog\": \"query\",\n \"step\": 2,\n \"millis\": 1497,\n \"extra\": \"\",\n \"type\": \"logger\",\n \"level\": \"info\",\n \"message\": \"Client\",\n \"timestamp\": \"08-01-2018 22:44:22 +00:00\"\n}\n","timestamp":"2018-01-08T22:44:22.350Z","type":"out","process_id":9,"app_name":"Chatbot-App-Dev"}
Filebeat配置
type: log
enabled: true
paths:
/home/app/.pm2/logs/*.log
fields:
type: pm2
Logstash config:
if [fields][type] == "pm2" {
json {
source => "message"
remove_field => ["message"]
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ssZ" ]
tag_on_failure => ["_dateparsefailure"]
}
}
这在Kibana / ElasticSearch中产生类似的东西:
{
"className": "AppointmentBot",
"dialog": "query",
"step": 2,
"millis": 1497,
"extra": "",
"type": "logger",
"level": "info",
"message": "Client",
"timestamp": "08-01-2018 22:44:22 +00:00"
}
现在,我想要的是让那些JSON字段不在一个字段中,而是在一个字段上。
一些警告:
基本上,我想解析json,每个字段都将它添加为索引中的新字段。可能是根结构或根中的所有字段,我不介意。
答案 0 :(得分:0)
我终于在Elastic支持的帮助下解决了这个问题。问题是如果要引用logstash配置中的字段,则需要使用[A] [B]表示法。基本上,我的第二个过滤器没有运行,因为我使用的是pm2.message。
这是我的最终配置,有效:
json {
source => "message"
target => "[pm2]"
remove_field => "message"
skip_on_invalid_json => true
}
if "_jsonparsefailure" not in [tags] {
json {
source => "[pm2][message]"
target => "[pm2][data]"
remove_field => "[pm2][message]"
skip_on_invalid_json => true
}
}