Как определить отдельные индексы для разных журналов в Filebeat / ELK?

Мне интересно, как создать отдельные индексы для разных журналов, извлеченных в logstash (которые позже были переданы в elasticsearch), чтобы в kibana я мог определить для них два индекса и обнаруживать их.

В моем случае у меня есть несколько клиентских серверов (каждый из которых установлен с filebeat) и централизованный сервер журналов (ELK). У каждого клиентского сервера есть разные типы журналов, например redis.log, python журналы, mongodb журналы, которые мне нравится сортировать по разным индексам и хранить в elasticsearch.

Каждый клиентский сервер также служит разным целям, например базы данных, UI, приложения. Поэтому мне также нравится давать им разные имена индексов (изменяя индекс вывода в filebeat.yml?).


person daiyue    schedule 08.08.2016    source источник


Ответы (4)


В своей конфигурации Filebeat вы можете использовать document_type < / a> для определения различных журналов, которые у вас есть. Затем внутри Logstash вы можете установить значение поля type для управления индексом назначения.

Однако, прежде чем разделять журналы на разные индексы, вам следует подумать о том, чтобы оставить их в одном индексе и использовать либо type, либо какой-нибудь настраиваемое поле для различения типов журналов. См. индекс и тип.

Пример конфигурации Filebeat prospector:

filebeat:
  prospectors:
    - paths:
        - /var/log/redis/*.log
      document_type: redis

    - paths:
        - /var/log/python/*.log
      document_type: python

    - paths:
        - /var/log/mongodb/*.log
      document_type: mongodb

Пример конфигурации Logstash:

input {
  beats {
    port => 5044
  }
}

output {
  # Customize elasticsearch output for Filebeat.
  if [@metadata][beat] == "filebeat" {
    elasticsearch {
      hosts => "localhost:9200"
      manage_template => false
      # Use the Filebeat document_type value for the Elasticsearch index name.
      index => "%{[@metadata][type]}-%{+YYYY.MM.dd}"
      document_type => "log"
    }
  }
}
person A J    schedule 08.08.2016
comment
Вы уверены, что document_type в filebeat создаст поле [@metadata][type] в событии logstash, а не поле [type]? Думаю, вместо этого следует читать index => "%{type}-%{+YYYY.MM.dd}". - person Val; 09.08.2016
comment
Значение document_type используется как для [@metadata][type], так и для [type], поэтому для индекса можно использовать любое поле. - person A J; 09.08.2016
comment
document_type не работает в es6 +, но хорошо работает с es4, es5 .. Полагаю, это моя проблема .. - person ; 22.01.2019

filebeat.yml

filebeat.prospectors:

- input_type: log
    paths:
    - /var/log/*.log
  fields: {log_type: toolsmessage}


- input_type: log
  paths:
    - /etc/httpd/logs/ssl_access_*
  fields: {log_type: toolsaccess}

в logstash.conf.

input {
  beats {
    port => "5043"
  }
}

filter {
  if ([fields][log_type] == "toolsmessage") {
    mutate {
      replace => {
        "[type]" => "toolsmessage"
      }
    }
  }
  else if ([fields][log_type] == "toolsaccess") {
    mutate {
      replace => {
        "[type]" => "toolsaccess"
      }
    }
  }
}

output {
  elasticsearch {
    hosts => ["10.111.119.211:9200"]
    index => "%{type}_index"
  }
 #stdout { codec => rubydebug }
}
person Community    schedule 04.01.2019
comment
обсудить.elastic.co/t/ тоже может работать, но я не тестировал это .. - person ; 04.01.2019

В logstash вы можете определить несколько плагинов ввода, фильтрации или вывода с помощью тегов:

input {
    file {
            type => "redis"
            path => "/home/redis/log"
    }
    file {
            type => "python"
            path => "/home/python/log"
    }
} 
filter {
    if [type] == "redis" {
            # processing .......
    }
    if [type] == "python" {
            # processing .......
    }
}
output {
    if [type] == "redis" {
            # output to elasticsearch redis
            index => "redis" 
    }
    if [type] == "python" {
            # output to elasticsearch python
            index => "python"
    }
}
person alpert    schedule 08.08.2016
comment
это действительно работает, но я предполагаю, что Discussion.elastic.co/t/ содержит более подробную информацию. - person ; 04.01.2019

Я прочитал все вышесказанное. Находит свой путь.

input {
    stdin {
    }
    jdbc {
      type => "jdbc"
      ....
    }
    http_poller {
        type=>"api"
      ....
    }

}
filter {
....
}
output {
    elasticsearch {
        hosts => ["jlkjkljljkljk"]
        index => "%{type}_index"
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }
}
person rex wan    schedule 09.07.2019