Типичное бизнес-приложение будет состоять из различных серверов, таких как WildFly, MySQL, Apache, ActiveMQ и других. У каждого из них есть формат журнала, с минимальной последовательностью между ними. Оператор журнала обычно состоит из некоторой метки времени (может широко варьироваться) и некоторой текстовой информации. Журналы могут быть многострочными. Если вы используете кластер серверов, то эти журналы децентрализованы, в разных каталогах.
Как вы объединяете эти журналы? Обеспечить последовательную визуализацию над ними? Сделать эти данные доступными для бизнес-пользователей?
Этот блог будет:
- Ввести стек ELK
- Объясните, как начать
- Запустите экземпляр WildFly для отправки сообщений журнала в стек ELK (Logstash)
- Просмотр сообщений с использованием стека ELK (Kibana)
Что такое стек ELK?
Стек ELK предоставляет мощную платформу для индексации, поиска и анализа ваших данных. Он использует Logstash для агрегации журналов, Elasticsearch для поиска и Kibana для визуализации и анализа данных. Короче, стек ELK:
- Сбор журналов и данных о событиях (Logstash)
- Сделайте его доступным для поиска быстрым и значимым способом (Elasticsearch)
- Используйте мощную аналитику для суммирования данных по многим измерениям (Кибана)
Logstash — это гибкая система сбора, обогащения и транспортировки данных с открытым исходным кодом.
Elasticsearch — это распределенный поисковый и аналитический движок с открытым исходным кодом, разработанный для горизонтальной масштабируемости, надежности и простого управления.
Kibana — это платформа для визуализации данных с открытым исходным кодом, которая позволяет вам взаимодействовать с вашими данными с помощью потрясающей, мощной графики.
Как работает ELK Stack?
Logstash может собирать журналы из разных источников (используя входные плагины ), обрабатывать данные в общем формате с помощью фильтров и передавать данные в различные источники (используя выходные плагины ). Несколько фильтров могут быть объединены в цепочку для анализа данных в общем формате. Вместе они строят конвейер обработки Logstash .
Входы и выходы поддерживают кодеки, которые позволяют кодировать или декодировать данные при их входе или выходе из конвейера без необходимости использования отдельного фильтра.
Logstash может затем хранить данные в Elasticsearch, а Kibana обеспечивает визуализацию этих данных. Вот пример конвейера, который может собирать журналы с разных серверов и запускать их через стек ELK.
Начать ELK Stack
Вы можете скачать отдельные компоненты стека ELK и начать этот путь. Существует множество советов о том, как настроить эти компоненты. Но мне нравится начинать с ПОЦЕЛУЯ, а Docker облегчает ПОЦЕЛУЙ!
Весь исходный код этого блога находится по адресу github.com/arun-gupta/elk .
- Клонировать репо:
git clone https://github.com/arun-gupta/elk.git cd elk
- Запустите стек ELK:
docker-compose up -d Creating elk_elasticsearch_1... Creating elk_logstash_1... Creating elk_kibana_1...
Это будет использовать предварительно созданные образы Elasticsearch, Logstack и Kibana. Он основан на работе, проделанной в github.com/nathanleclaire/elk .
docker ps
будет отображать вывод как:elk> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdc61acc1623 kibana:4.1.1 "/docker-entrypoint. 59 seconds ago Up 58 seconds 0.0.0.0:80->5601/tcp elk_kibana_1 e184f2efcf95 arungupta/logstash:1.5.3 "/opt/logstash/bin/l About a minute ago Up 58 seconds 0.0.0.0:5000->5000/tcp, 0.0.0.0:5000->5000/udp elk_logstash_1 0622b55e8645 arungupta/elasticsearch:1.7.1 "/opt/elasticsearch/ About a minute ago Up 59 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elk_elasticsearch_1
Показывает все работающие контейнеры.
WildFly и ELK
Джеймс ( @the_jamezp ) написал в блоге о централизованном ведении журнала для WildFly с помощью стека ELK . В блоге объясняется, как настроить WildFly для отправки сообщений журнала в Logstash. Он использует высокомодульную природу WildFly для установки библиотеки jboss-logmanager-ext и установки ее в качестве модуля. Сконфигурированный logmanager включает @timestamp
поле для сообщений журнала, отправляемых в logstash. Эти сообщения журнала затем отправляются в Elasticsearch.
Вместо того, чтобы следовать этим шагам, позвольте Docker KISS и использовать предварительно настроенный образ для начала работы.
Запустите изображение как:
docker run -p 8080:8080 -it -e HOST=<DOCKER_HOST_IP> arungupta/wildfly-logstash
Обязательно <DOCKER_HOST_IP>
укажите IP-адрес хоста, на котором работает хост Docker. Это можно легко найти используя docker-machine ip <MACHINE_NAME>
.
Просмотр журналов с использованием стека ELK
Kibana работает на встроенном nginx и настроен на работу с портом 80 in docker-compose.yml
. Позволяет просматривать журналы, используя это.
- Доступ
http://<DOCKER_HOST_IP>
в вашей машине , и он должен показать страницу по умолчанию , как: поле было создано LogManager сконфигурированного в WildFly.@timestamp
- Нажмите,
Create
чтобы создать шаблон индекса и выберитеDiscover
вкладку, чтобы просмотреть журналы как:
Попробуйте подключить другие источники и наслаждайтесь мощью распределенной консолидации ELK!
Еще несколько ссылок …
Распределенное ведение журналов и визуализация являются критически важным компонентом в мире микросервисов, где несколько служб приходят и уходят в определенный момент времени. В будущем блоге будет показано, как использовать стек ELK с приложением на основе архитектуры микросервисов.