|
|
(не показано 67 промежуточных версий 4 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE: Использование Grafana с контроллером Wiren Board }} | | {{Draft}} |
| [[Image: Grafana Dash Demo.png |600px|thumb|right| Пример дашборда в Grafana: выходной контроль устройств у нас на производстве ]]
| |
| == Введение == | | == Введение == |
| '''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. | | '''Grafana''' — мультиплатформенное веб-приложение с открытым кодом, отображающее данные в виде графиков, диаграмм, индикаторов, а также другими способами. Конечные пользователи могут создавать сложные панели мониторинга с помощью интерактивного конструктора запросов. Умеет отправлять оповещения (alert). Расширяется с помощью системы плагинов. |
Строка 9: |
Строка 8: |
|
| |
|
| == Grafana Cloud == | | == Grafana Cloud == |
| [[Image: Grafana Cloud.png |600px|thumb|right| Схема обмена данными при использовании Grafana Cloud]]
| |
| В состав Grafana Cloud уже есть база данных, поэтому отдельно устанавливать и настраивать базу данных не нужно.
| |
|
| |
|
| Схема работы:
| | В состав Grafana Cloud входит собственная база данных, поэтому устанавливать и настраивать базу данных не требуется. |
| * На контроллер устанавливается [https://www.influxdata.com/time-series-platform/telegraf/ клиент Telegraf]
| | |
| * Telegraf отправляет данные в базу данных Prometheus.
| | Показания с контроллера Wiren Board будут передаваться по схеме: |
| * Grafana отображает содержимое базы данных.
| | |
| | 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 Grafana Cloud]. | | # Зарегистрируйтесь по ссылке [https://grafana.com/auth/sign-up/create-user]. |
| # Перейдите в настройки аккаунта по ссылке '''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>
| | === Установка и настройка Telegraf на контроллер Wiren Board === |
| Image: Grafana Cloud Site 1.png | Настройки Grafana Cloud
| |
| Image: Grafana Cloud Site 2.png | Данные, которые нужно сохранить
| |
| </gallery>
| |
|
| |
|
| === Установка и настройка Telegraf ===
| | # Установите и запустите Telegraf в соответствии с [https://docs.influxdata.com/telegraf/v1.19/introduction/installation/ https://docs.influxdata.com/telegraf/v1.19/introduction/installation/]: |
| Telegraf — это сервис, который устанавливается на контроллер Wiren Board и отправляет данные в базу данных Grafana Cloud. Для выполнения команд, откройте консоль контроллера по [[SSH]].
| | #: <syntaxhighlight lang="bash"> |
| | |
| Установка:
| |
| # Установите дополнительные пакеты:
| |
| #:<syntaxhighlight lang="bash"> | |
| apt update && apt install apt-transport-https | | apt update && apt install apt-transport-https |
| apt -y install gnupg
| | wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - |
| </syntaxhighlight>
| | source /etc/os-release |
| # Добавьте ключ репозитория Telegraf:
| | test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list |
| #:<syntaxhighlight lang="bash">
| | 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/influxdata-archive_compat.key | apt-key add - | | test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list |
| </syntaxhighlight>
| | test $VERSION_ID = "10" && echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list |
| # Добавьте в список 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 | | 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">
| |
| systemctl enable telegraf
| |
| </syntaxhighlight>
| |
| | |
| Настройка:
| |
| # Откройте файл настроек Telegraf:
| |
| #: <syntaxhighlight lang="bash">
| |
| nano /etc/telegraf/telegraf.conf
| |
| </syntaxhighlight> | |
| # Секция '''inputs.mqtt_consumer''', поля ''servers'', ''topics'', ''data_format'' и ''data_type'':
| |
| #: <syntaxhighlight lang="bash"> | | #: <syntaxhighlight lang="bash"> |
| [[inputs.mqtt_consumer]] | | [[inputs.mqtt_consumer]] |
Строка 136: |
Строка 101: |
| data_type = "float" | | data_type = "float" |
| </syntaxhighlight> | | </syntaxhighlight> |
| # Секция '''outputs.http''', поля ''url'', ''username'', ''password'', ''data_format'' и ''[outputs.http.headers]''. Ссылку и логин с паролем мы сохраняли в разделе про регистрацию.
| | #: <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> |
| # Закомментируйте секцию '''outputs.influxdb''': | | # Проверьте, что Telegraf работает без ошибок. |
| #:<syntaxhighlight lang="bash">
| | ## Остановите его и запустите вручную:<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 |
| | telegraf -debug |
| </syntaxhighlight> | | </syntaxhighlight> |
| # Запустите сервис в режиме отладки и убедитесь, что данные отправляются: | | ##Если ошибок нет, запустите Telegraf:<syntaxhighlight lang="bash"> |
| #:<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 источника данных ===
| | === Создание панели с данными от контроллера Wiren Board в 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. |
|
| |
|
Строка 339: |
Строка 138: |
| * Grafana отображает содержимое базы данных Influx. | | * Grafana отображает содержимое базы данных Influx. |
|
| |
|
| Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. Если вы используете два разных сервера, то IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена Grafana. | | Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. При использовании двух серверов IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена Grafana. |
|
| |
|
| === Установка Grafana === | | === Подготовка к установке === |
| [[Файл:Gragana_login_1.png|400px|thumb|right|Страница входа в веб-интерфейс Grafana]]
| | Используем чистый Debian, |
| В примере мы установим Grafana на сервер с Debian Linux 11.
| | Добавляем пакеты, ключи |
|
| |
|
| Подготовьте сервер к установке:
| | <syntaxhighlight lang="bash"> |
| #Установите пакеты:
| | apt install -y apt-transport-https software-properties-common wget gnupg2 sudo python3-pip |
| #:<syntaxhighlight lang="bash">
| |
| sudo apt install -y apt-transport-https software-properties-common wget gnupg2 sudo python3-pip
| |
| </syntaxhighlight>
| |
| #Добавьте ключ репозитория <code>packages.grafana.com</code>:
| |
| #:<syntaxhighlight lang="bash">
| |
| wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - | | wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - |
| </syntaxhighlight>
| |
| #Добавьте ссылку на репозиторий <code>packages.grafana.com</code>:
| |
| #:<syntaxhighlight lang="bash">
| |
| echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list | | echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list |
| </syntaxhighlight>
| | apt update |
| #Обновите список пакетов:
| |
| #:<syntaxhighlight lang="bash">
| |
| 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]. Остальные пакеты ставятся как обычно — просто следуйте инструкции.
| | === Установка === |
| | | Ставим grafana, python3 и БД influxdb: |
| Установите необходимое ПО:
| | <syntaxhighlight lang="bash"> |
| #grafana, python3 и БД influxdb:
| | apt install -y grafana influxdb influxdb-client python3-pip |
| #:<syntaxhighlight lang="bash">
| | pip3 install paho-mqtt python-etcd |
| sudo apt install -y grafana influxdb influxdb-client python3-pip
| |
| </syntaxhighlight>
| |
| # и дополнительные модули python:
| |
| #:<syntaxhighlight lang="bash">
| |
| sudo pip3 install paho-mqtt python-etcd influxdb
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Разрешите автозапуск сервиса и запустите его:
| | Разрешаем автозапуск, запускаем и проверяем: |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo systemctl enable grafana-server && sudo systemctl start grafana-server
| | apt install -y grafana |
| | systemctl enable grafana-server && systemctl start grafana-server |
| | systemctl status grafana-server |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Проверьте статус сервиса:
| | Если статус "Active: active (running)" - то дальнейшая настройка Grafana -через веб интерфейс. |
| <syntaxhighlight lang="console" highlight="4">
| | |
| $ systemctl status grafana-server
| | ==== influxdb ==== |
| ● grafana-server.service - Grafana instance
| | Создаем базу данных с именем '''mqtt_data''' |
| Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
| | <syntaxhighlight lang="bash"> |
| Active: active (running) since Thu 2021-11-25 13:56:19 +04; 2min 33s ago
| | echo "CREATE DATABASE mqtt_data; show databases;" | influx |
| Docs: http://docs.grafana.org
| |
| Main PID: 3237 (grafana-server)
| |
| Tasks: 9 (limit: 4663)
| |
| Memory: 35.2M
| |
| CPU: 1.371s
| |
| </syntaxhighlight> | | </syntaxhighlight> |
| | [[Файл:influx_create_db.png|200px|thumb|right|Создание БД]] |
|
| |
|
| Если статус <code>Active: active (running)</code> — переходите к следующим шагам.
| | ==== grafana ==== |
| | Открываем в браузере http://<serverIP>:3000/ |
| | [[Файл:Gragana_login_1.png|200px|thumb|right|страница входа]] |
| | Логин и пароль по умолчанию '''admin admin'''. |
| | Сразу меняем пароль. |
|
| |
|
| Создайте базу данных Influxdb с именем '''mqtt_data''':
| | === Брокер === |
| <syntaxhighlight lang="console">
| | Выполняем на сервере Grafanа (или на отдельном): [[MQTT#Создание своего брокера MQTT]] |
| $ echo "CREATE DATABASE mqtt_data; show databases;" | influx
| | И настраиваем bridge (мост) между брокером контроллера и только что установленным: [[MQTT#Настройка моста на контроллере]] |
|
| |
|
| name: databases
| | Для теста создаем такую конфигурацию моста: |
| name
| | <syntaxhighlight lang="bash"> |
| ----
| | cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf |
| _internal
| | connection bridge1 |
| mqtt_data
| | #address of server |
| </syntaxhighlight>
| | 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 |
|
| |
|
| Перейдите в веб-интерфейс Grafana:
| | EOFcommand |
| # Откройте браузер и введите в адресную строку <code>http://192.168.2.36:3000</code>, где '''192.168.2.36''' — IP-адрес вашего сервера с Grafana.
| |
| # Введите логин/пароль '''admin'''/'''admin'''. После первого входа задайте новый пароль.
| |
|
| |
|
| Если вы забыли введённый пароль, то его можно сбросить:
| |
| # Подключитесь к контроллеру по [[SSH]].
| |
| # Введите команду:
| |
| #: <syntaxhighlight lang="bash">
| |
| grafana-cli --homepath "/usr/share/grafana/" admin reset-admin-password admin
| |
| </syntaxhighlight> | | </syntaxhighlight> |
| # Перезапустите сервис:
| |
| #:<syntaxhighlight lang="bash">
| |
| systemctl restart grafana-server
| |
| </syntaxhighlight>
| |
| # После этого зайдите в веб-интерфейс Grafana и создайте новый пароль.
| |
|
| |
|
| === Установка MQTT-брокера ===
| | Для того чтобы отправить в influx '''все''' топики контроллера надо сделать |
| Теперь настроим MQTT-брокер, куда контроллер Wiren Board будет отправлять данные.
| | <syntaxhighlight lang="bash"> |
| | | cat << EOFcommand > /etc/mosquitto/conf.d/bridge1.conf |
| Установите на сервер с Grafana '''mosquitto''' по инструкции [[MQTT#Установка брокера | Установка брокера]].
| |
| | |
| === Настройка моста на контроллере ===
| |
| [[Image: Wiren Board Controller Bridge.png |500px|thumb|right| Файл конфигурации MQTT-моста]]
| |
| Настройте на контроллере Wiren Board подключение к внешнему MQTT-брокеру:
| |
| # Подключитесь к контроллеру по [[SSH]].
| |
| # Создайте файл конфигурации <code>bridge1.conf</code>:
| |
| #: <syntaxhighlight lang="bash">
| |
| nano /etc/mosquitto/conf.d/bridge1.conf
| |
| </syntaxhighlight>
| |
| # Вставьте в него строки, в которых замените в двух местах '''AWQBNTYP''' на серийный номер контроллера, а '''192.168.2.36''' на IP-адрес брокера:
| |
| #:<syntaxhighlight lang="bash">
| |
| connection bridge1 | | connection bridge1 |
| #address of server | | #address of server |
| address 192.168.2.36 | | address 10.0.0.105 |
| notifications true | | notifications true |
| notification_topic /client/AWQBNTYP/bridge1_status | | notification_topic /client/ACAX3M6K/bridge1_status |
| remote_username test | | remote_username test |
| remote_password wbpassword | | remote_password test11test |
| topic /hwmon/# both 2 /devices /client/AWQBNTYP/devices | | topic /# both 2 /devices /client/ACAX3M6K/devices |
| | |
| | EOFcommand |
| | |
| </syntaxhighlight> | | </syntaxhighlight> |
| #: в конфигурации выше мы отправляем в MQTT-брокер все подтопики устройства '''hwmon''', чтобы передать все топики контроллера, замените путь <code>/hwmon/#</code> на <code>/#</code>
| | |
| # Сохраните изменения и закройте файл.
| | ''Замените параметры (адрес, топик) на свои'' |
| # Перезапустите mosquitto:
| | |
| #:<syntaxhighlight lang="bash">
| | Перезапускаем mosquitto на контроллере |
| | <syntaxhighlight lang="bash"> |
| systemctl restart mosquitto | | systemctl restart mosquitto |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Теперь проверим, что контроллер отправляет данные во внешний MQTT-брокер:
| | И для проверки подписываемся на топик '''на сервере''' |
| #Выполните в консоли контроллера команду, в которой замените '''192.168.2.36''' на IP-адрес брокера, '''AWQBNTYP''' на серийный номер контроллера, а '''test''' и '''wbpassword''' на логин и пароль от MQTT-брокера:
| | <syntaxhighlight lang="bash"> |
| #:<syntaxhighlight lang="console">
| | mosquitto_sub -v -h 10.0.0.105 -u test -P test11test -t /ontrollerACAX3M6K/wb-msw-v3_98/# |
| # 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
| |
| </syntaxhighlight> | | </syntaxhighlight> |
| #:Если после выполнения команды вы получите список топиков — контролер успешно отправляет данные во внешний брокер.
| |
| # Завершите команду клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>.
| |
|
| |
|
| === Скрипт на сервере Grafana ===
| | Если данные идут, как на скриншоте — все сделано верно. |
| [[Image: Grafana mqtt to influxdb script.png |500px|thumb|right| Создание сервиса для запуска скрипта ]] | | [[Файл:Gragana_bridge_data_1.png|800px|thumb|none|Вход в настройку источника данных]] |
| Теперь скачаем на сервер с Grafana скрипт, который будет отправлять данные из MQTT-брокера в базу данных Influx:
| | |
| # Перейдите на сервере в папку <code>/usr/local/bin</code>
| | |
| #:<syntaxhighlight lang="bash">
| | Скачиваем на сервере скрипт |
| 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">
| | И настраиваем его автоматический запуск, создавая сервис |
| sudo wget https://raw.githubusercontent.com/wirenboard/wbmqtt2influx/master/mqtt_to_influxdb.py
| | <syntaxhighlight lang="bash"> |
| | systemctl edit --force --full mqtt_to_influxdb.service |
| </syntaxhighlight> | | </syntaxhighlight> |
| # Разрешите выполнение скрипта командой:
| | |
| #:<syntaxhighlight lang="bash">
| | |
| sudo chmod +x mqtt_to_influxdb.py
| | В редактор вставляем: |
| </syntaxhighlight>
| | <syntaxhighlight lang="bash"> |
| # Создайте сервис, который будет автоматически запускать скрипт:
| |
| #:<syntaxhighlight lang="bash">
| |
| sudo systemctl edit --force --full mqtt_to_influxdb.service
| |
| </syntaxhighlight>
| |
| # В открывшийся редактор вставьте строки, в которых замените '''test''' и '''wbpassword''' на логин и пароль от MQTT-брокера.:
| |
| #:<syntaxhighlight lang="bash">
| |
| [Unit] | | [Unit] |
| Description=Mqtt to Influxdb script | | Description=Mqtt to Influxdb script |
Строка 502: |
Строка 253: |
| Type=idle | | Type=idle |
| User=mosquitto | | User=mosquitto |
| ExecStart=/usr/bin/python3 /usr/local/bin/mqtt_to_influxdb.py -h localhost "/#" -u "test" -P "wbpassword" | | 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: |
Строка 260: |
| [Install] | | [Install] |
| WantedBy=multi-user.target | | WantedBy=multi-user.target |
| | |
| </syntaxhighlight> | | </syntaxhighlight> |
| #: Если MQTT-брокер стоит на отдельном от Grafana сервере, укажите его IP-адрес вместо '''localhost'''.
| | |
| # Сохраните файл, для этого нажмите клавиши <kbd>Ctrl</kbd>+<kbd>O</kbd>, затем <kbd>Enter</kbd> и <kbd>Ctrl</kbd>+<kbd>X</kbd>.
| | Сохраняем файл. |
| # Настройте автозапуск и запустите сервис:
| | Настраиваем автозапуск, запускаем и проверяем статус: |
| #:<syntaxhighlight lang="bash">
| | <syntaxhighlight lang="bash"> |
| sudo systemctl enable mqtt_to_influxdb.service && sudo systemctl start mqtt_to_influxdb.service
| | systemctl enable mqtt_to_influxdb.service && systemctl start mqtt_to_influxdb.service && systemctl status 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> | | </syntaxhighlight> |
| #: Если в выводе команды есть строчка <code>Active: active (running)</code> — сервис создан и настроен верно.
| |
|
| |
|
| Теперь проверьте, записывается ли что-то в influxDB. Для этого выполните на сервере команду:
| | Проверяем, записывается ли что-то в influxDB. Для этого выполняем на сервере |
| :<syntaxhighlight lang="console">
| | <syntaxhighlight lang="bash"> |
| $ influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 10'
| | influx -database 'mqtt_data' -execute 'SELECT * FROM /.*/ LIMIT 20' |
| 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 источника данных === |
| Чтобы Grafana могла отобразить данные из базы данных Influx, нужно в её веб-интерфейсе добавить источник данных:
| | В веб-интерфейсе Grafana в левом меню выбираем «шестеренку» ('''Configuration''') и в выпадающем меню - '''Data sources''' |
| # Откройте веб-интерфейс Grafana.
| | [[Файл:Gragana_datasources_1.png|800px|thumb|none|Вход в настройку источника данных]] |
| # Слева на панели нажмите на «шестерёнку» и выберите пункт '''Data Sources'''.
| | По нажатию самой большой кнопки в центре |
| # Откроется страница со списком источников данных, который у нас будет пуст. Нажмите на кнопку '''Add data source'''.
| | [[Файл:Gragana_datasources_2.png|800px|thumb|none|Add data source]] |
| # В открывшемся списке найдите '''InfluxDB''' и нажмите кнопку '''Select'''.
| | переходим к выбору типа БД |
| # На странице создания нового источника данных заполните:
| | [[Файл:Gragana_datasources_3.png|800px|thumb|none|Influx как источник]] |
| #* Наименование, можно оставить по умолчанию.
| | Нужно заполнить следующие поля <br> |
| #* URL — http://localhost:8086
| | '''Name''' - можно оставить по умолчанию <br> |
| #* Database — mqtt_data
| | '''URL''' - http://localhost:8086 <br> |
| # Чтобы сохранить настройки, нажмите '''Save & Test''', при успешном подключении появится сообщение '''Data source is working'''.
| | '''Database''' - указываем имя базы, созданной выше, ''mqtt_data'' <br> |
| | | и после нажатия кнопки '''Save & test''' выводится ''Data source is working'' - значит БД подключена успешно. |
| Если после сохранения настроек нет ошибок, то переходите к созданию дашборда.
| | [[Файл:Gragana_datasources_4.png|800px|thumb|none|сохранить и проверить]] |
| | |
| <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="SQL">
| |
| SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'hwmon/Board Temperature') AND $timeFilter GROUP BY time($__interval) fill(null)
| |
| </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 на Amazon WS ==
| |
| Видеоурок от нашего партнёра SetPoint.
| |
| {{YouTube
| |
| | link= kPzo9V_4Wxg
| |
| | text= Установка Grafana на Amazon WS
| |
| | width=600
| |
| | nofloat=true
| |
| }}
| |
| | |
| == Установка Grafana в Docker ==
| |
|
| |
|
| Видеоурок от пользователя Paul Strong.
| | === Grafana - создание dashboard === |
| {{YouTube
| | Запрос можно оформить так (для примера, данные без разделения по тегам) |
| | link= -Avk3_BRCO0 | | [[Файл:Gragana_dashboard_1.png|800px|thumb|none|настройка дашборда]] |
| | text= Визуализация значений из Wiren Board MQTT в Grafana
| | Или в RAW виде: |
| | width=600
| | SELECT mean("value_f") FROM "mqtt_data" WHERE ("channel" = 'controllerACAX3M6K/wb-msw-v3_98') AND $timeFilter GROUP BY time($__interval) fill(null) |
| | 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: Визуализация работы производственной линии]
| |
Это черновик страницы. Последняя правка сделана 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:
Создание панели с данными от контроллера Wiren Board в Grafana
Свой сервер Grafana
Для установки Grafana нам потребуется выделенный сервер с IP-адресом, доступным с контроллера Wiren Board.
Схема работы:
- Один или несколько контроллеров передают значения MQTT топиков в MQTT-брокер, установленный на сервере Grafana.
- На сервере Grafana выполняется скрипт, который записывает MQTT-топики брокера в базу данных Influx.
- Grafana отображает содержимое базы данных Influx.
Grafana и MQTT-брокер можно установить на один сервер, или разнести на разные. При использовании двух серверов IP-адрес MQTT-брокера должен быть доступен с контроллера Wiren Board и с сервера, на котором установлена Grafana.
Подготовка к установке
Используем чистый Debian,
Добавляем пакеты, ключи
apt install -y apt-transport-https software-properties-common wget gnupg2 sudo python3-pip
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
apt update
Установка
Ставим grafana, python3 и БД influxdb:
apt install -y grafana influxdb influxdb-client python3-pip
pip3 install paho-mqtt python-etcd
Разрешаем автозапуск, запускаем и проверяем:
apt install -y grafana
systemctl enable grafana-server && systemctl start grafana-server
systemctl status grafana-server
Если статус "Active: active (running)" - то дальнейшая настройка Grafana -через веб интерфейс.
influxdb
Создаем базу данных с именем mqtt_data
echo "CREATE DATABASE mqtt_data; show databases;" | influx
grafana
Открываем в браузере http://<serverIP>:3000/
Логин и пароль по умолчанию admin admin.
Сразу меняем пароль.
Брокер
Выполняем на сервере 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)
Полезные ссылки