2017-02-13 1 views
0

Я создал эту новую тему, чтобы избежать путаницы, но это связано со следующей темой, которая была решена:Из данной области, в зависимости от содержания, mofify его и хранить его в различных новых областях

Modify the content of a field using logstash

Допустим, что в поле называется code содержание также слова, как: notification или mountain, и я хотел бы создать еще одно поле называется code_word хранить эти слова.

Итак, из поля code в базе данных, в зависимости от его содержания, оно создало бы code_short и code_word.

Я пытался что-то вроде этого:

grok { 
    match => { "code" => "(?<prefix>[a-zA-Z]+)000000%{INT:suffix} %{WORD:word}" } 
    add_field => { "code_short" => "%{prefix}%{suffix}"} 
    add_field => { "code_word" => "%{word}"} 
} 

но явно не работает: _grokparsefailure.

Я не уверен, как это сделать, мне интересно, можно ли это сделать с помощью условного типа «если».

Это выход:

{ 
    "took": 5, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 43, 
     "max_score": 1, 
     "hits": [ 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg75", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.360Z", 
       "code": "molfix-oat", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg77", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.365Z", 
       "code": "PO0000002221", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8C", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.372Z", 
       "code": "ST0000003302", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8K", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.382Z", 
       "code": "notifications-set", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8M", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.384Z", 
       "code": "PO0000001111", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8N", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.385Z", 
       "code": "PO0000000808", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8R", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.388Z", 
       "code": "TT0000000009", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8U", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.391Z", 
       "code": "ST0000001113", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8c", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.398Z", 
       "code": "test/bin/UT0", 
       "@version": "1", 
       "tags": [] 
      } 
     }, 
     { 
      "_index": "test1", 
      "_type": "data", 
      "_id": "AVo3yno0PoyZlwFEpg8g", 
      "_score": 1, 
      "_source": { 
       "@timestamp": "2017-02-13T14:05:00.400Z", 
       "code": "PO0000001203", 
       "@version": "1", 
       "tags": [] 
      } 
     } 
     ] 
    } 
} 

ответ

0

Самый простой способ это сделать, чтобы обнаружить grokparsefailure тег и присвоить значение code_word вместо:

grok { 
    match => { "code" => "(?<prefix>[a-zA-Z]+)000000%{INT:suffix}" } 
    add_field => { "code_short" => "%{prefix}%{suffix}"} 
} 
if "_grokparsefailure" in [tags] { 
    mutate { 
     add_field => { "code_word" => "%{code}"} 
     remove_field => ["tags"] 
    } 
} 
+0

спасибо за ваш быстрый reply.Now он создает «code_word» с тем же содержимым, что и «code». Он больше не создает форматированное поле «code_short». Что я пытаюсь достичь, из данного поля «код» генерирует два разных поля в зависимости от его содержимого, «code_short» с содержимым типа PO1209 и th e other, «code_word» с только словами, что поле «code» имеет некоторые его строки. Любая другая идея сделать эту работу? Большое спасибо – Ubbi099

+0

Мне нужно увидеть один образец значения «code», который не будет соответствовать шаблону grok и что вам нужно будет сохранить его в «code_word». То, как я это вижу, если шаблон совпадает, вы получаете только «code_short», и если шаблон не соответствует, вы получаете только «code_word» – Val

+0

. Было бы так: Примеры образцов поля «код» хранящиеся в "code_word", значения: Molfix, notificaion-овсяная, коры головного мозга, И примеры образцов поле "код", чтобы хранить в "code_short", значения перед форматированием: PO0000001209, ST0000000909, После сохранения в «code_short» они будут выглядеть так: PO1209, ST0909, Спасибо. – Ubbi099

Смежные вопросы