После добавления фильтра Чернослив вместе с фильтром KV - логи не идут на поиск Elasti c - PullRequest
1 голос
/ 12 апреля 2020

Я изучаю ELK и пытаюсь сделать как ПО C для моего проекта. Я применяю KV-фильтр для примеров журналов интеграции из моего проекта, и я мог видеть, что в результате появилось много дополнительных полей, поэтому я попытался применить фильтр обрезки и определенные поля из белого списка. Я вижу, как журналы печатаются на сервере logsta sh, но журналы не отправляются на поиск elasti c. Если я уберу фильтр, он перейдет к поиску elasti c. Посоветуйте, пожалуйста, как продолжить отладку по этой проблеме.

filter {
    kv {
            field_split => "{},?\[\]"
            transform_key => "capitalize"
            transform_value => "capitalize"
            trim_key => "\s"
            trim_value => "\s"
            include_brackets => false   
        }
    prune
    {
        whitelist_names => [ "App_version", "Correlation_id", "Env", "Flow_name", "host", "Instance_id", "log_level","log_thread", "log_timestamp", "message", "patient_id", "status_code", "type", "detail"]
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "mule-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
  stdout { codec => rubydebug }
}

Мне также нужно еще два предложения,

Я также пытаюсь использовать фильтр grok в начальных журналах и пытаюсь взять журнал поля уровня (время и тип журнала) из журнала образцов и отправьте оставшиеся журналы в фильтр KV. Есть ли какие-либо ссылки, пожалуйста, поделитесь им. Это то, что я пытался за это. но получить как _grokparsefailure. Я передал msgbody фильтру kv с опцией источника.

grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
        overwrite => [ "msgbody" ]
    }

У меня есть поля сообщений в журналах примеров, как показано ниже. Когда данные отправляются в Кибану, я вижу два тега поля сообщения: один с полным журналом, а другой с правильным сообщением (выделено). Будет ли работать мутат для этого случая? Есть ли способ, которым мы можем изменить полное имя журнала как-то еще ??

[2020-02-10 11: 20: 07.172] INFO Mule.api [[MuleRuntime] .cpuLight.04: [main-api-test] .api-main.CPU_LITE @ 256c5cf5: [main-api-test] .main-api-main / processors / 0 / processors / 0.CPU_LITE @ 378f34b0]: событие: 00000003 {app_name = main -api-main, app_version = v1, env = Test, отметка времени = 2020-02-10T11: 20: 07.172Z, log = {correlation_id = 00000003, Patient_id = 12345678, instance_id = больница, сообщение = запуск системного API, имя_потока = main-api-main}}

1 Ответ

1 голос
/ 12 апреля 2020

ошибка фильтра обрезки

Ваш фильтр prune не имеет поля @timestamp в списке whitelist_names, ваш вывод основан на дате (%{+YYYY.MM.dd}), logsta sh требуется поле @timestamp в выходных данных для извлечения даты.

Я запустил ваш конвейер с вашим примером сообщения, и он сработал, как и ожидалось, с фильтром prune, в который отправляется сообщение. asticsearch, но он хранится в индексе с именем mule- без какого-либо поля даты и времени.

Без фильтра prune ваше сообщение использует время, когда logsta sh получила событие как @timestamp, поскольку у вас нет фильтра даты для его изменения.

Если вы создали шаблон индекса для индекса mule-* с полем даты и времени, например @timestamp, вы не увидите в Kibana никаких документов в индексе. у которого нет того же поля даты и времени.

ошибка грока

Ваш грок неверен, вам нужно снять квадратные скобки, окружающие вашу метку времени. В Kibana есть отладчик grok, в котором вы можете попробовать свои шаблоны.

Работает следующий grok, переместите ваше kv для запуска после grok и с msgbody в качестве источника.

grok {
    match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
    overwrite => [ "msgbody" ]
}
kv {
    source => "msgbody"
    field_split => "{},?\[\]"
    transform_key => "capitalize"
    transform_value => "capitalize"
    trim_key => "\s"
    trim_value => "\s"
    include_brackets => false
}

Just запустите его с выводом только в stdout, чтобы увидеть фильтры, необходимые для изменения фильтра prune.

дублированные поля сообщений

Если вы установите фильтр kv после того, как grok вы не дублировали бы поля message, так как ваши kv пишут с заглавными буквами ваши поля, вы закончите полем message, содержащим ваш полный журнал, и полем Message, содержащим ваше внутреннее сообщение, Поля logsta sh чувствительны к регистру.

Однако вы можете переименовать любое поле, используя фильтр mutate.

mutate {
    rename => ["message", "fullLogMessage"]
}
...