Все начиналось безобидно, после профилактики и небольшого апгрейда по железу - хотел было настроить коньки, чтоб понаблюдать как оно теперь живет. Но поковыряв стандартный числовой вывод или дефолтыне бары - подумал что выглядят они довольно уныло, а кастомные lua-решения доводить код до ума нет особого желания. И надо что-нибудь придумать. Ну и завертелась идея рисовать их на обоях
Тема вышла непростая и довольно комплексная, слишком подробно рассказать про каждый компонент сходу не получится, но при необходимости дополним/обсудим )
Логически получилось разделить на следующие пункты
1. сбор и хранение метрик
Для того чтобы показать что-то нужное - нужно собрать это что-то нужное и куда-то сложить, в данном случае воспользовался связкой telegraf+influxdb v1
и тот и другой распространяется дебками на официальной странице проекта, сложностей с установкой нет.
InfluxDB
Дефолтные конфигурации вполне подойдут для жизни на локалхосте, остается только добавить в автозапуск и включить
Telegraf
Для телеграфа указываем куда складывать метрики в файле
и аналогично включаем -
Затем можно проверить что метрики начали собираться, например по процам запросом в influx
Тогда можно двигаться дальше)
и тот и другой распространяется дебками на официальной странице проекта, сложностей с установкой нет.
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
Теперь, когда данные в наличии, надо наделать из них графиков, для этого возьмем Grafana
Аналогично ставим дебку и запускаем базовый сервис
После старта - веблицо графаны будет доступно на http://localhost:3000/
Дефолтный пароль для входа admin/admin, сразу же можно поменять
Далее необходимо добавить датасорс, источник из которого мы получаем данные, т.е. influxdb Там укажем имя, url апи influx http://localhost:8086/ и имя бд без авторизации Внизу есть кнопка Save&Test, Который расскажет что все в норме.
Аналогично ставим дебку и запускаем базовый сервис
systemctl enable --now grafana-server
После старта - веблицо графаны будет доступно на http://localhost:3000/
Дефолтный пароль для входа admin/admin, сразу же можно поменять
Далее необходимо добавить датасорс, источник из которого мы получаем данные, т.е. influxdb Там укажем имя, url апи influx http://localhost:8086/ и имя бд без авторизации Внизу есть кнопка Save&Test, Который расскажет что все в норме.
Создаем дашборд, добавляем панели (Create New Dashboard - Add new panel), запросами выводим нужные метрики, например возьмем график утилизации оперативной памяти
measurement - mem
field - used percent
naming pattern - Memory usage(любой текст)
Сюда же можно вывести например swap, добавляем запрос (add query) и делаем аналогичную выборку из последовательности swap
Для косметики, выводим в легенду последнее значение утилизации, и единицу измерения в процентах. Настроек там куча, разбирать всю графану нет возможности
Дальше настраиваем остальное похожим образом все остальное, процы, диски, процессы, температуру, или любые внешние данные, что захочется.
На выходе у меня получился такой даш
measurement - mem
field - used percent
naming pattern - Memory usage(любой текст)
Сюда же можно вывести например swap, добавляем запрос (add query) и делаем аналогичную выборку из последовательности swap
Для косметики, выводим в легенду последнее значение утилизации, и единицу измерения в процентах. Настроек там куча, разбирать всю графану нет возможности
Дальше настраиваем остальное похожим образом все остальное, процы, диски, процессы, температуру, или любые внешние данные, что захочется.
На выходе у меня получился такой даш
Показывать графики в браузере - хорошо, но хотелось бы вытащить их оттуда. для этого будем рендерить их в растр плагином.
Затем меняем настройки grafana для чтения без авторизации
И перезапускаем
Теперь, если в выпадающем меню заголовка панели выбрать пункт Share - там внизу будет линк на отрендеренную картинку графика, что и требуется. Если приглядеться в url - там есть параметры временного диапазона отображения графика, а также ширина-высота целевого изображения, коотрые можно настраивать под свои нужды
Ну и по этой ссылке, тем же wgetом можно вытащить png в файл для дальнейшего использования
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 - там внизу будет линк на отрендеренную картинку графика, что и требуется. Если приглядеться в url - там есть параметры временного диапазона отображения графика, а также ширина-высота целевого изображения, коотрые можно настраивать под свои нужды
Ну и по этой ссылке, тем же wgetом можно вытащить png в файл для дальнейшего использования
Тут начинается конструктор, задача которого собрать в кучу все картинки в определенном порядке. Я взял за основу следующий шаблон для 1920x1080, разрисовал сначала на тетрадке
Для этих целей подойдет
Цель получить на выходе складную картинку под размер экрана.
последовательно склеивать изображения по горизонтали или вертикали в строчки и ряды, чтоб потом приклеть к обоине и вывести на рабочий столДля этих целей подойдет
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 разнообразные темные картинки, которые выбираются рандомно) 5. Примечания
1. Кроме не самой тривиальной реализации, можно отметить что оно еще достаточно ресурсоемкое, для рендеринга графана запускает под собой безголовый хромиум в котором уже все рендерится. Может подгрузить проца, хотя умеет и в gpu. В доке к плагину есть ряд конфигурашек
2. инструментарий сбора и хранения в influx выбран произвольно, может быть любое хранилище с которым умеет работать графана.
3. Касаемо самой графаны - тоже не единственное что умеет показывать графики на основе time-series, возможно стоило бы прикрутить какой-нибудь другой фреймворк для отрисовки
4. на скринах сбор метрик с видеокарты использовался скрипт коллектор для телеграфа чтоб вытаскивать из
2. инструментарий сбора и хранения в influx выбран произвольно, может быть любое хранилище с которым умеет работать графана.
3. Касаемо самой графаны - тоже не единственное что умеет показывать графики на основе time-series, возможно стоило бы прикрутить какой-нибудь другой фреймворк для отрисовки
4. на скринах сбор метрик с видеокарты использовался скрипт коллектор для телеграфа чтоб вытаскивать из
radeontop
значения утилизации по gpu, видеопамяти, потребляемой мощности и температуре.