0

Python ログ ファイルの解析に logtash を使用したいのですが、それを行うのに役立つリソースはどこにありますか。例えば:

20131113T052627.769: myapp.py: 240: 情報: ユーザー Niranjan ログイン

ここでは、時間情報といくつかのデータ情報を取得する必要があります。

4

2 に答える 2

0

私はまったく同じ問題/ニーズを抱えていました。私は本当にこれに対する解決策を見つけることができませんでした。Python のログ出力と実際に一致する利用可能な grok パターンはなかったので、単純に に追加したカスタム grok パターンを作成しましたpatterns/grok-patterns

DATESTAMP_PYTHON %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{INT}

私が書いたlogstash構成は、素晴らしいフィールドを提供してくれました。

  • @タイムスタンプ
  • レベル
  • メッセージ

ログエントリを生成していた python モジュールを表示するpymoduleと呼ばれるいくつかの追加フィールドを追加しました。

私の logstash 構成ファイルは次のようになります ( sincedb_path を無視します。これは、logstash を実行するたびにログ ファイル全体を強制的に読み取る単純な方法です)。

input {                                                                                                                                                                                                
    file {                                                                                                                                                                                             
        path => "/tmp/logging_file"                                                                                                                                                                            
        start_position => "beginning"                                                                                                                                                                  
        sincedb_path => "/dev/null"                                                                                                                                                                    
    }                                                                                                                                                                                                  
}                                                                                                                                                                                                      

filter {                                                                                                                                                                                               
    grok {                                                                                                                                                                                             
        match => [                                                                                                                                                                                     
            "message",                                                                                                                                                                                             "%{DATESTAMP_PYTHON:timestamp} - %{DATA:pymodule} - %{LOGLEVEL:level} - %{GREEDYDATA:logmessage}"                                                                                                  ]                                                                                                                                                                                              
    }                                                                                                                                                                                                  

    mutate {                                                                                                                                                                                           
        rename => [ "logmessage", "message" ]                                                                                                                                                          
    }                                                                                                                                                                                                  

    date {                                                                                                                                                                                             
        timezone => "Europe/Luxembourg"                                                                                                                                                                
        locale => "en"                                                                                                                                                                                 
        match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ]                                                                                                                                           
    }                                                                                                                                                                                                  
}                                                                                                                                                                                                      

output {                                                                                                                                                                                               
    stdout {                                                                                                                                                                                           
        codec => json                                                                                                                                                                                  
    }                                                                                                                                                                                                  
}       

その点に注意してください

これが最善の解決策である、またはわずかに許容できる解決策であるという保証はまったくありません。

于 2014-08-04T13:22:43.880 に答える
0

Python ログ ファイルの形式は少し異なります。

[2014-10-08 19:05:02,846] (6715) DEBUG:Our debug message here

そのため、特別なパターンを必要とせずに構成ファイルを作成できました。

input {
    file {
        path => "/path/to/python.log"
        start_position => "beginning"
    }
}
filter {
    grok {
        match => [
            "message",                                                                                                                                                                                             "\[%{TIMESTAMP_ISO8601:timestamp}\] \(%{DATA:pyid}\) %{LOGLEVEL:level}\:%{GREEDYDATA:logmessage}"                                                                                                  ]
    }
    mutate {
        rename => [ "logmessage", "message" ]
    }
    date {
        timezone => "Europe/London"
        locale => "en"
        match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ]
    }
}
output {
  elasticsearch {
    host => localhost
  }
  stdout { 
      codec => rubydebug 
  }
}  

そして、これはうまくいくようです。

于 2014-10-08T19:08:31.883 に答える