2017-08-16 19 views
1

の作品私は、フィルタのための私のログをこのlogstash設定を使用していません:Logstashフィルタは、任意のlogline

input { 
     udp { 
     port => 9600 
     codec => json 
     } 
     tcp { 
     port => 9600 
     codec => json 
     } 
    } 

    filter { 
     mutate { add_field => [ "pod_id", "${POD_ID}" ] } 
     if [docker.image] =~ /consul/ { 
     mutate { add_field => [ "image_type", "consul" ] } 
     } 
     else if [docker.image] =~ /image86/ { 
     mutate { add_field => [ "image_type", "image86" ] } 
     } 
     else if [docker.image] =~ /traefik/ { 
     mutate { add_field => [ "image_type", "traefik" ] } 
     } else { 
     drop {} 
     } 


    } 

    output { 
     file { 
     path => [ "${LOGSTASH_OUTPUT_PATH}/${NODE_ID}/%{image_type}-%{+YYYY-MM-dd}.log" ] 
     } 
    } 

ログのサンプル行:

{ 
    "@timestamp": "2017-08-16T10:31:24.912Z", 
    "stream": "stderr", 
    "port": 58768, 
    "@version": "1", 
    "host": "127.0.0.1", 
    "message": "\"Update /api/v1/namespaces/default/pods/logstash-l0t1l/status\" [638.662326ms] [107.202µs] END", 
    "pod_id": "logstash-h04h7", 
    "docker": { 
    "image": "gcrio.azureedge.net/google_containers/[email protected]:97a2133434e2d3b12afcc19d47c53bf4c3539eb8dab1ece0bc58cc9509", 
    "hostname": "k8s-master-sdfsd1DC9D-1", 
    "name": "/traefik_kube-system_0b2942b3e833432463ca0b767977a99e_0", 
    "id": "fbc8bbbdaf2c3845008fc800a6134e2740eb72f9f705b0720a450a9c2d435c76", 
    "labels": null 
    }, 
    "tags": [] 
} 

この1の問題は、すべてのことですメッセージはドロップされ、エンドファイルには何も移動しません。私はlogstashで非常に初心者ですので、私を助けることができます。 logstashフィルタでdocker.image値にアクセスするには

答えて

1

、あなたは[docker][image]

編集を使用する必要があります:フィールドにアクセスするための構文は[fieldname]ある

logstash documentation内の参照を。 トップレベルフィールドを参照している場合は、[]を省略し、単にfieldnameを使用します。 ネストされたフィールドを参照するには、そのフィールドへのフルパスを指定します。[top-level field][nested field]

+0

ありがとうございました:) – doktoric

+0

あなたの問題を解決した場合は、回答を受け入れ可能とマークして、インターネットポイントを受け取るのが楽しいです。B) – baudsp