web-dev-qa-db-ja.com

Logstashを配送業者として使用していますか?

サーバーからログを出荷し、各サーバーでログスタッシュを使用して出荷しています。

したがって、globからログを読み取ります"/root/Desktop/Logstash-Input/**/*_log"

 input {
            file{
                    path => "/root/Desktop/Logstash-Input/**/*_log"
                    start_position => "beginning"
            }
    }

このグロブから、イベントに追加するpathからfieldsを抽出します。例:ディレクトリpathからserverlogtypeなどを抽出します。これを行います。

filter {

grok {

        match => ["path", "/root/Desktop/Logstash-Input/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logdate>[\d]+.[\d]+.[\d]+)/(?<logfilename>.*)_log"]
}
}

次に、lumberjack出力プラグインを使用して、これらのログを中央のlogstashサーバーに出力します。

output {

        lumberjack {
                hosts => ["xx.xx.xx.xx"]
                port => 4545
                ssl_certificate => "./logstash.pub"
    }

        stdout { codec => rubydebug }
}

問題は、中央サーバーに送信されたログがgrokを使用して追加されたフィールドを失うことです。たとえば、serverlogtypeなどは中央サーバーに存在しません。ただし、クライアントマシンコンソールには追加されたフィールドが表示されますが、中央のlogstashサーバーにはmessagetimestampversionのみが存在します。

クライアント(ログの送信元)コンソール:

output received {:event=>{"message"=>"2014-05-26T00:00:01+05:30 Host crond[268]: (root) CMD (2014/05/31/server2/cron/log)", "@version"=>"1", "@timestamp"=>"2014-07-16T06:07:21.927Z", "Host"=>"Host", "path"=>"/root/Desktop/Logstash-Input/Server2/CronLog/2014.05.31/cron_log", "server"=>"Server2", "logtype"=>"CronLog", "logdate"=>"2014.05.31", "logfilename"=>"cron"}, :level=>:debug, :file=>"(eval)", :line=>"37"}
    {
              "message" => "2014-05-26T00:00:01+05:30 bx920as1 crond[268]: (root) CMD (2014/05/31/server2/cron/log)",
             "@version" => "1",
           "@timestamp" => "2014-07-16T06:07:21.927Z",
                 "Host" => "Host",
                 "path" => "/root/Desktop/Logstash-Input/Server2/CronLog/2014.05.31/cron_log",
               "server" => "Server2",
              "logtype" => "CronLog",
              "logdate" => "2014.05.31",
          "logfilename" => "cron"
    }

中央サーバー(ログの送信先)コンソール

{
       "message" => "2014-07-16T05:33:17.073+0000 Host 2014-05-26T00:00:01+05:30 bx920as1 crond[288]: (root) CMD (2014/05/31/server2/cron/log)",
      "@version" => "1",
    "@timestamp" => "2014-07-16T05:34:02.370Z"
}

そのため、出荷中にグロックフィールドは削除されます。なんでそうなの?

フィールドを保持するにはどうすればよいですか?

3

解決済み:

木こりの出力と入力にcodec => "json"を追加することで解決しました。

出力:

output {

    lumberjack {
            hosts => ["xx.xx.xx.xx"]
            port => 4545
            ssl_certificate => "./logstash.pub"
            codec => "json"
}

入力:

input { 
    lumberjack {
        port => 4545
        ssl_certificate => "/etc/ssl/logstash.pub"
        ssl_key => "/etc/ssl/logstash.key"  
        codec => "json"
  }
}
2