Logstash Field разделить и объединить - PullRequest
0 голосов
/ 22 ноября 2018

Я начал использовать и настраивать стек ELK месяц назад как личный проект в ИТ-компании, в которой я работаю.

Без какого-либо обучения или кодирования мой Logstash работает достаточно хорошо, чтобы принимать журналы отCisco ASR5K на StarOS и некоторых устройствах IOS, отправьте их в Elasticsearch, а также сохраните их в формате RAW.

Сейчас я пытаюсь немного настроить поля, которые я создал для этой конфигурации, и яЯ столкнулся с некоторыми трудностями, поэтому я очень надеюсь, что вы сможете мне помочь.Любые отзывы будут приветствоваться.

Хорошо, поэтому моя проблема заключается в следующем: у меня есть журнал в формате RAW

<171>Nov 13 18:11:03 evlogd: [local-60sec3.378] [diameter 92004 error] [8/0/6001 <diactrl:0> flow_id_mgmt.c:743] [software internal system syslog] Flow ID sync with facility 87000 instance 377 failed 82649 times

И я применил следующее совпадение

%{ASR_TIMESTAMP:log_date} %{ASR_TASK:task} \[%{ASR_FACILITY:facility}\] \[%{ASR_INSTANCE:instance_info}\] \[%{ASR_MGR:mgr}\] \[%{ASR_LEVEL:level}\] %{ASR_RAW:message}

Со следующим пользовательским шаблоном:

CISCOTIMESTAMPTZ %{CISCOTIMESTAMP}( %{TZ})?
NEXUSTIMESTAMP %{YEAR} %{MONTH} %{MONTHDAY} %{TIME}( %{TZ})?
ASR_TIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
ASR_TASK %{DATA}
ASR_FACILITY %{DATA}
ASR_EVENT_ID %{DATA}
ASR_LEVEL %{DATA}
ASR_EVENT_LEVEL %{WORD}
ASR_INSTANCE %{DATA}
ASR_CONTEXT %{DATA}
ASR_EVENT %{WORD}
ASR_TYPE %{DATA}
ASR_MGR %{DATA}
ASR_RAW %{GREEDYDATA}
ASR_CALLID %{DATA}

И все отлично работает (ну, по крайней мере, для меня).Журналы совпадают, так что это хорошее начало.

{
         "log_date" => "Nov 15 13:20:07",
--
         "hostname" => "MM-MME",
      "fingerprint" => "9414227242b545335cb679d9905dddf6b8976cf2",
             "task" => "evlogd:",
            "level" => "software internal system syslog",
             "host" => "X.X.X.X",
              "mgr" => "8/0/6001 <diactrl:0> flow_id_mgmt.c:743",
          "message" => "Flow ID sync with facility 87000 instance 75 failed 83718 times\u0000",
       "@timestamp" => 2018-11-15T11:20:07.439Z,
    "instance_info" => "diameter 92004 error",
         "facility" => "local-60sec7.199",
             "type" => "syslog-cisco"
}

Я хочу удалить число из поля «instance_info», чтобы оно было «ошибкой диаметра»

Почему?Я хочу создать круговую диаграмму визуализации с данными из этого поля, и цифры для меня абсолютно не важны.Более того, он привинчивает мою круговую диаграмму, создавая тысяч из:

sessmgr 10033 trace
sessmgr 10036 trace
sctp 87304 error
sgsn-gtpc 116043 debug
sessmgr 12902 debug
sgs 173002 debug
nas 153002 debug
sgs 173001 debug
sgsn-gtpc 116004 debug
sessmgr 12093 error
sgsn-gtpc 116003 debug
sgsn-gtpc 116094 info
sgsn-gtpc 116095 info
sgsn-gtpc 116120 debug
sgsn-gtpc 116122 debug
sgsn-gtpc 116057 debug
sessmgr 10177 debug
sessmgr 10207 info
sessmgr 10285 debug
aaamgr 36861 debug
sessmgr 10004 info
sessmgr 10738 trace
sessmgr 12952 info
aaa-client 6002 debug
aaa-client 6003 debug

И должно быть примерно 15-20 результатов, таких как:

sgsn-gtpc info/debug etc
sessmgr info/debug/error etc
aaamgr info/debug/error etc

Я пыталсяна основе следующего плана действий: разделить вступительные данные «instance_info» на 3 поля:

ASR_INSTANCE %{WORD}
ASR_INSTANCE_NR %{NUMBER}
ASR_INSTANCE_LVL %{WORD}

и создать новое совпадение:

%{ASR_TIMESTAMP:log_date} %{ASR_TASK:task} \[%{ASR_FACILITY:facility}\] \[%{ASR_INSTANCE:instance_info}%{SPACE}%{ASR_INSTANCE_NR:nr}%{SPACE}%{ASR_INSTANCE_LVL:Level}\] \[%{ASR_MGR:mgr}\] \[%{ASR_LEVEL:level}\] %{ASR_RAW:message}

, которое работает (проверено в отладчике GROK онлайн):

"instance_info": [
    [
      "diameter"
    ]
  ],
  "nr": [
    [
      "92004"
    ]
  ],
  "Level": [
    [
      "error"

Теперь я хочу удалить поле "nr" и объединить ["instance_info", "Level"] в одно поле.И если честно, я понятия не имею, как.Я пытался с плагином mutate, но мне не хватает знаний, чтобы понять, как и где его вставить.

Просим вас помочь мне в этом вопросе или предложить другой способ.Файл конфигурации: 01-cisco.conf

Я знаю, что для большинства из вас мой файл конфигурации может выглядеть очень жутким, но это лучшее, что я могу сделать, поэтому, пожалуйста, не судите моюфайл frankenstein.conf.Любая помощь и предложения по моей проблеме или по любой строке в конфиге будут приветствоваться!

1 Ответ

0 голосов
/ 22 ноября 2018

Вы почти у цели.Все, что вам нужно сделать, это использовать mutate / replace для объединения нужных вам данных и mutate / remove_filed для удаления ненужных полей.

Вам необходимо изменить ASR_INSTANCE_LVLимя поля не для уровня, так как у вас уже есть поле уровня.Допустим, вы бы назвали его asr_level.

Добавьте соответствующий mutate в конце вашего conf-файла.

mutate {
   replace => [ "instance_info", "%{instance_info} %{asr_level}" ]
}
 mutate {
   remove_field => ["asr_level", "nr"]
}

Вы можете посмотреть на этом форуме Google и https://discuss.elastic.co/t/want-to-combine-field-values-into-new-field-value/28564 для более подробной информации.

Удачи

...