web-dev-qa-db-ja.com

JSONファイルをLogstash + Elasticsearch + Kibanaにインポートする

そのため、リクエストごとにそのリクエストに関するログデータを含むJSONファイルを出力するWebプラットフォームがあります。特定のレベルなどでのみ、いつログを記録するかについていくつかのルールを設定できます...

今、Logstash + Elasticsearch + Kibana3スタックをいじっていますが、Kibanaでそれらのログを表示する方法を見つけたいです。私の質問は、Logstashにこの種のファイルをインポートさせる方法はありますか、それともカスタム入力プラグインを作成する必要がありますか?いろいろ調べてみたところ、プラグインはRubyで書かれていますが、これは私が経験のない言語です。

11
Pedro M. Silva

Logstashは、さまざまな種類のsyslogファイルをJSONに変換し、それらをelasticsearch(またはグラファイト、または...)にロードするための単なるツールです。

ファイルはすでにJSONであるため、logstashは必要ありません。 curlを使用して、それらをelasticsearchに直接アップロードできます。

JSONファイルをElasticsearchにインポート/インデックス付けする を参照してください

ただし、Kibanaで適切に機能するためには、JSONファイルを最小限にする必要があります。

  1. フラット-KibanaはネストされたJSON構造体を理解しません。キー/値ペアの単純なハッシュが必要です。

  2. 識別可能なタイムスタンプがあります。

私がお勧めするのは、JSONファイルのlogstash出力を調べて、その構造に一致するようにJSONファイルをマッサージできるかどうかを確認することです。 JSONをサポートする任意の言語でこれを実行できます。プログラムjqは、ある形式から別の形式にjsonをフィルタリングするのに非常に便利です。

Logstash形式- https://Gist.github.com/jordansissel/2996677

jq- http://stedolan.github.io/jq/

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 }
    }

}
17
griffon vulture

Logstashは多くのプラグインを提供するため、さまざまな形式とソースをインポートできます。 nxlog 、rsyslog、syslog-ng、flume、kafka、fluentdなど、logstashにログを送信できる他のログコレクターおよびフォワーダーツールもあります。リソースフットプリントが少ないため、ELKスタックと組み合わせて(Linux上でも同様に動作しますが)Windows上で動作します。 (免責事項:私はプロジェクトに所属しています)

1
b0ti