echo
February 8, 2020, 11:12am
1
Logstash.conf で Filebeat から送信されたファイル名を grok で取得したいのですが、
下記で出来ませんでした。(バージョン7.5.2)
6.3.1 では出来ていて、ドキュメントを読んでも同様の動作が
可能な方法が見つからない状況です。
Filebeatの送信ファイルパスは、/var/log/2.log です。
どなたかご教示いただければと思います。
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "source" => "/var/log/%{INT:filename}.log" }
}
}
output {
file {
path => "/usr/local/var/logstash/%{filename}.tsv"
codec => line { format => "%{message}" }
}
}
tsgkdt
(tsgkdt)
February 9, 2020, 1:10pm
2
こんにちわ
filebeat6.3.1と、7.5.2ではlogstashに送られる中身の構造が変わっているかと思います。
これは、7系からElastic Common Schemaに準拠するようになったからかと思っています。
例えば、7.5.2ではこんなデータになってLogstashに送られていますね。
{
"@version" => "1",
"@timestamp" => 2020-02-06T10: 14: 11.310Z,
"agent" => {
"hostname" => "a00271752ce1",
"version" => "7.5.2",
"id" => "b26e6309-0577-408e-9284-b059421fcf0c",
"type" => "filebeat",
"ephemeral_id" => "c4eb8204-77e1-4d87-a252-c5ad5f978afb"
},
"log" => {
"offset" => 0,
"file" => {
"path" => "/var/log/2.log"
}
},
"ecs" => {
"version" => "1.1.0"
},
"message" => "aaaa",
"host" => {
"hostname" => "a00271752ce1",
"containerized" => true,
"os" => {
"version" => "7 (Core)",
"kernel" => "4.19.76-linuxkit",
"family" => "redhat",
"name" => "CentOS Linux",
"platform" => "centos",
"codename" => "Core"
},
"name" => "a00271752ce1",
"architecture" => "x86_64"
},
"input" => {
"type" => "log"
}
}
このため、従来 sourceに入っていたところのファイルのパスが log.file.path
になっています。
ここがLogstash側でエラーになっている原因かと推察します。
ですので、grokの部分をlog.file.pathにあわせて変更してやれば良いとなります。
こんな感じです。
input {
beats {
port => 5044
}
}
filter {
grok {
# データ取得元を変更
match => { "[log][file][path]" => "/var/log/%{INT:filename}.log" }
}
}
output {
stdout {
}
}
まず、一度stdoutでgrokのエラーが出ないことを確認してから、ファイル出力でお試しいただくのが良いかと思います。
ご参考になれば幸いです。
echo
February 9, 2020, 3:51pm
3
tsgkdt:
[log][file][path]
ご丁寧なご説明と、貴重な情報をありがとうございます。
無事に解決できました。
system
(system)
Closed
March 8, 2020, 3:51pm
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.