我在Windows机器上使用logstash 1.5.1。我必须进行休息调用,这会给我提供JSON输出。
因此我使用了exec。结果就是没有json: - (。
此事件的@message将是命令的整个标准输出 一件事。 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-exec.html
我的logstash配置
input {
exec {
command => "C:\bin\curl\curl.exe http://localhost:8080/jolokia/read/metrics:name=trx.process.approved"
interval => 10
codec => json { charset => "CP1252" }
}
}
output {
elasticsearch {
node_name => test
host => myhost
}
}
cmd下的输出
{"request":{"mbean":"metrics:name=trx.process.approved","type":"read"},"value":{"Count":14},"timestamp":1434643572,"status":200}
elasticsearch上的不可解析输出(3行!)
C:\Daten\tools\logstash-1.5.1\bin>C:\bin\curl\curl.exe http://localhost:8080/jolokia/read/metrics:name=trx.process.approved {"request":"mbean":"metrics:name=trx.process.approved","type":"read"},"value":{"Count":14},"timestamp":1434641808,"status":200}
通常我会尝试仅剪切JSON输出,但不知何故我在Windows上对此有所了解。
我尝试过滤插件拆分,将这三行分开,但不知道如何放弃第1行和第2行。
filter {
split {
}
}
任何指示赞赏。
最后我只希望将这一行发送给elasticsearch:
{"request":{"mbean":"metrics:name=trx.process.approved","type":"read"},"value":{"Count":14},"timestamp":1434641808,"status":200}
答案 0 :(得分:2)
自己找到解决方案
filter {
split {
}
if [message] !~ "^{" {
drop {}
}
}
如果字符串不以“{”开头,则使用带正则表达式的条件,该行将被删除。