Обзор
После того, как приложение помещено в контейнер, необходимо подумать о том, как собирать журналы печати приложения, расположенного в контейнере Docker, для анализа работы и обслуживания. Типичные, такие какЖурналы приложений SpringBootсобирать. В этой статье объясняется, как использовать центр журналов ELK для сбора журналов, созданных контейнерными приложениями, а также для запроса и анализа журналов визуальным способом.Его архитектура показана на следующем рисунке:
Примечание:Эта статья была впервые опубликована на моем официальном аккаунтеCodeSheep,Могунажиматьилисканированиепоследующийбудь остороженЗаходи подписывайся ↓ ↓ ↓
Подготовка зеркала
- Зеркало ElasticSearch
- Логсташ зеркало
- Кибана зеркало
- Образ Nginx (как контейнерное приложение для создания логов)
Запустите службу Rsyslog системы Linux.
Измените файл конфигурации службы Rsyslog:
vim /etc/rsyslog.conf
Включите следующие три параметра:
$ModLoad imtcp
$InputTCPServerRun 514
*.* @@localhost:4560
Цель проста: позволить Rsyslog загрузить модуль imtcp и прослушивать порт 514, а затем перенаправить данные, собранные в Rsyslog, на локальный порт 4560!
Затем перезапустите службу Rsyslog:
systemctl restart rsyslog
Просмотр состояния запуска rsyslog:
netstat -tnl
Разверните службу ElasticSearch
docker run -d -p 9200:9200 \
-v ~/elasticsearch/data:/usr/share/elasticsearch/data \
--name elasticsearch elasticsearch
Разверните службу 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
Развернуть сервис Kibana
docker run -d -p 5601:5601 \
--link elasticsearch:elasticsearch \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
--name kibana kibana
Запустите контейнер 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 для сбора.
На данный момент построен бревенчатый центр, всего в настоящее время работают четыре контейнера:
Экспериментальная проверка
-
браузер открыт
localhost:90
Nginx для открытия интерфейса и обновления несколько раз, чтобы в фоновом режиме создавать журналы запросов GET. -
Откройте интерфейс визуализации Kibana:
localhost:5601
- Собирать журналы приложений Nginx
- Запрос журналов приложений
Введите в поле запросаprogram=nginx
Конкретные журналы могут быть запрошены
постскриптум
Дополнительные статьи автора о SpringBt находятся здесь:
- Мониторинг приложений Spring Boot на практике
- Приложения SpringBoot развертываются во внешнем контейнере Tomcat.
- Практика поисковой системы ElasticSearch в SpringBt
- Предварительное изучение совместного программирования Kotlin+SpringBoot
- Практика ведения журнала Spring Boot
- Элегантное кодирование SpringBoot: благословение Ломбока
Если вам интересно, вы также можете уделить время прочтению некоторых статей автора о контейнеризации и микросервисах:
- Используйте стек технологий K8S для создания личного частного облака Серийная статья
- Подробная конфигурация сервера Nginx из списка конфигураций
- Строительство центра мониторинга визуализации контейнеров Docker
- Использование ELK для создания контейнерного центра журналов приложений Docker
- Практика фреймворка RPC: Apache Thrift
- Практика фреймворка RPC: Google gRPC
- Настроен колл-центр службы отслеживания микроцепей
- Контейнеры Docker обмениваются данными между хостами
- Предварительное исследование кластера Docker Swarm
- Несколько рекомендаций по эффективному написанию Dockerfile