Назад | Перейти на главную страницу

Как выбрать только конкретный журнал из записей с модулем imfile?

У нас есть агент Logstash, который записывает свои внутренние журналы в файл в фиксированном формате (сообщение, записанное в одну строку, здесь оно отформатировано для удобства чтения):

{
    :timestamp => "2015-08-20T18:24:07.458000+0300",
    :message => "SIGINT received. Shutting down the pipeline.",
    :level => :warn
}

Я должен сделать rsyslog прочитать файл, получить журналы с :level => :error и отправить куда-нибудь. я использовал imfile модуль для него, вот конфигурация:

module(load="imfile")

input(type="imfile"
        file="/path/to/log_file"
        tag="logstash:"
        statefile="/path/to/state_file"
        severity="error"
        ruleset="logstash_internal")

ruleset(name="logstash_internal"){
        # Some action goes here
         ...
}

Как мне выбрать из файла журнала только записи об ошибках, а не все?

Я вижу здесь два варианта:

  • грязный, но простой: просто бросьте if ($ msg содержит "ошибку") и надеюсь, что нет сообщения, содержащего "ошибку", которая не является реальной ошибкой
  • чистый, но более сложный: проанализировать журналы из Logstash (или, по крайней мере, часть до уровня) с помощью мм нормализовать а затем выполните фильтр для свойства проанализированного уровня. Вы бы использовали mmnormalize так же, как и Grok Logstash, хотя внутренности сильно отличаются