Skip to main content

Приклади з Grafana

REST API Fledge надає можливість інтегрувати інші додатки з Fledge, ці додатки можуть керувати Fledge або можуть бути використані для моніторингу роботи самого Fledge чи для візуалізації даних, що зберігаються в екземплярі Fledge. Одним з таких інструментів є |grafana. Тут ми покажемо кілька простих прикладів того, як можна використовувати Fledge REST API з Grafana і плагіном джерела даних Infinity. Це простий приклад, більш складні системи можуть бути побудовані за допомогою цих інструментів.

Показати статус Fledge

За допомогою кінцевої точки GET /fledge/ping ми можемо отримати інформацію про кількість прочитаних, надісланих, очищених зчитувань тощо.

$ curl http://localhost:8081/fledge/ping

Це поверне корисне навантаження JSON, яке виглядає так, як показано нижче

{
"uptime": 13203,
"dataRead": 2045868,
"dataSent": 6700,
"dataPurged": 1293723,
"authenticationOptional": true,
"serviceName": "Fledge",
"hostName": "foglamp-18",
"ipAddresses": [
"192.168.0.172"
],
"health": "green",
"safeMode": false,
"version": "1.9.2"
}

Ми можемо використовувати цю URL-адресу як запит до панелі інструментів Grafana для отримання базової статистики. Потім ми вибираємо елементи, які ми хочемо відобразити у вигляді стовпців, і встановлюємо їх тип, в даному випадку ми вибрали основні лічильники, які є числовими значеннями.

GrafanaPing

Показати статистику

Цей приклад показує, як взяти набір значень з плином часу і відобразити їх графічно у Grafana. Основна відмінність полягає в обробці мітки часу. У цьому прикладі ми використовуємо API історії статистики для отримання статистичних даних за певний проміжок часу.

Використання команди curl для перегляду виклику API

curl http://localhost:8081/fledge/statistics/history|jq

Ми отримуємо відповідь JSON наступним чином

{
"interval": 15,
"statistics": [
{
"history_ts": "2022-08-25 11:31:29.565",
"READINGS": 68,
"BUFFERED": 0,
"UNSENT": 0,
"PURGED": 0,
"UNSNPURGED": 0,
"DISCARDED": 0,
"coap-Ingest": 0,
"COAP": 0,
"Sine-Ingest": 0,
"SINUSOID": 0,
"exp-Ingest": 0,
"EXPRESSION": 0,
"Readings Sent": 0,
"OP": 0,
"test1-Ingest": 0,
"sine2-Ingest": 15,
"SINE210": 0,
"SINE25": 0,
"SINE2": 0,
"SINE250": 15,
"OMF": 0,
"PRESINE2.SINUSOID": 0,
"SINUSOID2": 0,
"lathe1004-Ingest": 53,
"LATHE1004": 15,
"LATHE1004CURRENT": 15,
"LATHE1004IR": 15,
"LATHE1004VIBRATION": 8,
"testacl-Ingest": 0,
"dsds-Ingest": 0,
"OMF2": 0,
"test-Ingest": 0
},
...
}

Нас цікавить масив даних під об'єктом statistics в JSON, тому ми вибираємо значення statistics для значення Rows / Root. Це означає, що кожен елемент масиву під statistics буде розглядатися як рядок у результаті запиту.

GrafanaStatistics

Потім ми вибираємо стовпці, як і раніше, щоб витягти значення, які ми хочемо відобразити. Всі вони мають тип число.

Для того, щоб відобразити дані у часі, ми також повинні вибрати стовпчик з міткою часу, у цьому випадку буде використано history_ts. Ми не можемо встановити його як стовпчик типу мітки часу, оскільки формат мітки часу Fledge не підтримується безпосередньо Графаною. Ми повинні налаштувати перетворення, щоб взяти значення рядка з history_ts і перетворити його на мітку часу, яка може бути зрозумілою для Графани.

GrafanaTimestamp

У цьому перетворенні ми надаємо йому формат мітки часу Fledge і встановлюємо бажаний тип результату як Мітка часу. Тепер Grafana може розуміти часові мітки і відображати дані Fledge.

Останній момент, про який слід згадати: часові мітки Fledge повертаються в UTC, тоді як Grafana припускає, що дані знаходяться в місцевому часовому поясі. Щоб вирішити цю проблему, просто встановіть у налаштуваннях Grafana очікування даних в UTC або додайте поправку на час, що базується на кількості годин від UTC у вашому місцезнаходженні.

Графік Зчитувань Даних

Цей приклад дуже схожий на приклад з історією статистики вище, головна відмінність полягає в тому, що ми витягуємо дані зчитування з буфера за допомогою URL-адреси /fledge/asset/{assetName}.

GrafanaReading

Ми повинні вибрати дані для відображення таким же чином, ми використовуємо limit=, щоб дозволити запиту повернути достатню кількість даних. В ідеалі ми б хотіли мати обмежений за часом запит, але це виходить за рамки цього простого прикладу.

$ curl http://localhost:8081/fledge/asset/sine250?limit=2 |jq
[
{
"reading": {
"sinusoid": -0.951056516
},
"timestamp": "2022-08-25 13:47:45.624800"
},
{
"reading": {
"sinusoid": -0.978147601
},
"timestamp": "2022-08-25 13:47:44.624586"
}
]

Ми додаємо потрібні нам стовпці, в цьому прикладі немає необхідності вибирати Rows / Root, оскільки масив вже знаходиться в корені повернутого JSON-документа.

Ми також повинні зробити те ж саме перетворення для формату мітки часу, яке ми зробили вище.