Рекомендации по использованию#

В этом разделе приводится рекомендации по работе с сервисами логирования.

ELK#

Варианты запуска сервиса#

  • Одиночный экземпляр сервиса, развёрнутый на одном экземпляре виртуальной машины в выбранной зоне доступности.

  • Отказоустойчивый сервис, развёрнутый в кластере минимум из трёх экземпляров виртуальных машин в одной или трёх зонах доступности.

Архитектура отказоустойчивого решения#

Отказоустойчивый сервис ELK развёртывается в кластере минимум из трёх экземпляров виртуальных машин, и на каждом узле работают по одному мастеру и реплике Elasticsearch, причём реплика взаимодействует с мастером из другого узла (кросс-репликация).

Один из узлов кластера можно назначить арбитром — такой узел имеет роли master и voting_only. Отсутствие ролей data и ingest в этом случае не позволяет Elasticsearch принимать и обрабатывать данные. Кроме того, на такой узел не устанавливаются компоненты Kibana и Logstash. Зато узлу не требуется много ресурсов, поэтому в качестве арбитра вы можете использовать более дешёвый тип экземпляра.

Если кластер содержит два полнофункциональных узла и более, то по умолчанию новые индексы Elasticsearch создаются с одним primary shard и одной репликой. Шардирование и репликация позволяют сохранить данные в случае отказа одного из узлов и распределить нагрузку, если она возрастёт.

Аутентификация в ELK#

Вы можете защитить вход в графический интерфейс Kibana или API Elasticsearch c помощью пароля, который можно задать при создании сервиса. После того как сервис стартовал, заданный пароль не рекомендуется менять, поскольку управление установленным сервисом средствами облака станет невозможным.

Для удобства работы c сервисом в него встроены служебные пользователи:

  • kibana_system

  • logstash_system

  • beats_system

  • apm_system

  • remote_monitoring_user

Важно

Изменение служебных паролей после запуска ELK приведёт к некорректной работе сервиса. Если вы хотите изменить пароли, создайте новых пользователей с такими же ролями, задайте пароли и используйте их для интеграции с внешними системами.

Логирование собственных систем#

Если для сервиса PaaS при его создании была включена опция логирования, то установка и настройка агентов, отвечающих за отправку журналов событий (log shipper), осуществляется полностью автоматически. Однако вы можете отправлять в ELK также журналы событий из других своих систем, не относящихся к PaaS.

Вы можете выбрать, какому компоненту ELK отправлять журналы — Logstash или напрямую Elasticsearch. Мы рекомендуем использовать Logstash с настройками по умолчанию: он подходит для большинства ситуаций и позволяет при необходимости выполнять дополнительную обработку журналов при помощи конвейеров (pipelines).

Для сбора журналов на экземпляре с логируемой системой необходимо установить агент, например, Filebeat.

Отправка журналов в Logstash#

Для отправки журналов событий в Logstash в конфигурационный файл Filebeat следует добавить следующий текст:

Пример конфигурационного файла Filebeat#
output:
  logstash:
   hosts:
   - 172.24.19.223:5044
   - 172.24.19.224:5044

Настройка аутентификации на стороне агента не требуется.

Отправка журналов в Elasticsearch#

Для отправки журналов событий напрямую в Elasticsearch предварительно необходимо настроить аутентификацию. На стороне агента надо настроить один из видов аутентификации:

  • базовая аутентификация по имени и паролю;

  • аутентификация с помощью токена.

При базовой аутентификации необходимо создать произвольного пользователя и назначить ему роль beats_writer. Сделать это можно с помощью Elasticsearch API:

../../../_images/user-pwd-api.png

или в разделе Stack Management Users:

../../../_images/user-pwd-console.png

После этого в конфигурационном файле Filebeat нужно указать имя пользователя и его пароль.

Пример конфигурационного файла Filebeat#
output:
  elasticsearch:
    hosts:
    - http://172.24.19.223:9200
    - http://172.24.19.224:9200
    username: mybeats
    password: l0ng-r4nd0m-p@ssw0rd

Подключение к сервису#

После успешного запуска адреса и порты, которые прослушивает сервис ELK, можно найти на его странице на вкладке Информация.

Компоненты ELK прослушивают по умолчанию следующие порты:

Компонент

Протокол

Порт

Комментарий

Elasticsearch

TCP

9200

Принимает запросы HTTP

Kibana

TCP

5601

Принимает запросы HTTP

Logstash

TCP

5044

Использует собственный протокол Limberjack, не принимает HTTP

При работе с компонентом Elasticsearch рекомендуется использовать точки приёма запросов (endpoints) для подключения всех узлов, кроме арбитра. Многие инструменты, например Filebeat и Metricbeat, умеют работать со всеми точками приёма сразу, самостоятельно осуществлять балансировку и автоматическое переключение. В случае если они не могут самостоятельно выполнять эти операции, рекомендуем использовать балансировщик haproxy или nginx.

Если на этапе развёртывания сервиса вы задали пароль суперпользователя elastic, то Elasticsearch запустится с расширением X-Pack Security и любое действие с ним потребует аутентификации.

Важно

Учётную запись elastic рекомендуем использовать только для управления компонентом Elasticsearch. Для интеграции с другими сервисами создайте дополнительных пользователей с нужным набором привилегий.

Фильтрация журналов с помощью тегов#

Сервис ELK использует возможность назначения тегов в Kibana для маркировки журналов действий. Журналам каждого сервиса PaaS назначается предопределённый тег. Кроме того, каждому журналу присваивается тег, соответствующий заданному пользователем имени PaaS. Вы можете также самостоятельно добавить теги для конкретного сервиса при его создании.

В таблице ниже приведены теги для различных сервисов PaaS.

Сервис PaaS

Тег

MySQL

mysql

PostgreSQL

postgresql

Redis

redis

MongoDB

mongodb

Memcached

memcached

ElasticSearch

elasticsearch

ELK

elasticsearch / logstash / kibana

C помощью тегов удобно фильтровать записи в Kibana. На иллюстрации ниже показано, как, используя запрос по тегу, выбрать журналы сервиса MySQL.

../../../_images/log-filtering.png

Мониторинг сервиса#

Для мониторинга сервиса мы рекомендуем включить облачный сервис мониторинга Prometheus. Если вы хотите использовать свой собственный сервер мониторинга для контроля состояния и работоспособности экземпляров Elasticsearch и Logstash, то можете воспользоваться экспортёрами Prometheus elasticsearch_exporter и logstash_exporter. Они развёртываются вместе с сервисом ELK и прослушивают порты tcp/9114 и tcp/9304, соответственно. Дополнительно на все узлы кластера ELK устанавливается node_exporter. Он позволяет снимать метрики экземпляров виртуальных машин и операционной системы и прослушивает порт tcp/9100 .