Logstash: как использовать фильтр для соответствия имени файла при использовании s3

Я новичок в логсташе. У меня есть несколько журналов, хранящихся в AWS S3, и я могу импортировать их в logstash. Мой вопрос: можно ли использовать фильтр grok для добавления тегов на основе имен файлов? Я пытаюсь использовать:

grok { 
    match => {"path" => "%{GREEDYDATA}/%{GREEDYDATA:bitcoin}.err.log"}
    add_tag => ["bitcoin_err"]
    }

Это не работает. Я предполагаю, что причина в том, что «путь» работает только с файловыми входами.

Вот структура моих корзин S3:

my_buckets
    ----A
        ----2014-07-02
            ----a.log
            ----b.log
    ----B
        ----2014-07-02
            ----a.log
            ----b.log

Я использую эту конфигурацию ввода:

s3 {
    bucket => "my_buckets"
    region => "us-west-1"
    credentials => ["XXXXXX","XXXXXXX"]
    }

Я хочу, чтобы для любых сообщений журнала в:

  • "A/2014-07-02/a.log": они будут иметь тег ["A","a"].

  • "A/2014-07-02/b.log": они будут иметь тег ["A","b"].

  • "B/2014-07-02/a.log": они будут иметь тег ["B","a"].

  • "B/2014-07-02/b.log": они будут иметь тег ["B","b"].

Извините за мой английский....


person Zodiac    schedule 04.07.2014    source источник


Ответы (3)


Во входах S3 нет «пути». Я монтирую хранилище S3 на свой сервер и использую файловые входы. Теперь с файловыми входами я могу использовать фильтр для сопоставления пути.

person Zodiac    schedule 07.07.2014
comment
Интересно, не могли бы вы уточнить, как вы это делаете? Я пытаюсь решить что-то подобное, когда у меня есть журналы, собранные в папках по часам в день папок, поэтому мне нужно иметь возможность просматривать файловую структуру для обратной засыпки данных. - person Pat Marx; 16.10.2014
comment
Я перестал работать над этим. У меня больше нет доступа к этому серверу. У меня есть только мой код на сервере. Если вы можете привести несколько примеров здесь, я могу помочь вам - person Zodiac; 17.10.2014

С Logstash 6.0.1 я смог получить ключ для каждого файла с S3. В вашем случае вы можете использовать этот ключ (или путь) в фильтре для добавления тегов.

Пример:

input {
    s3 {
        bucket => "<bucket-name>"
        prefix => "<prefix>"
    }
}

filter {
    mutate {
        add_field => {
            "file" => "%{[@metadata][s3][key]}"
        }
    }
    ...
}

Используйте это выше поле file в фильтре, чтобы добавить теги.

Ссылка:

Найдите ответ eye8 в эта проблема

person Abhinav    schedule 14.12.2017

Если вы хотите использовать теги на основе имени файла, я думаю, что это сработает (я не проверял):

filter {
  grok {
    match => [ "path", "%{GREEDYDATA:content}"]   
  }     
  mutate {
    add_tag => ["content"]
  }
}

Тег «content» будет именем файла, теперь вам нужно изменить шаблон, чтобы создать разные теги с определенной частью имени файла.

person user2443476    schedule 04.07.2014
comment
Это не работает. Это только добавляет теги ко всем файлам - person Zodiac; 04.07.2014
comment
Я не уверен, будут ли входы s3 иметь поле пути. Есть идеи? - person Zodiac; 04.07.2014