Использование ELK для создания контейнерного центра журналов приложений Docker

задняя часть Kibana Docker Elasticsearch
Использование ELK для создания контейнерного центра журналов приложений Docker

Обзор

После того, как приложение помещено в контейнер, необходимо подумать о том, как собирать журналы печати приложения, расположенного в контейнере Docker, для анализа работы и обслуживания. Типичные, такие какЖурналы приложений SpringBootсобирать. В этой статье объясняется, как использовать центр журналов ELK для сбора журналов, созданных контейнерными приложениями, а также для запроса и анализа журналов визуальным способом.Его архитектура показана на следующем рисунке:

架构图

Примечание:Эта статья была впервые опубликована на моем официальном аккаунтеCodeSheep,Могунажиматьилисканированиепоследующийбудь остороженЗаходи подписывайся ↓ ↓ ↓

CodeSheep · 程序羊


Подготовка зеркала

镜像准备

  • Зеркало ElasticSearch
  • Логсташ зеркало
  • Кибана зеркало
  • Образ Nginx (как контейнерное приложение для создания логов)

Запустите службу Rsyslog системы Linux.

Измените файл конфигурации службы Rsyslog:

vim /etc/rsyslog.conf

Включите следующие три параметра:

$ModLoad imtcp
$InputTCPServerRun 514

*.* @@localhost:4560

开启3个参数

Цель проста: позволить Rsyslog загрузить модуль imtcp и прослушивать порт 514, а затем перенаправить данные, собранные в Rsyslog, на локальный порт 4560!

Затем перезапустите службу Rsyslog:

systemctl restart rsyslog

Просмотр состояния запуска rsyslog:

netstat -tnl

netstat -tnl


Разверните службу ElasticSearch

docker run -d  -p 9200:9200 \
 -v ~/elasticsearch/data:/usr/share/elasticsearch/data \
 --name elasticsearch elasticsearch

ES启动成功效果


Разверните службу Logstash

Добавить к~/logstash/logstash.confФайл конфигурации выглядит следующим образом:

input {
  syslog {
    type => "rsyslog"
    port => 4560
  }
}

output {
  elasticsearch {
    hosts => [ "elasticsearch:9200" ]
  }
}

В конфигурации мы разрешаем Logstash извлекать данные журнала приложений из локальной службы Rsyslog, а затем пересылать их в базу данных ElasticSearch!

После завершения настройки вы можете запустить контейнер Logstash с помощью следующей команды:

docker run -d -p 4560:4560 \
-v ~/logstash/logstash.conf:/etc/logstash.conf \
--link elasticsearch:elasticsearch \
--name logstash logstash \
logstash -f /etc/logstash.conf

image.png


Развернуть сервис Kibana

docker run -d -p 5601:5601 \
--link elasticsearch:elasticsearch \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
--name kibana kibana

image.png


Запустите контейнер nginx для создания журналов

docker run -d -p 90:80 --log-driver syslog --log-opt \
syslog-address=tcp://localhost:514 \
--log-opt tag="nginx" --name nginx nginx

Очевидно, журналы приложений Nginx в контейнере Docker перенаправляются в локальную службу syslog, а затем служба syslog передает данные в Logstash для сбора.

На данный момент построен бревенчатый центр, всего в настоящее время работают четыре контейнера:

image.png

Экспериментальная проверка

  • браузер открытlocalhost:90Nginx для открытия интерфейса и обновления несколько раз, чтобы в фоновом режиме создавать журналы запросов GET.

  • Откройте интерфейс визуализации Kibana:localhost:5601

localhost:5601

  • Собирать журналы приложений Nginx

收集Nginx应用日志

  • Запрос журналов приложений

Введите в поле запросаprogram=nginxКонкретные журналы могут быть запрошены

查询应用日志


постскриптум

Дополнительные статьи автора о SpringBt находятся здесь:


Если вам интересно, вы также можете уделить время прочтению некоторых статей автора о контейнеризации и микросервисах:


CodeSheep · 程序羊