Проверка конфигурации
Перед установкой сервиса мониторинга следует перепроверить, что в конфигурацию были внесены все требуемые изменения.
Для этого ниже приведены примеры всех полных файлов конфигурации, которые редактировались в рамках данного документа:
---
# Параметры установки платформы.
iot:
# Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT.
# ВАЖНО!!! В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступна платформа.
serverName: "********.ru"
# Содержит путь до директории, в которую будет произведена установка.
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: "{{ iot.serverName }}"
# Директория для установки системы логирования.
installDir: /storage/elk
# Параметры установки сервисов мониторинга (Prometheus + Grafana).
monitoring:
# Имя (IP-адрес) сервера, на котором будут развернуты сервисы мониторинга (Prometheus + Grafana).
# По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
# В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать.
serverName: "********.ru"
# Директория для установки системы мониторинга.
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_monitoring.yml
Пример вывода команд по установке сервиса:
PLAY [Install monitoring system] **********************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Include registry hub.eltex-co.ru parameters] ****************************************************************************************************************************************************************
ok: [localhost]
TASK [Include monitoring 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/monitoring/prometheus] **************************************************************************************************************************************************
changed: [localhost]
TASK [Prepare grafana-providers.yaml.j2] **************************************************************************************************************************************************************************
changed: [localhost]
TASK [Prepare prometheus.yml.j2] **********************************************************************************************************************************************************************************
changed: [localhost]
TASK [Check and create directory /storage/monitoring/prometheus/data] *********************************************************************************************************************************************
changed: [localhost]
TASK [Check and create directory /storage/monitoring/grafana/data] ************************************************************************************************************************************************
changed: [localhost]
TASK [Create a monitoring network with options] *******************************************************************************************************************************************************************
changed: [localhost]
TASK [Tear down grafana] ******************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Tear down prometheus] ***************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Create and start monitoring 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=29 changed=18 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0
В выводе команды необходимо дождаться появления строки "PLAY RECAP" и убедиться, что параметры unreachable и failed на следующей строке равны нулю, что означает успешную установку сервиса.
Если любой из этих параметров не равен нулю, то в процессе установки сервиса произошла ошибка. В таком случае в выводе команды будет присутствовать задача, статус которой равен failed или unreachable. Изучение текста ошибки этой задачи поможет выявить причину проблемы и исправить её.
Проверка работоспособности
1. После успешной установки сервиса, проверьте состояние контейнеров сервиса мониторинга при помощи следующей команды:
Вывод данной команды должен иметь следующий вид:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3175fc7c10c6 hub.eltex-co.ru/iot/iot-grafana:1.34 "/run.sh" 27 seconds ago Up 26 seconds 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp iot-grafana
32815121cbd7 hub.eltex-co.ru/iot/iot-prometheus:1.34 "/bin/prometheus --c…" 27 seconds ago Up 27 seconds 0.0.0.0:9090->9090/tcp, [::]:9090->9090/tcp iot-prometheus
Запуск всех контейнеров занимает до 3 минут.
Необходимо убедиться, что все контейнеры имеют статус Up и не происходит их перезапуска (статус Restarting).
В выводе команды должны присутствовать следующие контейнеры:
| Название контейнера | Ожидаемый статус |
|---|
| iot-grafana | Up |
| iot-prometheus | Up |
2. После успешного запуска всех контейнеров требуется проверить доступность веб-интерфейса сервиса мониторинга по следующему адресу:
https://domain.name:3000/
где domain.name — доменное имя сервера сервиса мониторинга (файл vars/default.yml, параметр monitoring.serverName).
3. Авторизуйтесь в веб-интерфейсе сервиса мониторинга при помощи следующих учетных данных по умолчанию: