Grafana: различия между версиями
(не показаны 62 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
{{ | {{DISPLAYTITLE: Использование Grafana с контроллером Wiren Board }} | ||
[[Image: Grafana Dash Demo.png |600px|thumb|right| Пример дашборда в Grafana: выходной контроль устройств у нас на производстве ]] | |||
== Введение == | == Введение == | ||
'''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. | '''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. | ||
Строка 8: | Строка 9: | ||
== Grafana Cloud == | == Grafana Cloud == | ||
[[Image: Grafana Cloud.png |600px|thumb|right| Схема обмена данными при использовании Grafana Cloud]] | |||
В состав Grafana Cloud уже есть база данных, поэтому отдельно устанавливать и настраивать базу данных не нужно. | |||
Схема работы: | |||
* На контроллер устанавливается [https://www.influxdata.com/time-series-platform/telegraf/ клиент Telegraf] | |||
* Telegraf отправляет данные в базу данных Prometheus. | |||
* Grafana отображает содержимое базы данных. | |||
=== Регистрация в Grafana Cloud === | |||
# Зарегистрируйтесь в [https://grafana.com/auth/sign-up/create-user Grafana Cloud]. | |||
# Перейдите в настройки аккаунта по ссылке '''My Account'''. | |||
# Найдите карточку '''Prometheus''' и нажмите кнопку '''Send Metrics'''. | |||
# На открывшейся странице найдите и сохраните данные из полей: | |||
#* Query Endpoint | |||
#* Remote Write Endpoint | |||
#* Username / Instance ID | |||
#* Password / API Key, для генерации ключа нажмите '''Generate now'''. | |||
<gallery widths=322px heights=200px perrow=2> | |||
Image: Grafana Cloud Site 1.png | Настройки Grafana Cloud | |||
Image: Grafana Cloud Site 2.png | Данные, которые нужно сохранить | |||
</gallery> | |||
=== | === Установка и настройка Telegraf === | ||
Telegraf — это сервис, который устанавливается на контроллер Wiren Board и отправляет данные в базу данных Grafana Cloud. Для выполнения команд, откройте консоль контроллера по [[SSH]]. | |||
=== | Установка: | ||
# Установите дополнительные пакеты: | |||
#:<syntaxhighlight lang="bash"> | |||
apt update && apt install apt-transport-https | |||
apt -y install gnupg | |||
</syntaxhighlight> | |||
# Добавьте ключ репозитория Telegraf: | |||
#:<syntaxhighlight lang="bash"> | |||
wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | apt-key add - | |||
</syntaxhighlight> | |||
# Добавьте в список apt-репозиториев ссылку на репозиторий telegraf: | |||
#*<syntaxhighlight lang="bash"> | |||
source /etc/os-release | |||
</syntaxhighlight> | |||
#* Здесь <code>bullseye</code> — версия ОС: | |||
#*:<syntaxhighlight lang="bash"> | |||
echo "deb https://repos.influxdata.com/debian bullseye stable" | tee /etc/apt/sources.list.d/influxdb.list | |||
</syntaxhighlight> | |||
# Обновите список пакетов и установите Telegraf: | |||
#:<syntaxhighlight lang="bash"> | |||
apt update && apt install telegraf | |||
</syntaxhighlight> | |||
# Включите автозапуск сервиса: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl enable telegraf | |||
</syntaxhighlight> | |||
# | Настройка: | ||
# Откройте файл настроек Telegraf: | |||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
nano /etc/telegraf/telegraf.conf | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Секция '''inputs.mqtt_consumer''', поля ''servers'', ''topics'', ''data_format'' и ''data_type'': | ||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
[[inputs.mqtt_consumer]] | [[inputs.mqtt_consumer]] | ||
Строка 101: | Строка 136: | ||
data_type = "float" | data_type = "float" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#: <syntaxhighlight lang="bash"> | # Секция '''outputs.http''', поля ''url'', ''username'', ''password'', ''data_format'' и ''[outputs.http.headers]''. Ссылку и логин с паролем мы сохраняли в разделе про регистрацию. | ||
#:<syntaxhighlight lang="bash"> | |||
[[outputs.http]] | [[outputs.http]] | ||
## URL is the address to send metrics to | ## URL is the address to send metrics to | ||
Строка 119: | Строка 155: | ||
X-Prometheus-Remote-Write-Version = "0.1.0" | X-Prometheus-Remote-Write-Version = "0.1.0" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Закомментируйте секцию '''outputs.influxdb''': | ||
## Остановите | #:<syntaxhighlight lang="bash"> | ||
# Configuration for sending metrics to InfluxDB | |||
# [[outputs.influxdb]] | |||
## The full HTTP or UDP URL for your InfluxDB instance. | |||
## | |||
## Multiple URLs can be specified for a single cluster, only ONE of the | |||
## urls will be written to each interval. | |||
# urls = ["unix:///var/run/influxdb.sock"] | |||
# urls = ["udp://127.0.0.1:8089"] | |||
# urls = ["http://127.0.0.1:8086"] | |||
## The target database for metrics; will be created as needed. | |||
## For UDP url endpoint database needs to be configured on server side. | |||
# database = "telegraf" | |||
## The value of this tag will be used to determine the database. If this | |||
## tag is not set the 'database' option is used as the default. | |||
# database_tag = "" | |||
## If true, the 'database_tag' will not be included in the written metric. | |||
# exclude_database_tag = false | |||
## If true, no CREATE DATABASE queries will be sent. Set to true when using | |||
## Telegraf with a user without permissions to create databases or when the | |||
## database already exists. | |||
# skip_database_creation = false | |||
## Name of existing retention policy to write to. Empty string writes to | |||
## the default retention policy. Only takes effect when using HTTP. | |||
# retention_policy = "" | |||
## The value of this tag will be used to determine the retention policy. If this | |||
## tag is not set the 'retention_policy' option is used as the default. | |||
# retention_policy_tag = "" | |||
## If true, the 'retention_policy_tag' will not be included in the written metric. | |||
# exclude_retention_policy_tag = false | |||
## Write consistency (clusters only), can be: "any", "one", "quorum", "all". | |||
## Only takes effect when using HTTP. | |||
# write_consistency = "any" | |||
## Timeout for HTTP messages. | |||
# timeout = "5s" | |||
## HTTP Basic Auth | |||
# username = "telegraf" | |||
# password = "metricsmetricsmetricsmetrics" | |||
## HTTP User-Agent | |||
# user_agent = "telegraf" | |||
## UDP payload size is the maximum packet size to send. | |||
# udp_payload = "512B" | |||
## Optional TLS Config for use on HTTP connections. | |||
# tls_ca = "/etc/telegraf/ca.pem" | |||
# tls_cert = "/etc/telegraf/cert.pem" | |||
# tls_key = "/etc/telegraf/key.pem" | |||
## Use TLS but skip chain & host verification | |||
# insecure_skip_verify = false | |||
## HTTP Proxy override, if unset values the standard proxy environment | |||
## variables are consulted to determine which proxy, if any, should be used. | |||
# http_proxy = "http://corporate.proxy:3128" | |||
## Additional HTTP headers | |||
# http_headers = {"X-Special-Header" = "Special-Value"} | |||
## HTTP Content-Encoding for write request body, can be set to "gzip" to | |||
## compress body or "identity" to apply no encoding. | |||
# content_encoding = "gzip" | |||
## When true, Telegraf will output unsigned integers as unsigned values, | |||
## i.e.: "42u". You will need a version of InfluxDB supporting unsigned | |||
## integer values. Enabling this option will result in field type errors if | |||
## existing data has been written. | |||
# influx_uint_support = false | |||
</syntaxhighlight> | |||
# Сохраните файл и закройте редактор. | |||
Проверка работы: | |||
# Остановите сервис: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl stop telegraf | systemctl stop telegraf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
##Если ошибок нет, | # Запустите сервис в режиме отладки и убедитесь, что данные отправляются: | ||
#:<syntaxhighlight lang="console" highlight="15-19"> | |||
# telegraf -debug | |||
2021-11-29T16:47:13Z I! Starting Telegraf 1.20.4 | |||
2021-11-29T16:47:13Z I! Using config file: /etc/telegraf/telegraf.conf | |||
2021-11-29T16:47:13Z I! Loaded inputs: cpu disk diskio kernel mem mqtt_consumer processes swap system | |||
2021-11-29T16:47:13Z I! Loaded aggregators: | |||
2021-11-29T16:47:13Z I! Loaded processors: | |||
2021-11-29T16:47:13Z I! Loaded outputs: http | |||
2021-11-29T16:47:13Z I! Tags enabled: host=wirenboard-AWQBNTYP | |||
2021-11-29T16:47:13Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"wirenboard-AWQBNTYP", Flush Interval:10s | |||
2021-11-29T16:47:13Z D! [agent] Initializing plugins | |||
2021-11-29T16:47:13Z D! [agent] Connecting outputs | |||
2021-11-29T16:47:13Z D! [agent] Attempting connection to [outputs.http] | |||
2021-11-29T16:47:13Z D! [agent] Successfully connected to outputs.http | |||
2021-11-29T16:47:13Z D! [agent] Starting service inputs | |||
2021-11-29T16:47:13Z I! [inputs.mqtt_consumer] Connected [tcp://127.0.0.1:1883] | |||
2021-11-29T16:47:24Z D! [outputs.http] Wrote batch of 31 metrics in 696.002545ms | |||
2021-11-29T16:47:24Z D! [outputs.http] Buffer fullness: 1 / 10000 metrics | |||
2021-11-29T16:47:33Z D! [outputs.http] Wrote batch of 34 metrics in 129.098071ms | |||
2021-11-29T16:47:33Z D! [outputs.http] Buffer fullness: 0 / 10000 metrics | |||
</syntaxhighlight> | |||
# Если ошибок нет, то остановите команду клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | |||
# Запустите сервис в автоматическом режиме: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl start telegraf | systemctl start telegraf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Создание панели с | === Настройка в Grafana источника данных === | ||
Чтобы Grafana могла отобразить данные из базы данных Prometheus, нужно в её веб-интерфейсе добавить источник данных: | |||
# Откройте веб-интерфейс Grafana. | |||
# Перейдите в настройки аккаунта по ссылке '''My Account'''. | |||
# Найдите карточку '''Grafana''' и нажмите кнопку '''Log In'''. | |||
# Слева на панели нажмите на «шестерёнку» и выберите пункт '''Data Sources'''. | |||
# Откроется страница со списком источников данных, нажмите на кнопку '''Add data source'''. | |||
# В открывшемся списке найдите '''Prometheus''' и нажмите кнопку '''Select'''. | |||
# На странице создания нового источника данных заполните: | |||
#* Наименование, можно оставить по умолчанию. | |||
#* URL — ссылка, сохранённая на этапе регистрации из поля ''Query Endpoint'' (без push на конце) | |||
#* Auth — включите флажок Basic auth | |||
#* Basic Auth Details — заполните поля User и Password. | |||
# Чтобы сохранить настройки, нажмите '''Save & Test''', при успешном подключении появится сообщение '''Data source is working'''. | |||
Если после сохранения настроек нет ошибок, то переходите к созданию дашборда. | |||
<gallery widths=305px heights=200px perrow=3> | |||
Image: Grafana Cloud - 1. Add Data Source 0.png | Переход к списку источников данных | |||
Image: Grafana Cloud - 1. Add Data Source 1.png | Добавление нового источника | |||
Image: Grafana Cloud - 1. Add Data Source 2.png | Выбор типа источника | |||
Image: Grafana Cloud - 1. Add Data Source 3.png | Настройка источника данных: наименование и URL | |||
Image: Grafana Cloud - 1. Add Data Source 4.png | Настройка источника данных: логин и пароль | |||
Image: Grafana Cloud - 1. Add Data Source 5.png | Настройка источника данных: проверка соединения | |||
</gallery> | |||
=== Создание дашборда в Grafana === | |||
После того как мы создали источник данных — добавьте новый дашборд и создайте запрос на выборку данных: | |||
# Откройте веб-интерфейс Grafana. | |||
# Перейдите в настройки аккаунта по ссылке '''My Account'''. | |||
# Найдите карточку '''Grafana''' и нажмите кнопку '''Log In'''. | |||
# Выберите на панели слева «плюсик» и пункт '''Dashboard'''. | |||
# В открывшейся странице '''New dashboard''', нажмите на плитку '''Add a empty panel'''. Откроется страница создания запроса. | |||
# В поле '''Data source''' выберите созданный ранее источник данных. | |||
# В строке '''A → Metrics browser''': | |||
#* в группе '''2. Select labels to search in''' выберите '''topic'''; | |||
#* в группе '''3. Select values for your labels''' выберите топик, который мы отправили с контроллера; | |||
#* Нажмите кнопку '''Use query'''. Сразу после этого на панели сверху должен появиться график. | |||
# Задайте панели имя в поле '''Panel options''' → '''Title'''. | |||
# Сохраните дашборд, для этого нажмите кнопку '''Save''', в появившемся окне '''введите имя''' и нажмите кнопку '''Save'''. | |||
Настройка дашборда завершена. | |||
Запрос из примера в текстовом виде: | |||
<syntaxhighlight lang="json"> | |||
{topic="/devices/power_status/controls/Vin"} | |||
</syntaxhighlight> | |||
<gallery widths=305px heights=200px perrow=3 > | |||
Image: Grafana Cloud - 2. Add Dashboard 0.png | Добавление нового дашборда | |||
Image: Grafana Cloud - 2. Add Dashboard 1.png | Добавление панели в дашборд | |||
Image: Grafana Cloud - 3. Construct Query 1.png | A → Metrics browser | |||
Image: Grafana Cloud - 3. Construct Query 2.png | Выбор топика | |||
Image: Grafana Cloud - 3. Construct Query 3.png | Выбор топика | |||
Image: Grafana Cloud - 3. Construct Query 4.png | Кнопка Use query | |||
Image: Grafana Cloud - 4. Save Dashboard 0.png | Сохранение дашборда и панели | |||
Image: Grafana Cloud - 4. Save Dashboard 1.png | Ввод наименования дашборда | |||
Image: Grafana Cloud - 5. WB Dashboard.png | Созданный дашборд с панелью Vin | |||
</gallery> | |||
== Свой сервер Grafana == | == Свой сервер Grafana == | ||
[[Image: Local Grafana.png |600px|thumb|right| Схема обмена данными при использовании своего сервера Grafana ]] | |||
Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board. | Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board. | ||
Строка 138: | Строка 339: | ||
* Grafana отображает содержимое базы данных Influx. | * Grafana отображает содержимое базы данных Influx. | ||
Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. | Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. Если вы используете два разных сервера, то IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена Grafana. | ||
=== Grafana === | === Установка Grafana === | ||
[[Файл:Gragana_login_1.png|400px|thumb|right|Страница входа в веб-интерфейс Grafana]] | [[Файл:Gragana_login_1.png|400px|thumb|right|Страница входа в веб-интерфейс Grafana]] | ||
В примере мы установим Grafana на сервер с Debian Linux 11. | В примере мы установим Grafana на сервер с Debian Linux 11. | ||
Строка 161: | Строка 362: | ||
sudo apt update | sudo apt update | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Если во время установки Grafana по инструкции выше возникнет ошибка <code>gpg: no valid OpenPGP data found</code> — [https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/ установите Grafana в docker]. Причина описана тут: [https://community.grafana.com/t/cant-download-grafana-9-0-2-from-russia/68391 Can’t download grafana 9.0.2 from russia]. Остальные пакеты ставятся как обычно — просто следуйте инструкции. | |||
Установите необходимое ПО: | Установите необходимое ПО: | ||
Строка 167: | Строка 370: | ||
sudo apt install -y grafana influxdb influxdb-client python3-pip | sudo apt install -y grafana influxdb influxdb-client python3-pip | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# и дополнительные | # и дополнительные модули python: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
pip3 install paho-mqtt python-etcd | sudo pip3 install paho-mqtt python-etcd influxdb | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 207: | Строка 410: | ||
# Введите логин/пароль '''admin'''/'''admin'''. После первого входа задайте новый пароль. | # Введите логин/пароль '''admin'''/'''admin'''. После первого входа задайте новый пароль. | ||
=== MQTT- | Если вы забыли введённый пароль, то его можно сбросить: | ||
# Подключитесь к контроллеру по [[SSH]]. | |||
# Введите команду: | |||
#: <syntaxhighlight lang="bash"> | |||
grafana-cli --homepath "/usr/share/grafana/" admin reset-admin-password admin | |||
</syntaxhighlight> | |||
# Перезапустите сервис: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl restart grafana-server | |||
</syntaxhighlight> | |||
# После этого зайдите в веб-интерфейс Grafana и создайте новый пароль. | |||
=== Установка MQTT-брокера === | |||
Теперь настроим MQTT-брокер, куда контроллер Wiren Board будет отправлять данные. | Теперь настроим MQTT-брокер, куда контроллер Wiren Board будет отправлять данные. | ||
Установите на сервер с Grafana '''mosquitto''' по инструкции [[MQTT# | Установите на сервер с Grafana '''mosquitto''' по инструкции [[MQTT#Установка брокера | Установка брокера]]. | ||
=== Настройка моста на контроллере === | |||
[[Image: Wiren Board Controller Bridge.png |500px|thumb|right| Файл конфигурации MQTT-моста]] | |||
Настройте на контроллере Wiren Board подключение к внешнему MQTT-брокеру: | Настройте на контроллере Wiren Board подключение к внешнему MQTT-брокеру: | ||
# Подключитесь к контроллеру по [[SSH]]. | # Подключитесь к контроллеру по [[SSH]]. | ||
# Создайте файл конфигурации <code>bridge1.conf</code>: | # Создайте файл конфигурации <code>bridge1.conf</code>: | ||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
nano /etc/mosquitto/conf.d/bridge1.conf | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# Вставьте в него строки, в которых замените в двух местах '''AWQBNTYP''' на серийный номер контроллера, а '''192.168.2.36''' на IP-адрес брокера: | # Вставьте в него строки, в которых замените в двух местах '''AWQBNTYP''' на серийный номер контроллера, а '''192.168.2.36''' на IP-адрес брокера: | ||
Строка 222: | Строка 439: | ||
connection bridge1 | connection bridge1 | ||
#address of server | #address of server | ||
address | address 192.168.2.36 | ||
notifications true | notifications true | ||
notification_topic /client/AWQBNTYP/bridge1_status | notification_topic /client/AWQBNTYP/bridge1_status | ||
remote_username test | remote_username test | ||
remote_password | remote_password wbpassword | ||
topic /hwmon/# both 2 /devices /client/AWQBNTYP/devices | topic /hwmon/# both 2 /devices /client/AWQBNTYP/devices | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 233: | Строка 450: | ||
# Перезапустите mosquitto: | # Перезапустите mosquitto: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl restart mosquitto | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь проверим, что контроллер отправляет данные во внешний MQTT-брокер | Теперь проверим, что контроллер отправляет данные во внешний MQTT-брокер: | ||
#Выполните в консоли контроллера команду, в которой замените '''192.168.2.36''' на IP-адрес брокера, '''AWQBNTYP''' на серийный номер контроллера, а '''test''' и '''wbpassword''' на логин и пароль от MQTT-брокера: | |||
#:<syntaxhighlight lang="console"> | #:<syntaxhighlight lang="console"> | ||
# mosquitto_sub -v -h 192.168.2.36 -u test -P wbpassword -t /client/AWQBNTYP/devices/# | |||
/client/AWQBNTYP/devices/hwmon/meta/driver wb-rules | /client/AWQBNTYP/devices/hwmon/meta/driver wb-rules | ||
/client/AWQBNTYP/devices/hwmon/meta/name HW Monitor | /client/AWQBNTYP/devices/hwmon/meta/name HW Monitor | ||
Строка 246: | Строка 463: | ||
/client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/order 1 | /client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/order 1 | ||
/client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/readonly 1 | /client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/readonly 1 | ||
/client/AWQBNTYP/devices/hwmon/controls/CPU Temperature | /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature 66.917 | ||
/client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/type temperature | /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/type temperature | ||
/client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/order 2 | /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/order 2 | ||
/client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/readonly 1 | /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/readonly 1 | ||
/client/AWQBNTYP/devices/hwmon/controls/CPU Temperature 66.917 | /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature 66.917 | ||
/client/AWQBNTYP/devices/hwmon/controls/Board Temperature 35.875 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
#:Если после выполнения команды вы получите список топиков — контролер успешно отправляет данные во внешний брокер. | #:Если после выполнения команды вы получите список топиков — контролер успешно отправляет данные во внешний брокер. | ||
Строка 256: | Строка 474: | ||
=== Скрипт на сервере Grafana === | === Скрипт на сервере Grafana === | ||
[[Image: Grafana mqtt to influxdb script.png |500px|thumb|right| Создание сервиса для запуска скрипта ]] | |||
<syntaxhighlight lang="bash"> | Теперь скачаем на сервер с Grafana скрипт, который будет отправлять данные из MQTT-брокера в базу данных Influx: | ||
cd /usr/local/bin | # Перейдите на сервере в папку <code>/usr/local/bin</code> | ||
#:<syntaxhighlight lang="bash"> | |||
cd /usr/local/bin | |||
</syntaxhighlight> | |||
# Скачайте в эту папку скрипт: | |||
#:<syntaxhighlight lang="bash"> | |||
sudo wget https://raw.githubusercontent.com/wirenboard/wbmqtt2influx/master/mqtt_to_influxdb.py | |||
</syntaxhighlight> | |||
# Разрешите выполнение скрипта командой: | |||
#:<syntaxhighlight lang="bash"> | |||
sudo chmod +x mqtt_to_influxdb.py | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# Создайте сервис, который будет автоматически запускать скрипт: | |||
#:<syntaxhighlight lang="bash"> | |||
<syntaxhighlight lang="bash"> | sudo systemctl edit --force --full mqtt_to_influxdb.service | ||
systemctl edit --force --full mqtt_to_influxdb.service | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# В открывшийся редактор вставьте строки, в которых замените '''test''' и '''wbpassword''' на логин и пароль от MQTT-брокера.: | |||
#:<syntaxhighlight lang="bash"> | |||
В редактор | |||
<syntaxhighlight lang="bash"> | |||
[Unit] | [Unit] | ||
Description=Mqtt to Influxdb script | Description=Mqtt to Influxdb script | ||
Строка 277: | Строка 502: | ||
Type=idle | Type=idle | ||
User=mosquitto | User=mosquitto | ||
ExecStart=/usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost "/#" -u "test" -P " | ExecStart=/usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost "/#" -u "test" -P "wbpassword" | ||
Restart=always | Restart=always | ||
TimeoutStartSec=10 | TimeoutStartSec=10 | ||
Строка 284: | Строка 509: | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</syntaxhighlight> | |||
#: Если MQTT-брокер стоит на отдельном от Grafana сервере, укажите его IP-адрес вместо '''localhost'''. | |||
# Сохраните файл, для этого нажмите клавиши <kbd>Ctrl</kbd>+<kbd>O</kbd>, затем <kbd>Enter</kbd> и <kbd>Ctrl</kbd>+<kbd>X</kbd>. | |||
# Настройте автозапуск и запустите сервис: | |||
#:<syntaxhighlight lang="bash"> | |||
sudo systemctl enable mqtt_to_influxdb.service && sudo systemctl start mqtt_to_influxdb.service | |||
</syntaxhighlight> | |||
# Проверьте статус сервиса: | |||
#:<syntaxhighlight lang="console" highlight="4" > | |||
$ systemctl status mqtt_to_influxdb.service | |||
● mqtt_to_influxdb.service - Mqtt to Influxdb script | |||
Loaded: loaded (/etc/systemd/system/mqtt_to_influxdb.service; enabled; vendor preset: enabled) | |||
Active: active (running) since Thu 2021-11-25 21:38:32 +04; 4s ago | |||
Main PID: 5440 (python3) | |||
Tasks: 2 (limit: 4663) | |||
Memory: 17.1M | |||
CPU: 206ms | |||
CGroup: /system.slice/mqtt_to_influxdb.service | |||
└─5440 /usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost /# -u test -P wbpassword | |||
</syntaxhighlight> | |||
#: Если в выводе команды есть строчка <code>Active: active (running)</code> — сервис создан и настроен верно. | |||
Теперь проверьте, записывается ли что-то в influxDB. Для этого выполните на сервере команду: | |||
:<syntaxhighlight lang="console"> | |||
$ influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 10' | |||
name: mqtt_data | |||
time channel client value_f | |||
---- ------- ------ ------- | |||
1637861917526049562 hwmon/CPU Temperature AWQBNTYP 67.516 | |||
1637861917615599448 hwmon/Board Temperature AWQBNTYP 35.875 | |||
1637861927519510484 hwmon/CPU Temperature AWQBNTYP 66.917 | |||
1637861927586856127 hwmon/Board Temperature AWQBNTYP 35.875 | |||
1637861937592362349 hwmon/Board Temperature AWQBNTYP 35.875 | |||
1637861937592362349 hwmon/CPU Temperature AWQBNTYP 66.917 | |||
1637861947498698295 hwmon/CPU Temperature AWQBNTYP 67.516 | |||
1637861947570297085 hwmon/Board Temperature AWQBNTYP 35.875 | |||
1637861957523243600 hwmon/CPU Temperature AWQBNTYP 66.917 | |||
1637861957593339293 hwmon/Board Temperature AWQBNTYP 35.875 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
:если в выводе команды есть информация с топиков — можно переходить к настройке Grafana через веб-интерфейс. | |||
=== Настройка в Grafana источника данных === | |||
Чтобы Grafana могла отобразить данные из базы данных Influx, нужно в её веб-интерфейсе добавить источник данных: | |||
# Откройте веб-интерфейс Grafana. | |||
# Слева на панели нажмите на «шестерёнку» и выберите пункт '''Data Sources'''. | |||
# Откроется страница со списком источников данных, который у нас будет пуст. Нажмите на кнопку '''Add data source'''. | |||
# В открывшемся списке найдите '''InfluxDB''' и нажмите кнопку '''Select'''. | |||
# На странице создания нового источника данных заполните: | |||
#* Наименование, можно оставить по умолчанию. | |||
#* URL — http://localhost:8086 | |||
#* Database — mqtt_data | |||
# Чтобы сохранить настройки, нажмите '''Save & Test''', при успешном подключении появится сообщение '''Data source is working'''. | |||
Если после сохранения настроек нет ошибок, то переходите к созданию дашборда. | |||
<gallery widths=305px heights=200px perrow=3> | |||
Image: Grafana - 1. Add Data Source 0.png | Переход к списку источников данных | |||
Image: Grafana - 1. Add Data Source 1.png | Добавление нового источника | |||
Image: Grafana - 1. Add Data Source 2.png | Выбор типа источника | |||
Image: Grafana - 1. Add Data Source 3.png | Настройка источника данных: наименование и URL | |||
Image: Grafana - 1. Add Data Source 4.png | Настройка источника данных: имя базы данных и проверка соединения | |||
</gallery> | |||
=== Создание дашборда в Grafana === | |||
После того как мы создали источник данных — добавьте новый дашборд и создайте запрос на выборку данных: | |||
# Откройте веб-интерфейс Grafana. | |||
# Выберите на панели слева «плюсик» и пункт '''Dashboard'''. | |||
# В открывшейся странице '''New dashboard''', нажмите на плитку '''Add a empty panel'''. Откроется страница создания запроса. | |||
# В поле '''Data source''' выберите созданный ранее источник данных, у нас это '''InfluxDB'''. | |||
# В строке '''FROM''': | |||
#* укажите имя БД mqtt_data; | |||
#* выберите вид запрашиваемых данных, например, '''channel''' — это аналог MQTT-топика; | |||
#* теперь выберите, значение какого топика выводить, например, '''hwmon/Board Temperature'''. | |||
# Если мы хотим вывести числовые значение, то в строке '''SELECT''' выберите '''value_f''', получится ''field(value_f)''. Сразу после этого на панели сверху должен появиться график. | |||
# Задайте панели имя в поле '''Panel options''' → '''Title'''. | |||
# Сохраните дашборд, для этого нажмите кнопку '''Save''', в появившемся окне '''введите имя''' и нажмите кнопку '''Save'''. | |||
Настройка дашборда завершена. | |||
<syntaxhighlight lang=" | Запрос из примера в текстовом виде: | ||
<syntaxhighlight lang="SQL"> | |||
SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'hwmon/Board Temperature') AND $timeFilter GROUP BY time($__interval) fill(null) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<gallery widths=305px heights=200px perrow=3 > | |||
Image: Grafana - 2. Add Dashboard 0.png | Добавление нового дашборда | |||
Image: Grafana - 2. Add Dashboard 1.png | Добавление панели в дашборд | |||
Image: Grafana - 3. Construct Query 1.png | Выбор базы данных | |||
Image: Grafana - 3. Construct Query 2.png | Выбор вида данных | |||
Image: Grafana - 3. Construct Query 3.png | Выбор канала с данными | |||
Image: Grafana - 3. Construct Query 4.png | Выбор типа значения | |||
Image: Grafana - 4. Save Dashboard 0.png | Сохранение дашборда и панели | |||
Image: Grafana - 4. Save Dashboard 1.png | Ввод наименования дашборда | |||
Image: Grafana - 5. WB Dashboard.png | Созданный дашборд с панелью | |||
</gallery> | |||
== | == Установка Grafana в Docker == | ||
Видеоурок от пользователя Paul Strong. | |||
{{PeerTube | |||
| link= https://peertube.wirenboard.com/w/6BajjgACgd8vGssmZ4GQU6 | |||
| text= Визуализация значений из Wiren Board MQTT в Grafana | |||
| width=600 | |||
| nofloat=true | |||
}} | |||
== Полезные ссылки == | == Полезные ссылки == | ||
* [https://grafana.com/docs/grafana/latest/installation/debian Оригинальная инструкция установки Grafana в Debian] | * [https://grafana.com/docs/grafana/latest/installation/debian Оригинальная инструкция установки Grafana в Debian] | ||
* [https://docs.influxdata.com/telegraf/v1.19/introduction/installation/ Оригинальная инструкция по установке Telegraf]. | |||
* [https://habr.com/ru/post/516772/ Grafana+Zabbix: Визуализация работы производственной линии] |
Текущая версия на 08:37, 4 сентября 2024
Введение
Grafana — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов.
Grafana подходит для отображения изменяющихся со временем параметров — например, показаний датчиков, подключенных к контроллеру Wiren Board. Так как Grafana сама по себе не является базой данных, для хранения данных используются time series databases, такие как InfluxDB и Prometheus.
Grafana можно установить на собственный сервер, либо использовать облачный сервис Grafana Cloud.
Grafana Cloud
В состав Grafana Cloud уже есть база данных, поэтому отдельно устанавливать и настраивать базу данных не нужно.
Схема работы:
- На контроллер устанавливается клиент Telegraf
- Telegraf отправляет данные в базу данных Prometheus.
- Grafana отображает содержимое базы данных.
Регистрация в Grafana Cloud
- Зарегистрируйтесь в Grafana Cloud.
- Перейдите в настройки аккаунта по ссылке My Account.
- Найдите карточку Prometheus и нажмите кнопку Send Metrics.
- На открывшейся странице найдите и сохраните данные из полей:
- Query Endpoint
- Remote Write Endpoint
- Username / Instance ID
- Password / API Key, для генерации ключа нажмите Generate now.
Установка и настройка Telegraf
Telegraf — это сервис, который устанавливается на контроллер Wiren Board и отправляет данные в базу данных Grafana Cloud. Для выполнения команд, откройте консоль контроллера по SSH.
Установка:
- Установите дополнительные пакеты:
apt update && apt install apt-transport-https apt -y install gnupg
- Добавьте ключ репозитория Telegraf:
wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | apt-key add -
- Добавьте в список apt-репозиториев ссылку на репозиторий telegraf:
source /etc/os-release
- Здесь
bullseye
— версия ОС:echo "deb https://repos.influxdata.com/debian bullseye stable" | tee /etc/apt/sources.list.d/influxdb.list
- Обновите список пакетов и установите Telegraf:
apt update && apt install telegraf
- Включите автозапуск сервиса:
systemctl enable telegraf
Настройка:
- Откройте файл настроек Telegraf:
nano /etc/telegraf/telegraf.conf
- Секция inputs.mqtt_consumer, поля servers, topics, data_format и data_type:
[[inputs.mqtt_consumer]] ## Broker URLs for the MQTT server or cluster. To connect to multiple ## clusters or standalone servers, use a seperate plugin instance. ## example: servers = ["tcp://localhost:1883"] ## servers = ["ssl://localhost:1883"] ## servers = ["ws://localhost:1883"] servers = ["tcp://127.0.0.1:1883"] ## Topics that will be subscribed to. topics = [ "/devices/power_status/controls/Vin", ] ## The message topic will be stored in a tag specified by this value. If set ## to the empty string no topic tag will be created. # topic_tag = "topic" ## QoS policy for messages ## 0 = at most once ## 1 = at least once ## 2 = exactly once ## ## When using a QoS of 1 or 2, you should enable persistent_session to allow ## resuming unacknowledged messages. # qos = 0 ## Connection timeout for initial connection in seconds # connection_timeout = "30s" ## Maximum messages to read from the broker that have not been written by an ## output. For best throughput set based on the number of metrics within ## each message and the size of the output's metric_batch_size. ## ## For example, if each message from the queue contains 10 metrics and the ## output metric_batch_size is 1000, setting this to 100 will ensure that a ## full batch is collected and the write is triggered immediately without ## waiting until the next flush_interval. # max_undelivered_messages = 1000 ## Persistent session disables clearing of the client session on connection. ## In order for this option to work you must also set client_id to identify ## the client. To receive messages that arrived while the client is offline, ## also set the qos option to 1 or 2 and don't forget to also set the QoS when ## publishing. # persistent_session = false ## If unset, a random client ID will be generated. # client_id = "" ## Username and password to connect MQTT server. # username = "telegraf" # password = "metricsmetricsmetricsmetrics" ## Optional TLS Config # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false ## Data format to consume. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md data_format = "value" data_type = "float"
- Секция outputs.http, поля url, username, password, data_format и [outputs.http.headers]. Ссылку и логин с паролем мы сохраняли в разделе про регистрацию.
[[outputs.http]] ## URL is the address to send metrics to url = "https://prometheus-us-central1.grafana.net/api/prom/push" ## HTTP Basic Auth credentials username = "xxx" # Replace password = "yyy" # Replace ## Data format to output. data_format = "prometheusremotewrite" ## Additional HTTP headers [outputs.http.headers] Content-Type = "application/x-protobuf" Content-Encoding = "snappy" X-Prometheus-Remote-Write-Version = "0.1.0"
- Закомментируйте секцию outputs.influxdb:
# Configuration for sending metrics to InfluxDB # [[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] # urls = ["http://127.0.0.1:8086"] ## The target database for metrics; will be created as needed. ## For UDP url endpoint database needs to be configured on server side. # database = "telegraf" ## The value of this tag will be used to determine the database. If this ## tag is not set the 'database' option is used as the default. # database_tag = "" ## If true, the 'database_tag' will not be included in the written metric. # exclude_database_tag = false ## If true, no CREATE DATABASE queries will be sent. Set to true when using ## Telegraf with a user without permissions to create databases or when the ## database already exists. # skip_database_creation = false ## Name of existing retention policy to write to. Empty string writes to ## the default retention policy. Only takes effect when using HTTP. # retention_policy = "" ## The value of this tag will be used to determine the retention policy. If this ## tag is not set the 'retention_policy' option is used as the default. # retention_policy_tag = "" ## If true, the 'retention_policy_tag' will not be included in the written metric. # exclude_retention_policy_tag = false ## Write consistency (clusters only), can be: "any", "one", "quorum", "all". ## Only takes effect when using HTTP. # write_consistency = "any" ## Timeout for HTTP messages. # timeout = "5s" ## HTTP Basic Auth # username = "telegraf" # password = "metricsmetricsmetricsmetrics" ## HTTP User-Agent # user_agent = "telegraf" ## UDP payload size is the maximum packet size to send. # udp_payload = "512B" ## Optional TLS Config for use on HTTP connections. # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false ## HTTP Proxy override, if unset values the standard proxy environment ## variables are consulted to determine which proxy, if any, should be used. # http_proxy = "http://corporate.proxy:3128" ## Additional HTTP headers # http_headers = {"X-Special-Header" = "Special-Value"} ## HTTP Content-Encoding for write request body, can be set to "gzip" to ## compress body or "identity" to apply no encoding. # content_encoding = "gzip" ## When true, Telegraf will output unsigned integers as unsigned values, ## i.e.: "42u". You will need a version of InfluxDB supporting unsigned ## integer values. Enabling this option will result in field type errors if ## existing data has been written. # influx_uint_support = false
- Сохраните файл и закройте редактор.
Проверка работы:
- Остановите сервис:
systemctl stop telegraf
- Запустите сервис в режиме отладки и убедитесь, что данные отправляются:
# telegraf -debug 2021-11-29T16:47:13Z I! Starting Telegraf 1.20.4 2021-11-29T16:47:13Z I! Using config file: /etc/telegraf/telegraf.conf 2021-11-29T16:47:13Z I! Loaded inputs: cpu disk diskio kernel mem mqtt_consumer processes swap system 2021-11-29T16:47:13Z I! Loaded aggregators: 2021-11-29T16:47:13Z I! Loaded processors: 2021-11-29T16:47:13Z I! Loaded outputs: http 2021-11-29T16:47:13Z I! Tags enabled: host=wirenboard-AWQBNTYP 2021-11-29T16:47:13Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"wirenboard-AWQBNTYP", Flush Interval:10s 2021-11-29T16:47:13Z D! [agent] Initializing plugins 2021-11-29T16:47:13Z D! [agent] Connecting outputs 2021-11-29T16:47:13Z D! [agent] Attempting connection to [outputs.http] 2021-11-29T16:47:13Z D! [agent] Successfully connected to outputs.http 2021-11-29T16:47:13Z D! [agent] Starting service inputs 2021-11-29T16:47:13Z I! [inputs.mqtt_consumer] Connected [tcp://127.0.0.1:1883] 2021-11-29T16:47:24Z D! [outputs.http] Wrote batch of 31 metrics in 696.002545ms 2021-11-29T16:47:24Z D! [outputs.http] Buffer fullness: 1 / 10000 metrics 2021-11-29T16:47:33Z D! [outputs.http] Wrote batch of 34 metrics in 129.098071ms 2021-11-29T16:47:33Z D! [outputs.http] Buffer fullness: 0 / 10000 metrics
- Если ошибок нет, то остановите команду клавишами Ctrl+C.
- Запустите сервис в автоматическом режиме:
systemctl start telegraf
Настройка в Grafana источника данных
Чтобы Grafana могла отобразить данные из базы данных Prometheus, нужно в её веб-интерфейсе добавить источник данных:
- Откройте веб-интерфейс Grafana.
- Перейдите в настройки аккаунта по ссылке My Account.
- Найдите карточку Grafana и нажмите кнопку Log In.
- Слева на панели нажмите на «шестерёнку» и выберите пункт Data Sources.
- Откроется страница со списком источников данных, нажмите на кнопку Add data source.
- В открывшемся списке найдите Prometheus и нажмите кнопку Select.
- На странице создания нового источника данных заполните:
- Наименование, можно оставить по умолчанию.
- URL — ссылка, сохранённая на этапе регистрации из поля Query Endpoint (без push на конце)
- Auth — включите флажок Basic auth
- Basic Auth Details — заполните поля User и Password.
- Чтобы сохранить настройки, нажмите Save & Test, при успешном подключении появится сообщение Data source is working.
Если после сохранения настроек нет ошибок, то переходите к созданию дашборда.
Создание дашборда в Grafana
После того как мы создали источник данных — добавьте новый дашборд и создайте запрос на выборку данных:
- Откройте веб-интерфейс Grafana.
- Перейдите в настройки аккаунта по ссылке My Account.
- Найдите карточку Grafana и нажмите кнопку Log In.
- Выберите на панели слева «плюсик» и пункт Dashboard.
- В открывшейся странице New dashboard, нажмите на плитку Add a empty panel. Откроется страница создания запроса.
- В поле Data source выберите созданный ранее источник данных.
- В строке A → Metrics browser:
- в группе 2. Select labels to search in выберите topic;
- в группе 3. Select values for your labels выберите топик, который мы отправили с контроллера;
- Нажмите кнопку Use query. Сразу после этого на панели сверху должен появиться график.
- Задайте панели имя в поле Panel options → Title.
- Сохраните дашборд, для этого нажмите кнопку Save, в появившемся окне введите имя и нажмите кнопку Save.
Настройка дашборда завершена.
Запрос из примера в текстовом виде:
{topic="/devices/power_status/controls/Vin"}
Свой сервер Grafana
Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board.
Схема работы:
- Один или несколько контроллеров передают значения MQTT топиков в MQTT-брокер, установленный на сервере Grafana.
- На сервере Grafana выполняется скрипт, который записывает MQTT-топики брокера в базу данных Influx.
- Grafana отображает содержимое базы данных Influx.
Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. Если вы используете два разных сервера, то IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена Grafana.
Установка Grafana
В примере мы установим Grafana на сервер с Debian Linux 11.
Подготовьте сервер к установке:
- Установите пакеты:
sudo apt install -y apt-transport-https software-properties-common wget gnupg2 sudo python3-pip
- Добавьте ключ репозитория
packages.grafana.com
:wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
- Добавьте ссылку на репозиторий
packages.grafana.com
:echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
- Обновите список пакетов:
sudo apt update
Если во время установки Grafana по инструкции выше возникнет ошибка gpg: no valid OpenPGP data found
— установите Grafana в docker. Причина описана тут: Can’t download grafana 9.0.2 from russia. Остальные пакеты ставятся как обычно — просто следуйте инструкции.
Установите необходимое ПО:
- grafana, python3 и БД influxdb:
sudo apt install -y grafana influxdb influxdb-client python3-pip
- и дополнительные модули python:
sudo pip3 install paho-mqtt python-etcd influxdb
Разрешите автозапуск сервиса и запустите его:
sudo systemctl enable grafana-server && sudo systemctl start grafana-server
Проверьте статус сервиса:
$ systemctl status grafana-server
● grafana-server.service - Grafana instance
Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-25 13:56:19 +04; 2min 33s ago
Docs: http://docs.grafana.org
Main PID: 3237 (grafana-server)
Tasks: 9 (limit: 4663)
Memory: 35.2M
CPU: 1.371s
Если статус Active: active (running)
— переходите к следующим шагам.
Создайте базу данных Influxdb с именем mqtt_data:
$ echo "CREATE DATABASE mqtt_data; show databases;" | influx
name: databases
name
----
_internal
mqtt_data
Перейдите в веб-интерфейс Grafana:
- Откройте браузер и введите в адресную строку
http://192.168.2.36:3000
, где 192.168.2.36 — IP-адрес вашего сервера с Grafana. - Введите логин/пароль admin/admin. После первого входа задайте новый пароль.
Если вы забыли введённый пароль, то его можно сбросить:
- Подключитесь к контроллеру по SSH.
- Введите команду:
grafana-cli --homepath "/usr/share/grafana/" admin reset-admin-password admin
- Перезапустите сервис:
systemctl restart grafana-server
- После этого зайдите в веб-интерфейс Grafana и создайте новый пароль.
Установка MQTT-брокера
Теперь настроим MQTT-брокер, куда контроллер Wiren Board будет отправлять данные.
Установите на сервер с Grafana mosquitto по инструкции Установка брокера.
Настройка моста на контроллере
Настройте на контроллере Wiren Board подключение к внешнему MQTT-брокеру:
- Подключитесь к контроллеру по SSH.
- Создайте файл конфигурации
bridge1.conf
:nano /etc/mosquitto/conf.d/bridge1.conf
- Вставьте в него строки, в которых замените в двух местах AWQBNTYP на серийный номер контроллера, а 192.168.2.36 на IP-адрес брокера:
connection bridge1 #address of server address 192.168.2.36 notifications true notification_topic /client/AWQBNTYP/bridge1_status remote_username test remote_password wbpassword topic /hwmon/# both 2 /devices /client/AWQBNTYP/devices
- в конфигурации выше мы отправляем в MQTT-брокер все подтопики устройства hwmon, чтобы передать все топики контроллера, замените путь
/hwmon/#
на/#
- Сохраните изменения и закройте файл.
- Перезапустите mosquitto:
systemctl restart mosquitto
Теперь проверим, что контроллер отправляет данные во внешний MQTT-брокер:
- Выполните в консоли контроллера команду, в которой замените 192.168.2.36 на IP-адрес брокера, AWQBNTYP на серийный номер контроллера, а test и wbpassword на логин и пароль от MQTT-брокера:
# mosquitto_sub -v -h 192.168.2.36 -u test -P wbpassword -t /client/AWQBNTYP/devices/# /client/AWQBNTYP/devices/hwmon/meta/driver wb-rules /client/AWQBNTYP/devices/hwmon/meta/name HW Monitor /client/AWQBNTYP/devices/hwmon/controls/Board Temperature 35.875 /client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/type temperature /client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/order 1 /client/AWQBNTYP/devices/hwmon/controls/Board Temperature/meta/readonly 1 /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature 66.917 /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/type temperature /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/order 2 /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature/meta/readonly 1 /client/AWQBNTYP/devices/hwmon/controls/CPU Temperature 66.917 /client/AWQBNTYP/devices/hwmon/controls/Board Temperature 35.875
- Если после выполнения команды вы получите список топиков — контролер успешно отправляет данные во внешний брокер.
- Завершите команду клавишами Ctrl+C.
Скрипт на сервере Grafana
Теперь скачаем на сервер с Grafana скрипт, который будет отправлять данные из MQTT-брокера в базу данных Influx:
- Перейдите на сервере в папку
/usr/local/bin
cd /usr/local/bin
- Скачайте в эту папку скрипт:
sudo wget https://raw.githubusercontent.com/wirenboard/wbmqtt2influx/master/mqtt_to_influxdb.py
- Разрешите выполнение скрипта командой:
sudo chmod +x mqtt_to_influxdb.py
- Создайте сервис, который будет автоматически запускать скрипт:
sudo systemctl edit --force --full mqtt_to_influxdb.service
- В открывшийся редактор вставьте строки, в которых замените test и wbpassword на логин и пароль от MQTT-брокера.:
[Unit] Description=Mqtt to Influxdb script After=multi-user.target Requires=influxd.service [Service] Type=idle User=mosquitto ExecStart=/usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost "/#" -u "test" -P "wbpassword" Restart=always TimeoutStartSec=10 RestartSec=10 [Install] WantedBy=multi-user.target
- Если MQTT-брокер стоит на отдельном от Grafana сервере, укажите его IP-адрес вместо localhost.
- Сохраните файл, для этого нажмите клавиши Ctrl+O, затем Enter и Ctrl+X.
- Настройте автозапуск и запустите сервис:
sudo systemctl enable mqtt_to_influxdb.service && sudo systemctl start mqtt_to_influxdb.service
- Проверьте статус сервиса:
$ systemctl status mqtt_to_influxdb.service ● mqtt_to_influxdb.service - Mqtt to Influxdb script Loaded: loaded (/etc/systemd/system/mqtt_to_influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-11-25 21:38:32 +04; 4s ago Main PID: 5440 (python3) Tasks: 2 (limit: 4663) Memory: 17.1M CPU: 206ms CGroup: /system.slice/mqtt_to_influxdb.service └─5440 /usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost /# -u test -P wbpassword
- Если в выводе команды есть строчка
Active: active (running)
— сервис создан и настроен верно.
Теперь проверьте, записывается ли что-то в influxDB. Для этого выполните на сервере команду:
$ influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 10' name: mqtt_data time channel client value_f ---- ------- ------ ------- 1637861917526049562 hwmon/CPU Temperature AWQBNTYP 67.516 1637861917615599448 hwmon/Board Temperature AWQBNTYP 35.875 1637861927519510484 hwmon/CPU Temperature AWQBNTYP 66.917 1637861927586856127 hwmon/Board Temperature AWQBNTYP 35.875 1637861937592362349 hwmon/Board Temperature AWQBNTYP 35.875 1637861937592362349 hwmon/CPU Temperature AWQBNTYP 66.917 1637861947498698295 hwmon/CPU Temperature AWQBNTYP 67.516 1637861947570297085 hwmon/Board Temperature AWQBNTYP 35.875 1637861957523243600 hwmon/CPU Temperature AWQBNTYP 66.917 1637861957593339293 hwmon/Board Temperature AWQBNTYP 35.875
- если в выводе команды есть информация с топиков — можно переходить к настройке Grafana через веб-интерфейс.
Настройка в Grafana источника данных
Чтобы Grafana могла отобразить данные из базы данных Influx, нужно в её веб-интерфейсе добавить источник данных:
- Откройте веб-интерфейс Grafana.
- Слева на панели нажмите на «шестерёнку» и выберите пункт Data Sources.
- Откроется страница со списком источников данных, который у нас будет пуст. Нажмите на кнопку Add data source.
- В открывшемся списке найдите InfluxDB и нажмите кнопку Select.
- На странице создания нового источника данных заполните:
- Наименование, можно оставить по умолчанию.
- URL — http://localhost:8086
- Database — mqtt_data
- Чтобы сохранить настройки, нажмите Save & Test, при успешном подключении появится сообщение Data source is working.
Если после сохранения настроек нет ошибок, то переходите к созданию дашборда.
Создание дашборда в Grafana
После того как мы создали источник данных — добавьте новый дашборд и создайте запрос на выборку данных:
- Откройте веб-интерфейс Grafana.
- Выберите на панели слева «плюсик» и пункт Dashboard.
- В открывшейся странице New dashboard, нажмите на плитку Add a empty panel. Откроется страница создания запроса.
- В поле Data source выберите созданный ранее источник данных, у нас это InfluxDB.
- В строке FROM:
- укажите имя БД mqtt_data;
- выберите вид запрашиваемых данных, например, channel — это аналог MQTT-топика;
- теперь выберите, значение какого топика выводить, например, hwmon/Board Temperature.
- Если мы хотим вывести числовые значение, то в строке SELECT выберите value_f, получится field(value_f). Сразу после этого на панели сверху должен появиться график.
- Задайте панели имя в поле Panel options → Title.
- Сохраните дашборд, для этого нажмите кнопку Save, в появившемся окне введите имя и нажмите кнопку Save.
Настройка дашборда завершена.
Запрос из примера в текстовом виде:
SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'hwmon/Board Temperature') AND $timeFilter GROUP BY time($__interval) fill(null)
Установка Grafana в Docker
Видеоурок от пользователя Paul Strong.