Перед установкой сервиса мониторинга следует перепроверить, что в конфигурацию были внесены все требуемые изменения.
Для этого ниже приведены примеры всех полных файлов конфигурации, которые редактировались в рамках данного документа:
---
# Параметры установки платформы.
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. После успешной установки сервиса, проверьте состояние контейнеров сервиса мониторинга при помощи следующей команды:
sudo docker ps -a |
Вывод данной команды должен иметь следующий вид:
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. Авторизуйтесь в веб-интерфейсе сервиса мониторинга при помощи следующих учетных данных по умолчанию:
| Логин | admin |
|---|---|
| Пароль | admin |