そのため、リクエストごとにそのリクエストに関するログデータを含むJSONファイルを出力するWebプラットフォームがあります。特定のレベルなどでのみ、いつログを記録するかについていくつかのルールを設定できます...
今、Logstash + Elasticsearch + Kibana3スタックをいじっていますが、Kibanaでそれらのログを表示する方法を見つけたいです。私の質問は、Logstashにこの種のファイルをインポートさせる方法はありますか、それともカスタム入力プラグインを作成する必要がありますか?いろいろ調べてみたところ、プラグインはRubyで書かれていますが、これは私が経験のない言語です。
Logstashは、さまざまな種類のsyslogファイルをJSONに変換し、それらをelasticsearch(またはグラファイト、または...)にロードするための単なるツールです。
ファイルはすでにJSONであるため、logstashは必要ありません。 curlを使用して、それらをelasticsearchに直接アップロードできます。
JSONファイルをElasticsearchにインポート/インデックス付けする を参照してください
ただし、Kibanaで適切に機能するためには、JSONファイルを最小限にする必要があります。
フラット-KibanaはネストされたJSON構造体を理解しません。キー/値ペアの単純なハッシュが必要です。
識別可能なタイムスタンプがあります。
私がお勧めするのは、JSONファイルのlogstash出力を調べて、その構造に一致するようにJSONファイルをマッサージできるかどうかを確認することです。 JSONをサポートする任意の言語でこれを実行できます。プログラムjq
は、ある形式から別の形式にjsonをフィルタリングするのに非常に便利です。
Logstash形式- https://Gist.github.com/jordansissel/2996677
Logstashは、動的ファイルを処理するための非常に優れたツールです。
Logstashを使用してjsonファイルをelasticsearchにインポートする方法は次のとおりです。
構成ファイル:
input
{
file
{
path => ["/path/to/json/file"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output
{
elasticsearch {
protocol => "http"
codec => json
Host => "localhost"
index => "json"
embedded => true
}
stdout { codec => rubydebug }
}
jSONファイルの例:
{"foo":"bar", "bar": "foo"}
{"hello":"world", "goodnight": "moon"}
Jsonは1行にする必要があることに注意してください。複数行のJSONファイルを解析する場合は、構成ファイルの関連フィールドを置き換えます。
input
{
file
{
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
path => ["/opt/mount/ELK/json/*.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
Logstashは多くのプラグインを提供するため、さまざまな形式とソースをインポートできます。 nxlog 、rsyslog、syslog-ng、flume、kafka、fluentdなど、logstashにログを送信できる他のログコレクターおよびフォワーダーツールもあります。リソースフットプリントが少ないため、ELKスタックと組み合わせて(Linux上でも同様に動作しますが)Windows上で動作します。 (免責事項:私はプロジェクトに所属しています)