Стек ELK (Elasticsearch, Logstash и Kibana) - что это такое? Применение, установка и настройка

    логотип ELK
    Front matter, or preliminaries, is the first section of a book and is usually the smallest section in terms of the number of pages. Each page is counted, but no folio or page number is expressed or printed, on either display pages or blank pages.

    Всего понемногу об ELK-стек

    Название стека представляет собой аббревиатуру первых букв трех открытых проектов, разрабатываемых и поддерживаемых компанией Elastic:

    Elasticsearch
    Logstash
    Kibana

    Этот набор компонентов обеспечивает удобное централизованное логирование (ведение журналов) с разных серверов. ELK stack позволяет надежно и безопасно получать данные из любого источника во всех форматах и работать с этими данными: осуществлять поиск по ним, анализировать и визуализировать их в режиме real-time (NRT). В профессиональной среде ELK-стек также называют «эластичный стек», обыгрывая отсылку к названию компании-разработчика

    Что такое Elasticsearch

    Elasticsearch (ES) — сердце стека ELK. Это распределенная RESTful-система на основе JSON, которая сочетает в себе функции NoSQL-базы данных (сохраняет все собранные данные), поисковой системы и аналитической системы. Изначально это была утилита полнотекстового поиска поверх поисковой системы Apache Lucene с некоторыми расширенными возможностями (например, легкой репликацией и масштабированием). Эти дополнительные возможности, а также простота использования и высокая работоспособность даже в изначальной конфигурации сделали Elasticsearch крайне удобной для высоконагруженных проектов с большими данными и сложными функциями поиска.

    Со временем ES стали использовать не только для поиска, например, по товарам в интернет-магазинах, но и основывать на ней свои разработки по централизованному хранению логов и аналитике — настолько решение стало удобным. К тому же вокруг него сформировалось компетентное и отзывчивое сообщество, которое всегда подскажет, как настроить ваш ES-кластер под любые задачи.

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

    Какие бизнес-задачи может решать Elasticsearch:

    • агрегировать большие объемы любых данных с разных площадок (например, товары со множества интернет-магазинов), осуществлять фильтрацию и поиск по различным свойствам продукции;
    • шардировать данные и распределять их на множество хостов кластера с экономией места и автоматической балансировкой
    • автоматически обрабатывать огромные объемы опросников и анкет;
    • быстро вычислять нужные показатели в данных, собранных из различных систем, для комплексной аналитики бизнес-процессов;
    • анализировать большие объемы неструктурированной статистической информации;
    • хранить данные без схемы или создать схему для данных;
    • управлять записью данных через многодокументные API;

    Что такое Logstash

    Logstash в стеке ELK представляет собой конвейер по парсингу данных (логов событий) одновременно из множества источников ввода и их обработки для дальнейшего использования в Elasticsearch. С помощью этой утилиты в сообщениях системных событий можно выделять поля и их значения, фильтровать и редактировать данные. Настраивается она через конфигурационные файлы.
    В Logstash все события с использованием внутренних очередей последовательно проходят через три фазы:
    1. Input — передача журналов для их обработки в машинно-понятный вид. Здесь можно настроить: из какой папки читать новые или постоянно дозаписываемые файлы; на какой порт и по какому протоколу будут приходить логи.

    2. Filter — это поле для управления сообщением, приходящим на Logstash, с набором условий для выполнения определенного действия или события. Здесь можно настроить парсер логов: редактирование значений, добавление и удаление новых параметров, разбор полей.

    3. Output — здесь можно настроить, куда отправлять разобранный лог. Если в Elasticsearch, то нужен JSON-запрос, в котором отправляются поля со значениями. Если это дебаг, то можно выводить в stdout или просто записывать в файл.
    Logstash позволяет централизовать обработку большого объема структурированных и неструктурированных данных и событий. Для подключения к различным типам источников ввода и платформ утилита поддерживает более 200 подключаемых плагинов, благодаря которым упрощается доступ к разным данным.
    Схема обработки Logstash большого объема данных и событий
    Как проходят данные в Logstash

    Что такое Kibana

    Компонент Kibana (Кибана) — это web-панель для работы с логами, расширяемый пользовательский интерфейс. Он позволяет визуализировать проиндексированные данные в системе Elasticsearch в виде графиков и диаграмм. Используя гибкие настройки мониторинга, с помощью Кибана можно перемещаться по Elastic Stack, отслеживая пути, по которым запросы проходят через ваше приложение; выполнять сложную аналитику и красочно визуализировать ее; администрировать базу данных. Здесь можно управлять несколькими панелями мониторинга и сохранять их с настройками.
    Методы поиска по данным в Kibana в режиме реального времени:
    • Свободный текстовый поиск для поиска определенной строки
    • Поиск на уровне поля для поиска строки в определенном поле
    • Логические утверждения для объединения поисков в логический оператор
    • Поиск близости для поиска терминов в пределах определенной близости символов

    Почему стек ELK настолько популярен?

    Мы живем в мире, управляемом данными, где БД должны последовательно обрабатывать все более огромные объемы информации. Как правило, аналитические процессы замедляются по мере того, как объем данных, обрабатываемых системой, увеличивается. Главное преимущество технологического стека ELK заключается в том, что он помогает нам улучшить эти аналитические процессы.
    Преимущества:
    • стек может безопасно и быстро извлекать, анализировать и визуализировать данные в режиме реального времени из любого источника и в любом формате;

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

    • он прост в использовании и настройке, удобен для пользователя;

    • это рентабельный набор программ с открытым исходным кодом;

    • развертывается в любом масштабе независимо от технической инфраструктуры компании;

    • это стабильное, отказоустойчивое решение — при сбое кластерных узлов данные не теряются, а перераспределяются;

    • его можно разнообразно настраивать;

    • официальные клиенты от разработчика на нескольких языках программирования с поддержкой;
    • годы практических внедрений ELK (Elasticsearch, Logstash, Kibana) и очень активное сообщество создали непревзойденное сочетание зрелости и перспективного роста.
    Недостатки:
    • в Elasticsearch нет встроенной системы авторизации и управления правами доступа, что может привести к проблемам с ИБ — нужно обязательно защищать паролем базу данных, к которой открывается доступ, поскольку движок поисковой системы по умолчанию связывается с портом 9200 через любые интерфейсы;

    • некоторые пользователи отмечают сложность внутреннего языка запросов QueryDSL;

    • масштабирование может оказаться затратным;

    • из-за использования JVM стек потребляет много ресурсов CPU и RAM, что при очень высоких нагрузках может привести к снижению производительности;

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

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

    Установка и настройка Elasticsearch, Logstash и Kibana

    Стек ELK можно установить различными способами и в самых разных операционных системах и средах: локально, в облаке с помощью Docker и систем управления конфигурацией, с помощью пакетов tarball или .zip или из репозиториев. Многие этапы установки аналогичны от среды к среде, и, поскольку мы не можем охватить все различные сценарии, мы приведем пример установки всех компонентов стека в Linux. В соответствии с требованиями инфраструктуры в стеке могут участвовать и различные другие приложения.

    Предварительные требования

    Чтобы ВМ машина не тормозила, а работать было комфортно, рекомендуем задействовать следующие системные ресурсы для установки одиночного инстанса с полным набором компонентов ELK-стека:
    Системные требования для ELK-стека
    Системные требования для ELK-стека
    На сервере должны быть установлены Java 8, которая требуется для Elasticsearch и Logstash (Java 9 не поддерживается) и Nginx, который будет настроен в качестве обратного прокси для Kibana. Важно обеспечить защиту сервера сертификатом TLS/SSL. Для отправки логов надо предварительно установить агент Filebeat, который стал почти неотъемлемой частью ELK, превратив его в четырехсторонний стек.

    Установка Filebeat для отправки логов в Logstash

    Устанавливать Filebeat можно и из общего репозитория, и отдельно пакетами. Поставьте первого агента Filebeat на сервер с Nginx для отправки логов веб-сервера на сервер с ELK.
    Centos
    
    # curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-x86_64.rpm
    # rpm -vi filebeat-7.15.1-x86_64.rpm
    
    Ubuntu / Debian
    
    # yum install filebeat
    # apt install filebeat
    
    После установки можно использовать шаблон с минимальными настройками в конфигурационном файле /etc/filebeat/filebeat.yml. В этом же каталоге лежит файл filebeat.full.yml, в котором прописаны варианты установок и который можно взять за основу. Файл filebeat.template.json — это шаблон для вывода по умолчанию, который можно изменить или переопределить.

    После настроек запустите filebeat и добавьте в автозагрузку:
    
    # systemctl start filebeat
    # systemctl enable filebeat
    
    По умолчанию Filebeat пишет логи в дефолтный системный лог.

    Установка Elasticsearch

    Происходит довольно просто благодаря готовым пакетам, которые существуют под все популярные операционные системы.
    Centos
    Скопируйте публичный ключ репозитория:
    
    # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    Подключите репозиторий Elasticsearch:
    
    # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    
    "number": "7.15.1",
    "puild_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" :"83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.0316081852",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
    },
    "tagline" : "You Know, for Search"
    
    }
    
    Установите Elasticsearch:
    
    # yum install --enablerepo=elasticsearch elasticsearch
    
    
    
    В в завершении установки добавьте Elasticsearch в автозагрузку и запустите его с дефолтными настройками:
    
    # systemctl daemon-reload
    # systemctl enable elasticsearch.service
    # systemctl start elasticsearch.service
    
    Проверьте, запустилась ли служба:
    
    # systemctl status elasticsearch.service
    
    Проверьте, что Elasticsearch работает нормально, выполнив к нему простой запрос о его статусе:
    
    # curl 127.0.0.1:9200
    {
    "name": "centos8",
    "cluster_name" : "elasticsearch",
    "cluster_uuid" : "XSsvp-nvTxi68TaEFN_OUg",
    "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" :"83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185Z",
    "build_snapshot' : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
    
    },
    
    "tagline" : "You Know, for Search"
    
    }
    
    Сервис запущен и отвечает на запросы.
    Ubuntu / Debian
    Скопируйте публичный ключ репозитория:
    
    # wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
    Если у вас нет пакета apt-transport-https, то установите:
    
    # apt install apt-transport-https
    
    Добавьте репозиторий Elasticsearch в систему:
    
    # echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
    Установите Elasticsearch на Debian или Ubuntu:
    
    # apt update && apt install elasticsearch
    
    После установки добавьте elasticsearch в автозагрузку и запустите:
    
    # systemctl daemon-reload
    # systemctl enable elasticsearch.service
    # systemctl start elasticsearch.service
    
    Проверьте, запустился ли он:
    
    # systemctl restart elasticsearch.service
    
    Проверьте, что Elasticsearch действительно правильно работает. Выполните к нему запрос о статусе:
    
    # curl 127.0.0.1:9200
    {
    "name": "centos8",
    "cluster_name" : "elasticsearch",
    "cluster_uuid" : "XSsvp-nvTxi68TaEFN_OUg",
    "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" :"83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185z",
    "build_snapshot' : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
    
    },
    
    "tagline" : "You Know, for Search"
    
    }
    
    Если все в порядке, то переходите к настройке Elasticsearch.
    Настройка Elasticsearch
    Настройки находятся в файле /etc/elasticsearch/elasticsearch.yml. В самом начале вам понадобятся следующие параметры:
    
    path.data: /var/lib/elasticsearch # директория для хранения данных
    network.host: 127.0.0.1 # слушаем только локальный интерфейс
    
    По умолчанию Elasticsearch слушает localhost и это хорошо, потому что данные в него . будут попадать из установленного локально Logstash. Заранее подумайте о том, где вы будете хранить значительные объемы логов. Остальные настройки оставим дефолтными. Перезапустите службу по окончании изменения настроек:
    
    # systemctl status kibana.service
    
    Посмотрите, что получилось:
    
    # netstat -tulnp | grep 9200
    tcp6   0    0 127.0.0.1:9200     :::*        LISTEN     19788/java
    
    Elasticsearch на локальном интерфейсе. Видно, что он слушает ipv6, но не видно, что слушает ipv4. Однако не волнуйтесь, его он тоже слушает. Можно переходить к установке Kibana. Если же вы хотите, чтобы Elasticsearch слушал все сетевые интерфейсы, то настройте вот этот параметр:
    
    network.host: 0.0.0.0
    
    Обратите внимание, что сразу запускать службу не стоит — вы получите ошибку. Добавьте еще один параметр, чтобы ее избежать, укажите, что хосты кластера следует искать лишь локально:
    
    discovery.seed_hosts: ["127.0.0.1", "[:1]"]
    
    Автоматическая очистка индексов в Elasticsearch
    Еще недавно для автоматической очистки индексов в Elasticsearch нужно было прибегать к сторонним решениям, например, к Curator. Сегодня в стеке есть встроенный инструмент для очистки данных Index Lifecycle Policies, который можно настроить по своим предпочтениям.
    Установка Kibana
    Чтобы визуализировать данные, полученные из Elasticsearch, установите веб-панель Kibana. Готовые пакеты и репозиторий существуют под все популярные платформы.
    Centos
    Импортируйте ключ репозитория:
    
    # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    Добавьте конфигурационный файл репозитория:
    
    # mcedit /etc/yum.repos.d/kibana.repo
    
    
     [kibana-7.x]
    name=Kibana repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gogcheck=1
    gpekey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
    
    Запустите установку Kibana:
    
    # yum install kibana
    
    Добавьте Кибана в автозагрузку и сразу запустите:
    
    # systemctl daemon-reload
    # systemctl enable kibana.service
    # systemctl start kibana.service
    
    Проверьте состояние запущенного сервиса:
    
    # systemctl restart kibana.service
    
    Kibana по умолчанию слушает 5601 порт. Она медленно стартует, поэтому не спешите его проверять непосредственно после запуска. Лучше подождать примерно минуту и затем проверить:
    
    # netstat -tulnp | grep 5601
    tcp     O   0 127.0.0.1:5601      0.0.0.0:*      LISTEN      20746/node
    
    Kibana по умолчанию слушает 5601 порт. Она медленно стартует, поэтому не спешите его проверять непосредственно после запуска. Лучше подождать примерно минуту и затем проверить:
    Ubuntu/Debian
    Здесь установка такая же, как и на Centos — подключите репозиторий и ставьте из deb-пакета. Добавьте публичный ключ:
    
    # wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
    
    Добавьте репозиторий Kibana:
    
    # echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources list.d/elastic-7.x.list
    
    Запустите установку Kibana:
    
    # apt update && apt install kibana
    
    Добавьте Кибана в автозагрузку и запустите:
    
    # systemctl daemon-reload
    # systemctl enable kibana.service
    # systemctl start kibana.service
    
    Проверьте состояние:
    
    # systemctl status kibana.service
    
    Kibana по умолчанию слушает 5601 порт. Она медленно стартует, поэтому не спешите его проверять непосредственно после запуска. Лучше подождать примерно минуту и затем проверить:
    
    # netstat -tulnp | grep 5601
    tcp   0   0 127.0.0.1:5601    0.0.0.0:*    LISTEN     20746/node
    
    Настройка Kibana

    Настройки Kibana находятся в файле: /etc/kibana/kibana.yml. По умолчанию Kibana не позволяет подключаться удаленно и слушает только localhost. Это нормально, если на этом же сервере у вас будет установлен Nginx в качестве reverse proxy, который будет принимать подключения, а затем проксировать их в Kibana. Это правильный подход в production в том случае, если стеком будет пользоваться распределенная команда. При тестовой установке можно обойтись без Nginx. Для этого разрешите Kibana слушать внешний интерфейс и принимать подключения. Измените параметр server.host, указав ip сервера, например так:
    
    server.host: "10.20.1.23"
    
    Если надо, чтобы Kibana слушала все интерфейсы, укажите в качестве ip-адреса сервера 0.0.0.0, а после перезапустите:
    
    # systemctl restart kibana.service
    
    Зайдите в веб интерфейс по адресу http://10.20.1.23:5601.

    Если необходимо, то продолжите настройку и тестирование. По окончании запустите nginx и настройте проксирование.

    Если в веб-интерфейсе появляется такое предупреждение:
    
    server.publicBaseUrl is missing and should be configured when running in a production environment. Some features may not behave correctly.
    
    Добавьте в конфигурационный файл доменное имя (если его используете) или этот параметр:
    
    server.publicBaseUr|: "http://10.20.1.23:5601/"
    
    Настройка безопасности и авторизация в Kibana

    При настройках элементов стека вы можете заметить всплывающее сообщение такого вида:
    Это предупреждение о том, что не настроена аутентификация и доступ открыт для всех. Если доступ к данным у вас изолирован (например, на уровне firewall), то не обращайте внимания на эти сообщения. Если нет — настройте доступ к Elasticsearch и к данным в Kibana через авторизацию по пользователю и паролю.

    Добавьте в файл elasticsearch.yml параметр:
    
    xpack.security.enabled: true
    
    Перезапустите службу Elasticsearch:
    
    # systemctl restart elasticsearch
    
    Если вы не настраивали работу кластера по ssl-протоколу, то вероятно получите ошибку. Чтобы настройки xpack.security заработали, добавьте:
    
    xpack.security.transport.ssl.enabled: true
    
    Снова запустите Elasticsearch еще раз. Сейчас он запустится, но без доступа. Kibana выдаст ошибку:
    
    {"statusCode":503,"error":"Service Unavailable","message":"License is not available."}
    
    Вам надо подготовить учетные данные, которые вы будете использовать для доступа к Elasticsearch. Для этого запустите утилиту elasticsearch-setup-passwords, которая по умолчанию должна быть в /usr/share/elasticsearch/bin.
    
    # /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
    
    Сохраните показанные пароли, они понадобятся для организации доступа к кластеру остальным компонентам стека. Далее сгенерируйте пароль и настройте парольный доступ к кластеру для Kibana. Для этого добавьте в kibana.yml:
    
    xpack.security.enabled: true
    elasticsearch.username: "kibana_system"
    elasticsearch.password: "JArsJZj10YC8LIPIQr4u"
    
    Теперь перезапустите службу и зайдите в веб-интерфейс. Должно появиться окно авторизации. Используйте свою учетную запись Elastic. В веб-интерфейсе вы сможете управлять пользователями и ролями в разделе Stack Management -> Users.

    Теперь настройте Logstash для авторизации, ведь пока что он не может отправлять данные и выдает ошибки в логе. Откройте конфигурационный файл Logstash, который отвечает за output и добавьте в него учетные данные для доступа в кластер. Это будет выглядеть приблизительно так:
    
    output {
         elasticsearch {
           user => "logstash_nginx_rw"
           password => "gdhsgtadsfsdfgsfdget45t"
           hosts => "localhost:9200"
           index => "nginx-%{+YYYY.MM.dd}"
         }
    }
    
    
    Теперь данные будут поступать из Logstash в Elasticsearch с авторизацией по пользователю и паролю.
    Проксирование подключений к Kibana через Nginx

    Ниже представлен примерный конфигурационный файл Nginx для проксирования запросов к Kibana с ограничением доступа по паролю:
    
    server {
    listen 443:
    
    server_name kibana.site.ru;
    ss|_certificate /etc/letsencrypt/live/kibana.site.ru/fullchain.pem;
    ss|_certificate_key /etc/letsencrypt/live/kibana.site.ru/privkey.pem;
    
    location / {
    
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.kibana;
    proxy_pass http://localhost:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
     }
    }
    
    Создайте файл для пользователей и паролей:
    
    # htpasswd -c /etc/nginx/htpasswd.kibana kibanauser
    
    Установите утилиту htpasswd, если ее нет в системе:
    
    # yum install httpd-tools
    
    Затем появится запрос на ввод пароля. Мы создали файл kibanauser с информацией о пользователе и пароле для ограничения доступа к веб-панели Kibana.
    Установка Logstash

    Так же, как Elasticsearch и Kibana, устанавите Logstash из того же репозитория. Добавьте в автозагрузку.
    Centos
    
    # yum install logstash
    
    Ubuntu/Debian
    
    # apt install logstash
    
    Добавьте в автозагрузку, но пока не запускайте:
    
    # systemctl enable logstash.service
    
    Настройка Logstash

    Все конфигурационные файлы Logstash находятся в /etc/logstash, настройки, которые определяют параметры запуска, находятся в /etc/logstash/startup.options, jvm.options, параметры работы самого сервиса — в logstash.yml, а конвейеры описываются в файлах в /etc/logstash/conf.d (здесь пока ничего нет). Вы можете по-разному расположить фильтры, как вам удобно: описать подключения к сервисам в одном файле или разделить файлы по назначению — input, output и filter.
    Подключитесь к Filebeat:
    
    $ sudo nano /etc/logstash/conf.d/01-input.cont
    input {
     beats {
      port => 5044
      }
    }
    
    Здесь достаточно указать, что вы принимаете информацию на 5044 порт. Чтобы передавать логи по защищенным соединениям с использованием ssl-сертификатов, добавьте параметры ssl. Logstash может сам брать данные с локального узла:
    
    input {
    file {
    path => "/var/log/nginx/*access*"
    }
    
    }
    
    Beats и file здесь — это названия плагинов. Полный их список для inputs, outputs и filter, а также параметры доступны на официальном сайте. После установки Logstash некоторые плагины будут доступны, а получить их список можно следующей командой:
    
    $ /usr/share/logstash/bin/logstash-plugin list
    $ /usr/share/logstash/bin/logstash-plugin list --group output
    
    Сверьте список с сайтом, обновите имеющиеся и поставьте нужный вам плагин:
    
    $ /usr/share/logstash/bin/logstash-plugin update
    $ /usr/share/logstash/bin/logstash-plugin install logstash-output-geoip --no-verify
    
    Если систем много, то для создания пакета и распространения на другие системы можно использовать logstash-plugin prepare-offline-pack.

    Далее опишите передачу данных в Elasticsearch:
    
    $ sudo nano /etc/logstash/conf.d/O2-output.conf
    
    output {
    elasticsearch {
    hosts => ["localhost:9200"]
    
      }
    }
    
    Теперь фильтры. Создайте файл, который будет обрабатывать данные типа nginx-access:
    
    $ sudo nano /etc/logstash/conf.d/03-nginx-filter.cont
    filter {
    if [type] == "nginx-access" {
    grok {
    match => { "message" => "%{NGINXACCESS}" }
    overwrite => [ "message" ]
    }
    date {
    locale => "en"
    match => [ "timestamp" , ""dd/MMM/YYYY:HH:mmiss Z" ]
    
        }
      }
    }
    
    Для анализа данных в Logstash можно применять несколько фильтров. Одним из лучших сообщество считает Grok. По умолчанию в Logstash около 120 шаблонов, которые можно посмотреть в github.com. Если их не хватает, можно добавить свои правила, указав прямо в строке match или прописав в отдельном файле — в этом случае надо задать правилу уникальное имя и указать Logstash, где их искать (если не установлена переменная patterns_dir):
    
    patterns_dir => ["/patterns"]
    
    Проверить корректность правил можно на сайтах grokdebug.herokuapp.com и grokconstructor.appspot.com.

    Далее создайте фильтр для отбора события NGINXACCESS для nginx в простом формате — имя шаблона и регулярное выражение (последние две строки скриншота — это одна строка кода).
    
    $ mkdir /etc/logstash/patterns
    $ cat /etc/logstash/patterns/nginx
    
    NGUSERNAME [a-zA-Z.@-+_%]+
    NGUSER %{NGUSERNAME}
    NGINXACCESS %{IPORHOST:http_host} %{IPORHOST:clientip} [% {HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})? | %{DATA:rawrequest})" %{NUMBER:response}
    (?:%{NUMBER:bytes} | -) %{QS:referrer} %{QS:agent} %{NUMBER:request_time:float} ( %{UUID:request_id})
    
    Перезапустите:
    
    $ sudo service logstash restart
    
    Убедитесь в журналах, что все работает:
    
    $ tail -f /var/log/logstash/logstash-plain.log
    [INFO J[logstash.inputs.beats ] Beats inputs: Starting input listener {:address=>"localhost:5044"}
    [INFO J[logstash.pipeline ] Pipeline main started
    [INFO J[logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
    

    Заключение

    Стек ELK (Logstash, Elasticsearch, Kibana) — это современное решение для управления журналами и аналитики, которое позволяет инженерам преодолевать трудности мониторинга высокораспределенных, динамических и шумных сред. Это мощная платформа, которая собирает и обрабатывает данные из нескольких источников, сохраняет их в одном централизованном хранилище, которое может масштабироваться по мере роста данных, и предоставляет набор инструментов для анализа собранной информации. Стек популярен благодаря своей функциональности, простоте использования, рентабельности и хорошей поддержке активного сообщества.


    Не пропустите последние новости. Подписывайтесь!