Страница 1 из 1

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

Добавлено: 12 фев 2022, 13:53
Chocobo
Предыстория.
Все начиналось безобидно, после профилактики и небольшого апгрейда по железу - хотел было настроить коньки, чтоб понаблюдать как оно теперь живет. Но поковыряв стандартный числовой вывод или дефолтыне бары - подумал что выглядят они довольно уныло, а кастомные 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, видеопамяти, потребляемой мощности и температуре.

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

Добавлено: 12 фев 2022, 17:11
vir0id
Вроди как есть движуха метрика, но в даш панель не хочет выводить данные

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

┌──(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
> 

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

Добавлено: 12 фев 2022, 17:15
Chocobo
vir0id, там где запрос в нижней части, редактируй 'select measurements' и 'field(value)', он пока не знает что тебе показывать

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

Добавлено: 12 фев 2022, 17:43
vir0id
Да! Всё супер! Теперь осталось разобраться с настройками и дело в шляпе