2016-08-10 11 views
2

私はこのようなログを持っている:私はkibanaにプッシュしたいfilebeat、logstash、およびelasticsearchを使用してjson形式のログをkibanaに送信しますか?

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c98963b","channelName":"JSPC","apiVersion":"v1","modulName":null,"actionName":"apiRequest","typeOfError":"","statusCode":"","message":"In Auth","exception":"In Auth","logType":"Info"} 

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c987206","channelName":"JSPC","apiVersion":"v2","modulName":null,"actionName":"performV2","typeOfError":"","statusCode":"","message":"in inbox api v2 5","exception":"in inbox api v2 5","logType":"Info"} 

を。

input { 

    beats { 
    port => 5000 
    tags => "beats" 
    codec => "json_lines" 
    #ssl => true 
    #ssl_certificate => "/opt/filebeats/logs.example.com.crt" 
    #ssl_key => "/opt/filebeats/logs.example.com.key" 
    } 


    syslog { 
     type => "syslog" 
     port => "5514" 

    } 

} 

しかし、まだ私は、文字列形式でログを取得する:私はコーデックの種類を変更したい、今すぐ次の構成を使用して

filebeat.yml 

### Logstash as output 
logstash: 
# The Logstash hosts 
hosts: ["localhost:5044"] 

# Number of workers per Logstash host. 
#worker: 1 

:私は、以下の構成を使用して、logstashするデータを送信するためにfilebeatを使用しています:

"メッセージ": "ログオン":\ "57aaf6c96224b \"、\ "clientIp \":\ "127.0.0.1 \"、\ "時刻\":\ "03:11:29 「アクション名」:\ "404 \"、\ "typeOfError \":\ "channelName \":\ "JSPC \"、\ "apiVersion \ \ "EXCEPTION \"、\ "statusCode \":0、\ "message \":\ "404ページが見つかりましたhttp: \/\/localjs.com \ /アップロード\/NonScreenedImages \/profilePic120 \/16 \/29 \ /15997002iicee52ad041fed55e952d4e4e163d5972ii4c41f8845105429abbd11cc184d0e330.jpeg \ "\ "LOGTYPE \":\ "エラー\"}"、

助けてください私はこれを解決する。

答えて

6

Filebeatから送信されたLogstashのJSONログ行を解析するには、コーデックの代わりにjson filterを使用する必要があります。これは、FilebeatがそのデータをJSONとして送信し、ログ行の内容がmessageフィールドに含まれているためです。

Logstashの設定:

input { 
    beats { 
    port => 5044 
    } 
} 

filter { 
    if [tags][json] { 
    json { 
     source => "message" 
    } 
    } 
} 

output { 
    stdout { codec => rubydebug { metadata => true } } 
} 

Filebeatの設定:JSONフィルタは、条件付きに適用することができるようにFilebeatの設定において

filebeat: 
    prospectors: 
    - paths: 
     - my_json.log 
     fields_under_root: true 
     fields: 
     tags: ['json'] 
output: 
    logstash: 
    hosts: ['localhost:5044'] 

、私はイベントに "JSON" タグを追加しましたデータ。

Filebeat 5.0はLogstashを使用せずにJSONを解析できますが、現時点ではまだアルファ版です。 Structured logging with Filebeatというブログ記事は、Filebeat 5.0でJSONを解析する方法を示しています。

+1

もしfilebeat.ymlファイルに記載された変更を加える、以下logstash構成作品: '入力{ ビート{ ポート=> 5044 }} フィルタ{なら[タグ] [JSON] { JSON { ソース=> "メッセージ" } } } 出力{ elasticsearch { ホスト=> "ローカルホスト:9200" manage_template =>偽 指数=>「%{[@メタデータ] [ビート]} - %{+ YYYY.MM.dd} " docume nt_type => "%{[メタデータ] [タイプ]}" } } '、あなたの設定ではありません。助けてくれてありがとう。 – learner

2

From FileBeat 5.x Logstashを使用せずに行うことができます。

Filebeatの設定:

filebeat.prospectors: 
- input_type: log 
    paths: ["YOUR_LOG_FILE_DIR/*"] 
    json.message_key: logId 
    json.keys_under_root: true 

output.elasticsearch: 
    hosts: ["<HOSTNAME:PORT>"] 
    template.name: filebeat 
    template.path: filebeat.template.json 

FilebeatがLogstash、より軽量です。 また、あなたはあなたがFileBeat 5.xの 実例のこの機能を使用することができますバージョン2.xをelasticsearchする挿入する必要がある場合でもhere

+0

ログシュッシュより弾性に直接向かうことのトレードオフは何ですか? –

+0

@Robbo_UKあなたは集中的に弾性へのアクセスを制御する能力を失います。すべてのファイルビートノードに弾性のための認証キーがあれば、弾力的な変更はすべてのものを更新する必要があります。対して1つのログボックス –

0

を見つけることができます私はあなたが持っているとまったく同じ問題のためのインターネットを洗い上げてきましたし、上記を含む様々な提案を試みました。しかし、誰も役に立たなかったので、私はそれを古風なやり方でやった。私はelasticsearchドキュメントon filebeat configuration

に行って、すべてのことは

Filebeatの設定(logstashでフィルターの設定は不要)必要なかった。

filebeat.prospectors: 
- input_type: log 
    document_type: #whatever your type is, this is optional 
    json.keys_under_root: true 
    paths: 
    - #your path goes here 

keys_under_root

コピーネストされたJSONを出力文書のトップレベルにキーを押します。

ファイルのバージョンは5.2.2です。

+0

あなたは正しいです。しかし、私は以前のバージョンのfilebeatを使用しています。その場合、@aj答えが働くだけです。 – learner

関連する問題