У меня есть экземпляры экземпляров AWS ElasticBeanstalk на ведре S3.Как извлечь переменные из пути файла журнала, проверить имя файла журнала для шаблона в Logstash?
Путь к Бревну является:
resources/environments/logs/publish/e-3ykfgdfgmp8/i-cf216955/_var_log_nginx_rotated_access.log1417633261.gz
, который переводит:
ресурсы/среды/журналы/публикация/e- [случайная среда ID]/i- [случайный экземпляр id]/
Путь содержит несколько журналов:
_var_log_eb-docker_containers_eb-current-app_rotated_application.log1417586461.gz
_var_log_eb-docker_containers_eb-current-app_rotated_application.log1417597261.gz
_var_log_rotated_docker1417579261.gz
_var_log_rotated_docker1417582862.gz
_var_log_rotated_docker-events.log1417579261.gz
_var_log_nginx_rotated_access.log1417633261.gz
Обратите внимание, что есть какая-то случайное число (метка времени?) Вставлено AWS в имени файла, прежде чем «.gz»
Проблема в том, что мне нужно установить переменные в зависимости от имени файла журнала.
Вот моя конфигурация:
input {
s3 {
debug => "true"
bucket => "elasticbeanstalk-us-east-1-something"
region => "us-east-1"
region_endpoint => "us-east-1"
credentials => ["..."]
prefix => "resources/environments/logs/publish/"
sincedb_path => "/tmp/s3.sincedb"
backup_to_dir => "/tmp/logstashed/"
tags => ["s3","elastic_beanstalk"]
type => "elastic_beanstalk"
}
}
filter {
if [type] == "elastic_beanstalk" {
grok {
match => [ "@source_path", "resources/environments/logs/publish/%{environment}/%{instance}/%{file}<unnecessary_number>.gz" ]
}
}
}
В этом случае я хочу, чтобы извлечь среды, экземпляр и имя файла из пути. В имени файла мне нужно игнорировать это случайное число. Я делаю это правильно? Что будет полным, правильным решением для этого?
Другой вопрос: как я могу указать поля для пользовательского формата журнала для определенного файла журнала сверху?
Это может быть что-то вроде: (мета-код)
filter {
if [type] == "elastic_beanstalk" {
if [file_name] BEGINS WITH "application_custom_log" {
grok {
match => [ "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ]
}
}
if [file_name] BEGINS WITH "some_other_custom_log" {
....
}
}
}
Как проверить для имени файла шаблона?
Вы действительно получили эту работу с @source_path? Я получаю много ошибок разбора grok, так как кажется, что @source_path не существует. – bvulaj
Нет, я не мог заставить его работать – Roman
Хотите узнать, как вы это решили? – Raoot