Концепт отображения метрик на обоях (Grafana/Influx/ImageMagick)

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Концепт отображения метрик на обоях (Grafana/Influx/ImageMagick)

#1

12 фев 2022, 13:53

Предыстория.
Все начиналось безобидно, после профилактики и небольшого апгрейда по железу - хотел было настроить коньки, чтоб понаблюдать как оно теперь живет. Но поковыряв стандартный числовой вывод или дефолтыне бары - подумал что выглядят они довольно уныло, а кастомные lua-решения доводить код до ума нет особого желания. И надо что-нибудь придумать. Ну и завертелась идея рисовать их на обоях :)
Тема вышла непростая и довольно комплексная, слишком подробно рассказать про каждый компонент сходу не получится, но при необходимости дополним/обсудим )
Логически получилось разделить на следующие пункты

1. сбор и хранение метрик
Для того чтобы показать что-то нужное - нужно собрать это что-то нужное и куда-то сложить, в данном случае воспользовался связкой telegraf+influxdb v1
и тот и другой распространяется дебками на официальной странице проекта, сложностей с установкой нет.
InfluxDB
Дефолтные конфигурации вполне подойдут для жизни на локалхосте, остается только добавить в автозапуск и включить
systemctl enable --now inbfluxdb
Telegraf
Для телеграфа указываем куда складывать метрики в файле /etc/telegraf/telegraf.conf в блоке OUTPUT PLUGINS

Код: Выделить всё

[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
и аналогично включаем - systemctl enable --now telegraf
Затем можно проверить что метрики начали собираться, например по процам запросом в influx

Код: Выделить всё

# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> use telegraf
Using database telegraf
> select * from cpu limit 1;
name: cpu
time                cpu       host    usage_guest usage_guest_nice usage_idle        usage_iowait       usage_irq usage_nice usage_softirq        usage_steal usage_system       usage_user
----                ---       ----    ----------- ---------------- ----------        ------------       --------- ---------- -------------        ----------- ------------       ----------
1643968290000000000 cpu-total desktop 0           0                97.50219656129032 0.1380695368413985 0         0          0.004183925358804313 0           0.5397263712774799 1.8158236057090853
Тогда можно двигаться дальше)
2. Установка Grafana
Теперь, когда данные в наличии, надо наделать из них графиков, для этого возьмем Grafana
Аналогично ставим дебку и запускаем базовый сервис systemctl enable --now grafana-server
После старта - веблицо графаны будет доступно на http://localhost:3000/
Дефолтный пароль для входа admin/admin, сразу же можно поменять
Далее необходимо добавить датасорс, источник из которого мы получаем данные, т.е. influxdb
Снимок экрана в 2022-02-12 12-13-02.png
Там укажем имя, url апи influx http://localhost:8086/ и имя бд без авторизации
Снимок экрана в 2022-02-12 12-16-23.png
Внизу есть кнопка Save&Test, Который расскажет что все в норме.
Снимок экрана в 2022-02-12 12-18-21.png
3. Настройка визуализации
Создаем дашборд, добавляем панели (Create New Dashboard - Add new panel), запросами выводим нужные метрики, например возьмем график утилизации оперативной памяти
measurement - mem
field - used percent
naming pattern - Memory usage(любой текст)
Сюда же можно вывести например swap, добавляем запрос (add query) и делаем аналогичную выборку из последовательности swap
Для косметики, выводим в легенду последнее значение утилизации, и единицу измерения в процентах.
Снимок экрана в 2022-02-12 12-36-06.png
Настроек там куча, разбирать всю графану нет возможности :)
Дальше настраиваем остальное похожим образом все остальное, процы, диски, процессы, температуру, или любые внешние данные, что захочется.
На выходе у меня получился такой даш
Снимок экрана в 2022-02-12 12-40-23.png
3. Рендеринг
Показывать графики в браузере - хорошо, но хотелось бы вытащить их оттуда. для этого будем рендерить их в растр плагином.
grafana-cli plugins install grafana-image-renderer и добавляем зависимости
apt install libxshmfence1 libcairo2 libpango-1.0-0 libgbm1 libxrandr2 libxdamage1 libxcomposite-dev libxkbcommon-x11-0 libatk-bridge2.0-0
Затем меняем настройки grafana для чтения без авторизации

Код: Выделить всё

[auth.anonymous]
# enable anonymous access
enabled = true
И перезапускаем systemctl restart grafana-server
Теперь, если в выпадающем меню заголовка панели выбрать пункт Share - там внизу будет линк на отрендеренную картинку графика, что и требуется.
Снимок экрана в 2022-02-12 12-55-00.png
Если приглядеться в url - там есть параметры временного диапазона отображения графика, а также ширина-высота целевого изображения, коотрые можно настраивать под свои нужды
Ну и по этой ссылке, тем же wgetом можно вытащить png в файл для дальнейшего использования
4. Сборка изображения
Тут начинается конструктор, задача которого собрать в кучу все картинки в определенном порядке. Я взял за основу следующий шаблон для 1920x1080, разрисовал сначала на тетрадке :)
Снимок экрана в 2022-02-12 13-22-54.png
последовательно склеивать изображения по горизонтали или вертикали в строчки и ряды, чтоб потом приклеть к обоине и вывести на рабочий стол
Для этих целей подойдет convert из состава imagemagick:

Код: Выделить всё

convert /tmp/cpu_temp.png /tmp/pcount.png -append /tmp/column1.png # -append vertical image
convert /tmp/cpu_idle.png /tmp/column.png +append /tmp/row1.png #+append horizontal image
Цель получить на выходе складную картинку под размер экрана.

На выходе по крону генерим по крону новую обоину и обновляем с заданным интервалом, картинки обоев тоже можно менять в динамике. Насохранял 24 разнообразные темные картинки, которые выбираются рандомно)
Снимок экрана в 2022-02-12 13-36-09.png
Снимок экрана в 2022-02-12 13-38-54.png
Снимок экрана в 2022-02-12 14-09-01.png
5. Примечания
1. Кроме не самой тривиальной реализации, можно отметить что оно еще достаточно ресурсоемкое, для рендеринга графана запускает под собой безголовый хромиум в котором уже все рендерится. Может подгрузить проца, хотя умеет и в gpu. В доке к плагину есть ряд конфигурашек
2. инструментарий сбора и хранения в influx выбран произвольно, может быть любое хранилище с которым умеет работать графана.
3. Касаемо самой графаны - тоже не единственное что умеет показывать графики на основе time-series, возможно стоило бы прикрутить какой-нибудь другой фреймворк для отрисовки
4. на скринах сбор метрик с видеокарты использовался скрипт коллектор для телеграфа чтоб вытаскивать из radeontop значения утилизации по gpu, видеопамяти, потребляемой мощности и температуре.
Изображение
   
Изображение

Аватара пользователя

vir0id
Сообщения: 2757
Зарегистрирован: 19 дек 2017, 18:48
Решено: 15
Откуда: Рига
Благодарил (а): 163 раза
Поблагодарили: 305 раз
Контактная информация:

Концепт отображения метрик на обоях (Grafana/Influx/ImageMagick)

#2

12 фев 2022, 17:11

Вроди как есть движуха метрика, но в даш панель не хочет выводить данные

Код: Выделить всё

┌──(vir0id㉿android)-[~]
└─$ influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> use telegraf
Using database telegraf
> select * from cpu limit 1;
name: cpu
time                cpu       host    usage_guest usage_guest_nice usage_idle        usage_iowait         usage_irq usage_nice usage_softirq       usage_steal usage_system      usage_user
----                ---       ----    ----------- ---------------- ----------        ------------         --------- ---------- -------------       ----------- ------------      ----------
1644670610000000000 cpu-total android 0           0                81.94622279128711 0.025608194622272127 0         0          0.17925736235592307 0           5.198463508322789 12.650448143406251
> 

Аватара пользователя

Автор темы
Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Концепт отображения метрик на обоях (Grafana/Influx/ImageMagick)

#3

12 фев 2022, 17:15

vir0id, там где запрос в нижней части, редактируй 'select measurements' и 'field(value)', он пока не знает что тебе показывать
Изображение
   
Изображение

Аватара пользователя

vir0id
Сообщения: 2757
Зарегистрирован: 19 дек 2017, 18:48
Решено: 15
Откуда: Рига
Благодарил (а): 163 раза
Поблагодарили: 305 раз
Контактная информация:

Концепт отображения метрик на обоях (Grafana/Influx/ImageMagick)

#4

12 фев 2022, 17:43

Да! Всё супер! Теперь осталось разобраться с настройками и дело в шляпе

Ответить

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: ogankvik, rogoznik и 2 гостя