3 votes

Logstash crée un nouveau champ basé sur un champ existant

J'ai des données provenant de requêtes de base de données utilisant le plugin d'entrée jdbc et le résultat des requêtes contient le champ url dont je veux extraire quelques propriétés.

Exemples d'URL :

  • /incident.do?sys_id=0dc18b246faa17007a64cbe64f3ee4e1&sysparm_view
  • /navpage_form_default.do
  • /u_pm_prov_project_list.do?sysparm_userpref_module=fa547ce26f661
  • JOB: email read events process
  • JOB: System - reduce resources

J'ai ajouté des modèles de regex dans le fichier de modèles grok :

webpage_category .*
job_type .*

J'ai deux types d'URL donc j'ai utilisé un bloc if dans le bloc de filtre pour les distinguer

Config que j'ai essayée jusqu'à présent :

filter {
       if [url] =~ /JOB: .*/ {
               grok {
                    patterns_dir => ["/etc/logstash/patterns"]
                    match => {
                             "url" => "JOB: %{job_type:job_type}"
                    }
               }
        } else
        if [url] =~ /\/.*\.do\?.*/ {
                grok {
                     patterns_dir => ["/etc/logstash/patterns"]
                     match => {
                              "url" => "/{webpage_category:webpage_category}\.do\?.*"
                     }
                 }
         }
}

La création d'un nouveau champ pour les URL commençant par JOB: fonctionne correctement mais webpage_category ne fonctionne pas du tout. Est-ce parce que le regex ne peut pas être utilisé à l'intérieur de match ?

0voto

Sufiyan Ghori Points 497

Le problème est que vous essayez d'utiliser le motif grok à l'intérieur d'un filtre mutate, ce qui ne fonctionnerait pas. mutate et grok sont deux plugins de filtre distincts.

Vous devez utiliser add_field à l'intérieur du filtre grok si vous voulez utiliser le motif grok pour créer un champ. veuillez vous rappeler que add_field est pris en charge par tous les plugins de filtre.

Veuillez consulter l'exemple suivant,

filter {
  grok {
    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
  }
}

Dans votre cas, cela sera,

filter{
   grok {
      add_field => {
         "webpage_category" => "%{webpage_category:url}"
          "job_type" => "%{job_type:url}"
       }
   }
}

Veuillez également vous assurer que patterns_dir est importé,

patterns_dir => ["./patterns"] => ["./patterns"]

veuillez consulter la documentation sur le filtre grok également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X