Проверка конфигурации

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

/etc/ansible-iot/latest/vars/default.yml
---
# Параметры установки платформы
iot:
  # Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT.
  #  ВАЖНО!!! В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступна платформа.
  serverName: "external.iot.address"
  # Содержит путь до директории, в которую будет произведена установка.
  installDir: /storage/iot
  # Ссылка на политику конфиденциальности
  privacyPolicyUrl: "my.privacy.policy"
  # Ссылка на базу знаний
  knowledgeBaseUrl: "https://docs.eltex-co.ru/display/EKB/IoT"

  # Параметры MongoDB
  mongodb:
    # Версия MongoDB. На старом железе, не поддерживающем оптимизацию, нужно выставить значение `4`.
    version: 6
    external:
      # Если параметр имеет значение true, будет использоваться внешняя MongoDB.
      # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port'.
      enable: false
      # Адрес внешней MongoDB.
      addr: "external.mongodb.address"
      # Порт внешней MongoDB.
      port: 27017

  # Параметры WEB
  web:
    # Порт HTTP, по которому будет осуществляться доступ в WEB.
    httpPort: 80
    # Порт HTTPS, по которому будет осуществляться доступ в WEB.
    httpsPort: 443
    # Автоматически перенаправлять запросы с порта HTTP на порт HTTPS.
    redirectHttpToHttps: true
    # Нужно ли использовать HTTPS при формировании ссылок на WEB ('true' по умолчанию, при этом будет использован порт,
    # указанный в 'iot.web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт,
    # указанный в 'iot.web.httpPort'.
    useHttpsByDefault: true
    nginx:
      # Максимальное число соединений, которые одновременно может открыть рабочий процесс.
      worker_connections: 2048
      # Ограничение скорости обработки запросов модулем Nginx Rate Limiting.
      rateLimit:
        enable: true
    certbot:
      # Использовать ли certbot для получения сертификатов Let's Encrypt.
      enable: false
      # Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
      email: test@email.com
    fail2ban:
      enable: true

  # Параметры сервера отправки email
  mail:
    smtp:
      submitter: test@email.com
      password: "password"
      senderPrefix: "Сервер Eltex-SC"
      auth: "true"
      host: email.com
      port: 587
      # Протокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl.
      protection: starttls

  # Параметры authorization server
  authorization:
    # Уровень отладки внутри IoT Authorization Server.
    logLevel: INFO

    # Уровень сложности captcha: easy, medium, hard
    captchaLevel: "easy"

    # Параметры для управления доступностью саморегистрации.
    selfRegistration:
      allow: true
      allowDemo: true
      allowSocialNetworks: false

    # Параметры клиентских регистраций (через соцсети).
    clientRegistrations:
      google:
        enable: true
        clientId: "GoogleClientIdChangeMe"
        clientSecret: "GoogleClientSecretChangeMe"
      microsoft:
        enable: true
        clientId: "MicrosoftClientIdChangeMe"
        clientSecret: "MicrosoftClientSecretChangeMe"
      apple:
        enable: true
        clientId: "AppleClientIdChangeMe"
        keyId: "AppleKeyIdChangeMe"
        teamId: "AppleTeamIdChangeMe"
      yandex:
        enable: true
        clientId: "YandexClientIdChangeMe"
        clientSecret: "YandexClientSecretChangeMe"
      vk:
        enable: true
        clientId: "VkClientIdChangeMe"
        clientSecret: "VkClientSecretChangeMe"
      mailRu:
        enable: true
        clientId: "MailRuClientIdChangeMe"
        clientSecret: "MailRuClientSecretChangeMe"

    skills:
      # Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка.
      yandex:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "YandexClientIdChangeMe"
        password: "PasswordChangeMe"
        # Id навыка, который необходимо указывать при отправке уведомлений.
        skillId: ""
        # OAuth-токен, который необходимо указывать при отправке уведомлений.
        oauthToken: ""

      # Параметры проекта умного дома Сбера для интеграции с Салютом. Отображается в карточке проекта.
      sber:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "SberClientIdChangeMe"
        password: "PasswordChangeMe"
        # Bearer-токен, который необходимо указывать при отправке уведомлений.
        bearerToken: ""

      # Параметры проекта умного дома Mail.ru для интеграции с Марусей. Отображается в карточке проекта/приложения.
      marusya:
        enabled: false
        # Параметры для Basic Authentication.
        clientId: "MarusyaClientIdChangeMe"
        password: "PasswordChangeMe"
        # App ID, который был назначен приложению VK при создании.
        appId: "MarusyaAppIdChangeMe"
        # OAuth-токен, который необходимо указывать при отправке уведомлений.
        oauthToken: ""

  # Параметры платформы IoT core
  core:
    # Уровень отладки внутри IoT Core.
    logLevel: INFO

    # Порты платформы для подключения Z-Wave-контроллеров.
    ctlGate:
      port: 8070
      tcpPort: 8069
      sslPort: 8072

    links:
      # Нужно ли использовать HTTPS при формировании ссылок на ресурсы самой платформы (например, прошивки).
      useHttpsForApi: false
      # Нужно ли использовать HTTPS при формировании ссылок на фото с камер наблюдения.
      useHttpsForCameraLinks: true
      # Нужно ли использовать 'iot.web.httpPort'/'iot.web.httpsPort' при формировании ссылок на API.
      useUiProxyForApi: true

    push:
      firebase:
        enabled: false
      apns:
        enabled: false

    # Параметры для работы с видеосерверами
    video:
      # Параметры Flussonic.
      flussonic:
        url: ""
        apiKey: ""
        operatorId: ""
        adminLogin: ""
        motion:
          enabled: false
      # Параметры видеосервера EVI
      evi:
        url: ""
        apiKey: ""
        operatorId: ""
        adminLogin: ""

    acquiring:
      # Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать.
      advancePeriod: 3d
      paykeeper:
        url: "CHANGE_ME"
        secret: "PaykeeperSecretChangeMe"
        user: "PaykeeperUsernameChangeMe"
        password: "PaykeeperPasswordChangeMe"

    # Настройки ИК-пульта
    irc:
      # Время ожидания ИК-команды от пользователя
      recTimeout: 15s
      # Таймаут записи команды (отсутствия фронтов)
      cmdTimeout: 100ms

     # Настройки охраны
    guard:
      # Время, которое дается на включение FLIRS-устройств (ждем подтверждение от контроллера)
      # при постановке на охрану.
      deviceRequestDelay: 15s
      # Время, которое прибавляется ко времени задержки на очистку охранного кэша при постановке/снятии с охраны
      # на случай если охрана не завершила процесс постановки/снятия.
      # Время задержки равняется количеству охранных устройств, умноженному на deviceRequestDelay.
      clearContextExtraCacheDelay: 1m

# Параметры установки сервисов логирования (Elasticsearch + Logstash + Kibana)
elk:
  # Нужно ли добавлять в платформу appender, отправляющий логи в logstash.
  # В нем нет необходимости, если ELK не развернут или не настроен; это лишь спровоцирует сообщения об ошибках отправки
  # в логах платформы.
  enable: false
  # Имя (IP-адрес) сервера, на котором будет развернут ELK.
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [monitoring] должны совпадать.
  serverName: "********.********.ru"
  # Директория для установки системы логирования.
  installDir: /storage/elk

# Параметры установки сервисов мониторинга (Prometheus + Grafana)
monitoring:
  # Имя (IP-адрес) сервера, на котором будет развернуты сервисы мониторинга (Prometheus + Grafana).
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки системы мониторинга.
  installDir: /storage/monitoring

slgate:
  # Имя сервера, на котором будет развернут SLGATE.
  # ВАЖНО!!! Нельзя использовать IP-адрес, т.к. такая схема не будет работать!
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [slgate] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки SLGATE.
  installDir: /storage/slgate

Установка сервиса удаленного логирования

По завершении конфигурации сервиса удаленного логирования, необходимо произвести его установку на сервер при помощи следующих команд:

Установка
cd /etc/ansible-iot/latest
sudo ansible-playbook install_elk.yml

Пример вывода команд по установке сервиса:

Пример вывода команд
PLAY [Install ELK] ************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Include registry hub.eltex-co.ru parameters] ****************************************************************************************************************************************************************
ok: [localhost]

TASK [Correct ansible_become variable] ****************************************************************************************************************************************************************************
ok: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/get_timezone.yml for localhost

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/get_timezone/systemd.yml for localhost

TASK [Get current timezone of host via systemd] *******************************************************************************************************************************************************************
changed: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/distros/Ubuntu.yml for localhost

TASK [Remove old versions of docker for Ubuntu 22.04] *************************************************************************************************************************************************************
ok: [localhost] => (item=docker-compose)
ok: [localhost] => (item=docker)
ok: [localhost] => (item=docker-engine)
ok: [localhost] => (item=docker.io)
ok: [localhost] => (item=containerd)
ok: [localhost] => (item=runc)

TASK [Install utils and components for Ubuntu 22.04] **************************************************************************************************************************************************************
ok: [localhost] => (item=ca-certificates)
ok: [localhost] => (item=curl)
ok: [localhost] => (item=gnupg)
ok: [localhost] => (item=lsb-release)

TASK [Get Ubuntu release codename] ********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Add key for official docker repository to Ubuntu 22.04] *****************************************************************************************************************************************************
changed: [localhost]

TASK [Add official docker repository to Ubuntu 22.04] *************************************************************************************************************************************************************
changed: [localhost]

TASK [Install docker and components for Ubuntu 22.04] *************************************************************************************************************************************************************
ok: [localhost] => (item=docker-ce)
ok: [localhost] => (item=docker-ce-cli)
ok: [localhost] => (item=containerd.io)
ok: [localhost] => (item=docker-buildx-plugin)
ok: [localhost] => (item=docker-compose-plugin)
ok: [localhost] => (item=python3-cryptography)
ok: [localhost] => (item=python3-requests)
ok: [localhost] => (item=python3-docker)

TASK [Copy configs needed for docker images] **********************************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare docker-compose.yml] *********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare .env file for docker-compose] ***********************************************************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/elk/docker_volumes/elasticsearch/data] **********************************************************************************************************************************
changed: [localhost]

TASK [Check and create directory /storage/elk/configs/elasticsearch] **********************************************************************************************************************************************
changed: [localhost]

TASK [Prepare elasticsearch.yml.j2] *******************************************************************************************************************************************************************************
ok: [localhost]

TASK [Check and create directory /storage/elk/configs/kibana] *****************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare kibana.yml.j2] **************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Check and create directory /storage/elk/config/logstash] ****************************************************************************************************************************************************
changed: [localhost]

TASK [Prepare logstash.yml.j2] ************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Prepare pipelines.yml.j2] ***********************************************************************************************************************************************************************************
ok: [localhost]

TASK [Check and create directory /storage/elk/configs/logstash/pipelines] *****************************************************************************************************************************************
changed: [localhost]

TASK [Prepare logstash.conf.j2] ***********************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create a elk network with options] **************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create and start elk services] ******************************************************************************************************************************************************************************
changed: [localhost]

TASK [include_tasks] **********************************************************************************************************************************************************************************************
included: /etc/ansible-iot/latest/include/docker_prune.yml for localhost

TASK [Prune unused images, containers and networks] ***************************************************************************************************************************************************************
changed: [localhost]

TASK [Prune unused volumes] ***************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=31   changed=17   unreachable=0    failed=0    skipped=9    rescued=0    ignored=0

В выводе команды необходимо дождаться появления строки "PLAY RECAP" и убедиться, что параметры unreachable и failed на следующей строке равны нулю, что означает успешную установку сервиса.
Если любой из этих параметров не равен нулю, то в процессе установки сервиса произошла ошибка. В таком случае в выводе команды будет присутствовать задача, статус которой равен failed или unreachable. Изучение текста ошибки этой задачи поможет выявить причину проблемы и исправить её.

Проверка работоспособности

1. После успешной установки сервиса, проверьте состояние контейнеров сервиса удаленного логирования при помощи следующей команды:

Проверка контейнеров
sudo docker ps -a

Вывод данной команды должен иметь следующий вид:

CONTAINER ID   IMAGE                                        COMMAND                  CREATED          STATUS          PORTS                                                                                                NAMES
609ecd6c8e2f   hub.eltex-co.ru/iot/iot-kibana:1.34          "/bin/tini -- /usr/l…"   42 minutes ago   Up 42 minutes   0.0.0.0:5601->5601/tcp, [::]:5601->5601/tcp                                                          iot-kibana
e614e2da96ca   hub.eltex-co.ru/iot/iot-logstash:1.34        "/usr/local/bin/dock…"   42 minutes ago   Up 42 minutes   5044/tcp, 0.0.0.0:9600->9600/tcp, [::]:9600->9600/tcp, 0.0.0.0:5001->5000/tcp, [::]:5001->5000/tcp   iot-logstash
cb64a6c96ffa   hub.eltex-co.ru/iot/iot-elasticsearch:1.34   "/bin/tini -- /usr/l…"   42 minutes ago   Up 42 minutes   0.0.0.0:9200->9200/tcp, [::]:9200->9200/tcp, 0.0.0.0:9300->9300/tcp, [::]:9300->9300/tcp             iot-elasticsearch

Запуск всех контейнеров занимает до 3 минут.

Необходимо убедиться, что все контейнеры имеют статус Up и не происходит их перезапуска (статус Restarting).

В выводе команды должны присутствовать следующие контейнеры:

Название контейнераОжидаемый статус
iot-kibana
Up
iot-logstash
Up
iot-elasticsearch
Up

2. После успешного запуска всех контейнеров требуется проверить доступность веб-интерфейса сервиса удаленного логирования по следующему адресу:

https://domain.name:5601/

где domain.name — доменное имя сервера сервиса удаленного логирования (файл vars/default.yml, параметр elk.serverName).

  • Нет меток