Статьи

Начало работы со стеком ELK на WildFly

Типичное бизнес-приложение будет состоять из различных серверов, таких как WildFly, MySQL, Apache, ActiveMQ и других. У каждого из них есть формат журнала, с минимальной последовательностью между ними. Оператор журнала обычно состоит из некоторой метки времени (может широко варьироваться) и некоторой текстовой информации. Журналы могут быть многострочными. Если вы используете кластер серверов, то эти журналы децентрализованы, в разных каталогах.

Как вы объединяете эти журналы? Обеспечить последовательную визуализацию над ними? Сделать эти данные доступными для бизнес-пользователей?

Этот блог будет:

  • Ввести стек ELK
  • Объясните, как начать
  • Запустите экземпляр WildFly для отправки сообщений журнала в стек ELK (Logstash)
  • Просмотр сообщений с использованием стека ELK (Kibana)

Что такое стек ELK?

Стек ELK предоставляет мощную платформу для индексации, поиска и анализа ваших данных. Он использует Logstash для агрегации журналов, Elasticsearch для поиска и Kibana для визуализации и анализа данных. Короче, стек ELK:

  • Сбор журналов и данных о событиях (Logstash)
  • Сделайте его доступным для поиска быстрым и значимым способом (Elasticsearch)
  • Используйте мощную аналитику для суммирования данных по многим измерениям (Кибана)

logstash-логотип

Logstash — это гибкая система сбора, обогащения и транспортировки данных с открытым исходным кодом.

Logstash

elasticsearch-логотип

Elasticsearch — это распределенный поисковый и аналитический движок с открытым исходным кодом, разработанный для горизонтальной масштабируемости, надежности и простого управления.

Elasticsearch

kibana-логотип

Kibana — это платформа для визуализации данных с открытым исходным кодом, которая позволяет вам взаимодействовать с вашими данными с помощью потрясающей, мощной графики.

Kibana

Как работает ELK Stack?

Logstash может собирать журналы из разных источников (используя входные плагины ), обрабатывать данные в общем формате с помощью фильтров и передавать данные в различные источники (используя выходные плагины ). Несколько фильтров могут быть объединены в цепочку для анализа данных в общем формате. Вместе они строят конвейер обработки Logstash .

Logstash, обрабатывающий трубопровод

Входы и выходы поддерживают кодеки, которые позволяют кодировать или декодировать данные при их входе или выходе из конвейера без необходимости использования отдельного фильтра.

Logstash может затем хранить данные в Elasticsearch, а Kibana обеспечивает визуализацию этих данных. Вот пример конвейера, который может собирать журналы с разных серверов и запускать их через стек ELK.

ELK Stack

Начать ELK Stack

Вы можете скачать отдельные компоненты стека ELK и начать этот путь. Существует множество советов  о том, как настроить эти компоненты. Но мне нравится начинать с ПОЦЕЛУЯ, а Docker облегчает ПОЦЕЛУЙ!

Весь исходный код этого блога находится по адресу  github.com/arun-gupta/elk .

  1. Клонировать репо:
    git clone https://github.com/arun-gupta/elk.git
    cd elk
  2. Запустите стек 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. Позволяет просматривать журналы, используя это.

  1. Доступ http://<DOCKER_HOST_IP>в вашей машине , и он должен показать страницу по умолчанию , как: поле было создано LogManager сконфигурированного в WildFly.ELK Stack WildFly Pattern@timestamp
  2. Нажмите, Createчтобы создать шаблон индекса и выберите Discoverвкладку, чтобы просмотреть журналы как:ELK Stack WildFly Выход

Попробуйте подключить другие источники и наслаждайтесь мощью распределенной консолидации ELK!

Еще несколько ссылок …

Распределенное ведение журналов и визуализация являются критически важным компонентом в мире микросервисов, где несколько служб приходят и уходят в определенный момент времени. В будущем блоге будет показано, как использовать стек ELK с приложением на основе архитектуры микросервисов.