Как настроить вывод определенных логов и индексов только для докер-контейнеров в ELK с использованием docker-compose?

Как можно вывести определенные логи из докер-контейнера, используя контейнеры docker-compose и сервер Elasticsearch, Logstash и Kibana (ELK)?
  • 9 ноября 2023 г. 17:09
Ответы на вопрос 3
Для настройки вывода определенных логов из докер-контейнеров в ELK с использованием docker-compose, вам понадобится выполнить несколько шагов:

1. Установка и настройка Elasticsearch, Logstash и Kibana, а также создание docker-compose.yml файла для их запуска. Пример файла может быть таким:

```
version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
    volumes:
      - elasticsearch-data:/usr/share/elasticsearch/data

  logstash:
    image: docker.elastic.co/logstash/logstash:7.14.1
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:7.14.1
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

volumes:
  elasticsearch-data:
```

2. Создание файла logstash.conf, в котором будет определена конфигурация Logstash для фильтрации и перенаправления определенных логов из докер-контейнеров в Elasticsearch. Пример конфигурации может быть таким:

```
input {
  file {
    path => "/var/lib/docker/containers/*/*.log"
    type => "docker"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    codec => "json"
  }
}

filter {
  if [type] == "docker" {
    grok {
      match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{DATA:log_level} %{GREEDYDATA:log_message}" }
      remove_field => "message"
    }

    if [log_level] == "ERROR" {
      mutate {
        add_tag => ["error_logs"]
      }
    }
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "docker-%{+YYYY.MM.dd}"
  }
}
```

3. Запуск docker-compose для развертывания Elasticsearch, Logstash и Kibana:

```
docker-compose up -d
```

4. Теперь, когда ваши контейнеры запущены, вы можете посмотреть их логи в Kibana, указав соответствующий индекс и фильтр. Например, для поиска только логов с уровнем ERROR, вам нужно будет применить фильтр по тегу "error_logs".

Дополнительные настройки, такие как определение и использование дополнительных индексов и фильтров, могут быть добавлены в файлы docker-compose.yml и logstash.conf в соответствии с вашими требованиями.

Обратите внимание, что приведенные примеры являются базовыми и не учитывают другие аспекты, такие как масштабирование, безопасность и резервное копирование.
paths: '/var/lib/docker/containers/${data.docker.container.id}/*.log' 
 Чтобы отфильтровать файлы, напишите ограничивающее выражение.
Похожие вопросы