Постигая Дао командной строки с JQ

Как на коленке организовать сбор данных

bash
commandline
shell
jq
тактическая аналитика
Author

i2z1@ddslab.ru

Published

November 26, 2023

Как быстро организовать мониторинг температуры CPU сервера?

Поймать баланс между системным инженерным подходом и быстрым решением задачи на коленке ad-hoc порой непросто.

Для мониторинга нагрузки системы существуют как различные готовые инструменты, так и известные мониторинговые конструкторы типа ELK/Opensearch и Prometheus-Grafana. Но порой быстрее для проведения локальных экспериментов быстро накидать в командной строке скрипт, собрать данные в JSON и затем уже анализировать данные в знакомых BI инструментах.

У меня сервер, как уже ранее писал, под управлением ProxMox, который основан на Debian. Температуру можно собрать с помощью утилиты sensors (пакет lm-sensors) и вывести в JSON.

Но в готовом JSON для мониторинга нам не хватает отметки времени. Как вставить в JSON метку времени? Например, можно брать с помощью команды командной строки date.

Можно воспользоваться утилитой jq

jq имеет специальные “фильтры”, с помощью которых можно манипулировать JSON. Мы вставим новое поле “time” со значением равным выводу команды “date”.

sensors -j | jq --arg date "$(date)" '. |= {"time": $date} + .'
NB!
  1. Строка '. |= {"time": $date} + .'и называется фильтром в jq.
  2. Строка --arg date "$(date)" – подстановка значение команды date в jq через собственную систему аргументов.

Осталось зациклить в бесконечном цикле – и наша система сбора информации о температуре CPU готова!

#!/bin/bash
while [ 2 -lt 3 ]
do
sleep 2
sensors -j |jq --arg date "$(date)" '. |= {"time": $date} + .' >> ./temp.json
done

На выходе у нас готовый JSON, пригодный для анализа!