2017-08-16 1 views
1

I en utilisant cette configuration logstash pour filtrer mes journaux:filtre Logstash ne pas fonctionne sur tous les 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" ] 
     } 
    } 

Une ligne d'exemple pour les journaux:

{ 
    "@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": [] 
} 

Le problème avec celui-ci est que chaque message sera abandonné et rien ne va au fichier final. Je suis très débutant en logstash alors pouvez-vous m'aider.

Répondre

1

Pour accéder à la valeur docker.image dans le filtre logstash, vous devez utiliser [docker][image]

Edit: La référence dans le logstash documentation:

La syntaxe pour accéder à un champ est [fieldname]. Si vous faites référence à un champ de niveau supérieur , vous pouvez omettre le [] et simplement utiliser fieldname. Pour faire référence à un champ imbriqué , spécifiez le chemin d'accès complet à ce champ: [top-level field][nested field].

+0

merci beaucoup :) – doktoric

+0

Vous pouvez marquer la réponse comme acceptée si elle a résolu votre problème, j'aime recevoir des points d'internet B) – baudsp