Grafana: различия между версиями
(не показаны 63 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
{{ | {{Draft}} | ||
== Введение == | == Введение == | ||
'''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. | '''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. | ||
Строка 9: | Строка 8: | ||
== Grafana Cloud == | == Grafana Cloud == | ||
В состав Grafana Cloud входит собственная база данных, поэтому устанавливать и настраивать базу данных не требуется. | |||
Показания с контроллера Wiren Board будут передаваться по схеме: | |||
MQTT-брокер на контроллере Wiren Board -> [https://www.influxdata.com/time-series-platform/telegraf/ клиент Telegraf] на контроллере Wiren Board -> Grafana Cloud. | |||
=== Регистрация в Grafana Cloud === | === Регистрация в Grafana Cloud === | ||
# Зарегистрируйтесь | # Зарегистрируйтесь по ссылке [https://grafana.com/auth/sign-up/create-user]. | ||
=== Установка и настройка Telegraf на контроллер Wiren Board === | |||
# Установите и запустите Telegraf в соответствии с [https://docs.influxdata.com/telegraf/v1.19/introduction/installation/ https://docs.influxdata.com/telegraf/v1.19/introduction/installation/]: | |||
#: <syntaxhighlight lang="bash"> | |||
#:<syntaxhighlight lang="bash"> | |||
apt update && apt install apt-transport-https | apt update && apt install apt-transport-https | ||
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - | |||
source /etc/os-release | |||
test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list | |||
test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list | |||
wget -qO- https://repos.influxdata.com/ | test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list | ||
test $VERSION_ID = "10" && echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list | |||
echo "deb https://repos.influxdata.com/debian | |||
apt update && apt install telegraf | apt update && apt install telegraf | ||
systemctl start telegraf | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Добавьте в <code>/etc/telegraf/telegraf.conf</code> секции для получения данных из MQTT и отправки данных в Grafana Cloud. В секции отправки данных замените логин и пароль на указанные на странице [https://grafana.com/orgs/wiren https://grafana.com/orgs/wiren] в разделе Prometheus - Send metrics. | ||
</ | |||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
[[inputs.mqtt_consumer]] | [[inputs.mqtt_consumer]] | ||
Строка 136: | Строка 101: | ||
data_type = "float" | data_type = "float" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#: <syntaxhighlight lang="bash"> | |||
#:<syntaxhighlight lang="bash"> | |||
[[outputs.http]] | [[outputs.http]] | ||
## URL is the address to send metrics to | ## URL is the address to send metrics to | ||
Строка 155: | Строка 119: | ||
X-Prometheus-Remote-Write-Version = "0.1.0" | X-Prometheus-Remote-Write-Version = "0.1.0" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Проверьте, что Telegraf работает без ошибок. | ||
## Остановите его и запустите вручную:<syntaxhighlight lang="bash"> | |||
systemctl stop telegraf | systemctl stop telegraf | ||
telegraf -debug | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | ##Если ошибок нет, запустите Telegraf:<syntaxhighlight lang="bash"> | ||
# Если ошибок нет, | |||
systemctl start telegraf | systemctl start telegraf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Создание панели с данными от контроллера Wiren Board в Grafana === | |||
=== Создание | |||
== Свой сервер Grafana == | == Свой сервер Grafana == | ||
Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board. | Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board. | ||
Строка 339: | Строка 138: | ||
* Grafana отображает содержимое базы данных Influx. | * Grafana отображает содержимое базы данных Influx. | ||
Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. | Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. При использовании двух серверов IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена 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. | ||
Строка 362: | Строка 161: | ||
sudo apt update | sudo apt update | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Установите необходимое ПО: | Установите необходимое ПО: | ||
Строка 370: | Строка 167: | ||
sudo apt install -y grafana influxdb influxdb-client python3-pip | sudo apt install -y grafana influxdb influxdb-client python3-pip | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# и дополнительные | # и дополнительные скрипты | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
pip3 install paho-mqtt python-etcd | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 410: | Строка 207: | ||
# Введите логин/пароль '''admin'''/'''admin'''. После первого входа задайте новый пароль. | # Введите логин/пароль '''admin'''/'''admin'''. После первого входа задайте новый пароль. | ||
=== MQTT-брокер === | |||
Выполняем на сервере Grafanа (или на отдельном): [[MQTT#Создание своего брокера MQTT]] | |||
И настраиваем bridge (мост) между брокером контроллера и только что установленным: [[MQTT#Настройка моста на контроллере]] | |||
# | |||
= | Для теста создаем такую конфигурацию моста: | ||
<syntaxhighlight lang="bash"> | |||
cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf | |||
connection bridge1 | |||
#address of server | |||
address 10.0.0.105 | |||
notifications true | |||
notification_topic /client/ACAX3M6K/bridge1_status | |||
remote_username test | |||
remote_password test11test | |||
topic /wb-msw-v3_98/# both 2 /devices /client/ACAX3M6K/devices | |||
EOFcommand | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Для того чтобы отправить в influx '''все''' топики контроллера надо сделать | |||
<syntaxhighlight lang="bash"> | |||
cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf | |||
connection bridge1 | connection bridge1 | ||
#address of server | #address of server | ||
address | address 10.0.0.105 | ||
notifications true | notifications true | ||
notification_topic /client/ | notification_topic /client/ACAX3M6K/bridge1_status | ||
remote_username test | remote_username test | ||
remote_password | remote_password test11test | ||
topic | topic /# both 2 /devices /client/ACAX3M6K/devices | ||
EOFcommand | |||
</syntaxhighlight> | </syntaxhighlight> | ||
''Замените параметры (адрес, топик) на свои'' | |||
Перезапускаем mosquitto на контроллере | |||
<syntaxhighlight lang="bash"> | |||
systemctl restart mosquitto | systemctl restart mosquitto | ||
</syntaxhighlight> | </syntaxhighlight> | ||
И для проверки подписываемся на топик '''на сервере''' | |||
<syntaxhighlight lang="bash"> | |||
mosquitto_sub -v -h 10.0.0.105 -u test -P test11test -t /ontrollerACAX3M6K/wb-msw-v3_98/# | |||
/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Если данные идут, как на скриншоте — все сделано верно. | |||
[[ | [[Файл:Gragana_bridge_data_1.png|800px|thumb|none|Вход в настройку источника данных]] | ||
Скачиваем на сервере скрипт | |||
cd /usr/local/bin | <syntaxhighlight lang="bash"> | ||
cd /usr/local/bin && wget https://raw.githubusercontent.com/wirenboard/wbmqtt2influx/master/mqtt_to_influxdb.py | |||
</syntaxhighlight> | </syntaxhighlight> | ||
И настраиваем его автоматический запуск, создавая сервис | |||
<syntaxhighlight lang="bash"> | |||
systemctl edit --force --full mqtt_to_influxdb.service | |||
</syntaxhighlight> | </syntaxhighlight> | ||
В редактор вставляем: | |||
<syntaxhighlight lang="bash"> | |||
[Unit] | [Unit] | ||
Description=Mqtt to Influxdb script | Description=Mqtt to Influxdb script | ||
Строка 502: | Строка 280: | ||
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 "test11test" | ||
Restart=always | Restart=always | ||
TimeoutStartSec=10 | TimeoutStartSec=10 | ||
Строка 509: | Строка 287: | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Сохраняем файл. | |||
Настраиваем автозапуск, запускаем и проверяем статус: | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable mqtt_to_influxdb.service && systemctl start mqtt_to_influxdb.service && systemctl status mqtt_to_influxdb.service | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Проверяем, записывается ли что-то в influxDB. Для этого выполняем на сервере | |||
<syntaxhighlight lang="bash"> | |||
influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 20' | |||
</syntaxhighlight> | </syntaxhighlight> | ||
если запрос не пустой — в базу данных что-то уже записывается. То есть — работает. | |||
=== Настройка в Grafana источника данных === | === Настройка в Grafana источника данных === | ||
В веб-интерфейсе Grafana в левом меню выбираем «шестеренку» ('''Configuration''') и в выпадающем меню - '''Data sources''' | |||
[[Файл:Gragana_datasources_1.png|800px|thumb|none|Вход в настройку источника данных]] | |||
По нажатию самой большой кнопки в центре | |||
[[Файл:Gragana_datasources_2.png|800px|thumb|none|Add data source]] | |||
переходим к выбору типа БД | |||
[[Файл:Gragana_datasources_3.png|800px|thumb|none|Influx как источник]] | |||
Нужно заполнить следующие поля <br> | |||
'''Name''' - можно оставить по умолчанию <br> | |||
'''URL''' - http://localhost:8086 <br> | |||
'''Database''' - указываем имя базы, созданной выше, ''mqtt_data'' <br> | |||
и после нажатия кнопки '''Save & test''' выводится ''Data source is working'' - значит БД подключена успешно. | |||
[[Файл:Gragana_datasources_4.png|800px|thumb|none|сохранить и проверить]] | |||
< | |||
=== Grafana - создание dashboard === | |||
Запрос можно оформить так (для примера, данные без разделения по тегам) | |||
[[Файл:Gragana_dashboard_1.png|800px|thumb|none|настройка дашборда]] | |||
Или в RAW виде: | |||
SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'controllerACAX3M6K/wb-msw-v3_98') AND $timeFilter GROUP BY time($__interval) fill(null) | |||
== Полезные ссылки == | == Полезные ссылки == | ||
* [https://grafana.com/docs/grafana/latest/installation/debian Оригинальная инструкция установки Grafana в Debian] | * [https://grafana.com/docs/grafana/latest/installation/debian Оригинальная инструкция установки Grafana в Debian] | ||
Версия 18:53, 25 ноября 2021
Это черновик страницы. Последняя правка сделана 25.11.2021 пользователем A.Degtyarev.
Введение
Grafana — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов.
Grafana подходит для отображения изменяющихся со временем параметров — например, показаний датчиков, подключенных к контроллеру Wiren Board. Так как Grafana сама по себе не является базой данных, для хранения данных используются time series databases, такие как InfluxDB и Prometheus.
Grafana можно установить на собственный сервер, либо использовать облачный сервис Grafana Cloud.
Grafana Cloud
В состав Grafana Cloud входит собственная база данных, поэтому устанавливать и настраивать базу данных не требуется.
Показания с контроллера Wiren Board будут передаваться по схеме:
MQTT-брокер на контроллере Wiren Board -> клиент Telegraf на контроллере Wiren Board -> Grafana Cloud.
Регистрация в Grafana Cloud
- Зарегистрируйтесь по ссылке [1].
Установка и настройка Telegraf на контроллер Wiren Board
- Установите и запустите Telegraf в соответствии с https://docs.influxdata.com/telegraf/v1.19/introduction/installation/:
apt update && apt install apt-transport-https wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - source /etc/os-release test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "10" && echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list apt update && apt install telegraf systemctl start telegraf
- Добавьте в
/etc/telegraf/telegraf.conf
секции для получения данных из MQTT и отправки данных в Grafana Cloud. В секции отправки данных замените логин и пароль на указанные на странице https://grafana.com/orgs/wiren в разделе Prometheus - Send metrics.[[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 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"
- Проверьте, что Telegraf работает без ошибок.
- Остановите его и запустите вручную:
systemctl stop telegraf telegraf -debug
- Если ошибок нет, запустите Telegraf:
systemctl start telegraf
- Остановите его и запустите вручную:
Создание панели с данными от контроллера Wiren Board в Grafana
Свой сервер 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, python3 и БД influxdb:
sudo apt install -y grafana influxdb influxdb-client python3-pip
- и дополнительные скрипты
pip3 install paho-mqtt python-etcd
Разрешите автозапуск сервиса и запустите его:
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. После первого входа задайте новый пароль.
MQTT-брокер
Выполняем на сервере Grafanа (или на отдельном): MQTT#Создание своего брокера MQTT И настраиваем bridge (мост) между брокером контроллера и только что установленным: MQTT#Настройка моста на контроллере
Для теста создаем такую конфигурацию моста:
cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf
connection bridge1
#address of server
address 10.0.0.105
notifications true
notification_topic /client/ACAX3M6K/bridge1_status
remote_username test
remote_password test11test
topic /wb-msw-v3_98/# both 2 /devices /client/ACAX3M6K/devices
EOFcommand
Для того чтобы отправить в influx все топики контроллера надо сделать
cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf
connection bridge1
#address of server
address 10.0.0.105
notifications true
notification_topic /client/ACAX3M6K/bridge1_status
remote_username test
remote_password test11test
topic /# both 2 /devices /client/ACAX3M6K/devices
EOFcommand
Замените параметры (адрес, топик) на свои
Перезапускаем mosquitto на контроллере
systemctl restart mosquitto
И для проверки подписываемся на топик на сервере
mosquitto_sub -v -h 10.0.0.105 -u test -P test11test -t /ontrollerACAX3M6K/wb-msw-v3_98/#
Если данные идут, как на скриншоте — все сделано верно.
Скачиваем на сервере скрипт
cd /usr/local/bin && wget https://raw.githubusercontent.com/wirenboard/wbmqtt2influx/master/mqtt_to_influxdb.py
И настраиваем его автоматический запуск, создавая сервис
systemctl edit --force --full mqtt_to_influxdb.service
В редактор вставляем:
[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 "test11test"
Restart=always
TimeoutStartSec=10
RestartSec=10
[Install]
WantedBy=multi-user.target
Сохраняем файл. Настраиваем автозапуск, запускаем и проверяем статус:
systemctl enable mqtt_to_influxdb.service && systemctl start mqtt_to_influxdb.service && systemctl status mqtt_to_influxdb.service
Проверяем, записывается ли что-то в influxDB. Для этого выполняем на сервере
influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 20'
если запрос не пустой — в базу данных что-то уже записывается. То есть — работает.
Настройка в Grafana источника данных
В веб-интерфейсе Grafana в левом меню выбираем «шестеренку» (Configuration) и в выпадающем меню - Data sources
По нажатию самой большой кнопки в центре
переходим к выбору типа БД
Нужно заполнить следующие поля
Name - можно оставить по умолчанию
URL - http://localhost:8086
Database - указываем имя базы, созданной выше, mqtt_data
и после нажатия кнопки Save & test выводится Data source is working - значит БД подключена успешно.
Grafana - создание dashboard
Запрос можно оформить так (для примера, данные без разделения по тегам)
Или в RAW виде: SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'controllerACAX3M6K/wb-msw-v3_98') AND $timeFilter GROUP BY time($__interval) fill(null)