Система журналов сборки Elasticsearch+Fluentd+Kafka

Большое количество данных

предисловие

Из-за большого объема памяти logstash и относительно низкой гибкости ELK постепенно заменяется EFK. EFK, упомянутый в этой статье, — это Elasticsearch+Fluentd+Kfka.На самом деле K должен быть Kibana для отображения журналов.Этот не сделано Демонстрация, в этой статье описывается только процесс сбора данных.

помещение

  1. docker
  2. docker-compose
  3. служба апач кафка

Архитектура

Процесс сбора данных

Генерация данных использует cadvisor для сбора данных мониторинга контейнеров и передачи данных в Kafka.

Канал передачи данных следующий: Cadvisor->Kafka->Fluentd->elasticsearch

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/2/18/17055bb97e4a16de~tplv-t2oaga2asx-image.image

Каждый сервис можно масштабировать горизонтально, добавляя сервисы в систему логирования.

конфигурационный файл

docker-compose.yml

version: "3.7"

services:
  
  elasticsearch:
   image: elasticsearch:7.5.1
   environment:
    - discovery.type=single-node  #使用单机模式启动
   ports:
    - 9200:9200

  cadvisor:
    image: google/cadvisor
    command: -storage_driver=kafka -storage_driver_kafka_broker_list=192.168.1.60:9092(kafka服务IP:PORT) -storage_driver_kafka_topic=kafeidou
    depends_on:
      - elasticsearch

  fluentd:
   image: lypgcs/fluentd-es-kafka:v1.3.2
   volumes:
    - ./:/etc/fluent
    - /var/log/fluentd:/var/log/fluentd

в:

  1. Данные, сгенерированные cadvisor, будут переданы в службу kafka этой машины по адресу 192.168.1.60, а тема — kafeidou.
  2. Elasticsearch указан как одиночный режим запуска (discovery.type = переменная среды с одним узлом), автономный режим запускается для облегчения общего эффекта эксперимента.

fluent.conf

#<source>
#  type http
#  port 8888
#</source>

<source>
  @type kafka
  brokers 192.168.1.60:9092
  format json
  <topic>
    topic     kafeidou
  </topic>
</source>

<match **>
  @type copy

#  <store>
#   @type stdout
#  </store>

  <store>
  @type elasticsearch
  host 192.168.1.60
  port 9200
  logstash_format true
  #target_index_key machine_name
  logstash_prefix kafeidou
  logstash_dateformat %Y.%m.%d   
  
  flush_interval 10s
  </store>
</match>

в:

  1. Плагин типа copy предназначен для копирования данных, полученных fluentd, для облегчения отладки, для печати данных на консоли или сохранения их в файле.Этот файл конфигурации закрыт по умолчанию, и только необходимый плагин вывода es -ins предусмотрены.
    При необходимости вы можете открыть блок stdout @type для отладки получения данных.
  2. Источник ввода также настроен с конфигурацией ввода http, которая отключена по умолчанию и также используется для отладки и ввода данных в fluentd.
    Вы можете выполнить следующую команду в Linux:
curl -i -X POST -d 'json={"action":"write","user":"kafeidou"}' http://localhost:8888/mytag
  1. targetindexКлючевой параметр, этот параметр должен использовать значение, соответствующее полю в данных, в качестве индекса es.Например, этот файл конфигурации использует значение в поле имя_компьютера в качестве индекса es.

Начать развертывание

Выполните в каталоге, содержащем файл docker-compose.yml и файл fluent.conf:
docker-compose up -d

Убедившись, что все контейнеры работают правильно, вы можете проверить, генерирует ли elasticsearch ожидаемые данные в качестве проверки.Здесь мы используем, чтобы проверить, генерируется ли индекс es, и количество данных для проверки:

-bash: -: 未找到命令
[root@master kafka]# curl http://192.168.1.60:9200/_cat/indices?v
health status index                                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   55a4a25feff6                         Fz_5v3suRSasX_Olsp-4tA   1   1       1            0      4kb            4kb

Вы также можете напрямую ввести http://192.168.1.60:9200/_cat/indices?v в браузере, чтобы просмотреть результаты, что будет более удобно.

Как видите, здесь я использовал поле machine_name в качестве значения индекса. Результатом запроса является создание данных индекса с именем ``55a4a25feff6``, и генерируется 1 часть данных (``docs.count``)

На данный момент создан процесс сбора логов, такой как kafka->fluent->es.

Конечно, архитектура не фиксирована.Вы также можете использовать fluentd->kafka->es таким образом, чтобы собранные здесь данные не демонстрировались, это не что иное, как возиться с конфигурационным файлом fluentd.conf, соответствующей конфигурацией es и делать что-то kafka обмен позициями, соответствующими ему.

Поощряйте больше официальных документов, вы можете найти плагин FluentD-ES и плагины FLUENTD-KAFKA на GitHub или официальном сайте FluentD.

Возникло вчетыре кофейных зерна, пожалуйста, укажите источник для перепечатки.

Подпишитесь на официальный аккаунт -> [Четыре кофейных зерна], чтобы получить последний контент.

四颗咖啡豆