Monitorix: добавляем объём записанных данных SSD
Я уже писал про использование системы Monitorix и как можно получить в терминале Linux объём записанных данных на SSD накопитель. Теперь нужно объединить всё это в одно целое и добавить в систему мониторинга график изменения данного значения.
Я не умею писать модули для Monitorix, но есть один обходной путь: использование стандартного модуля gensens (generic sensors). Он позволяет читать данные из обычных текстовых файлов. Значит нам остаётся только эти данные туда писать.
Забирать данные будем простым скриптом на Python:
monitor-agent.py:
#!/usr/bin/python3 import os import subprocess sdf = subprocess.run(["smartctl", "-a", "/dev/sdf"], capture_output=True) sdf = sdf.stdout.decode() sdf = sdf.split("\n") for item in sdf: if "Total_LBAs_Written" in item: tbw = item.split() tbw = tbw[-1] tbw = 512 * int(tbw) # bytes tbw = round(tbw / 1024 / 1024 / 1024 / 1024, 3) f = open("/run/monitorix-tbw-sdf", "wt") f.write(str(tbw)) f.close()
Что делает этот код:
- Выполняет команду smartctl, вывод сохраняет в переменную.
- Вывод разбивается на список строк.
- В цикле проверяется каждая строка и ищется фраза «Total_LBAs_Written».
- Из найденной строки берётся необходимое значение, переводится в терабайты.
- Результат записывается в файл.
Для записи я использую каталог /run, который хранится в оперативной памяти, чтобы не создавать дополнительные операции записи на SSD.
Этот скрипт нам нужно периодически запускать. Я это делаю с интервалом в 10 минут. Используем cron:
# crontab -e
Добавляем в конец строку:
*/10 * * * * monitor-agent.py
Теперь осталось научить Monitorix забирать информацию из файла. Правим файл /etc/monitorix/monitorix.conf. В секции graph_enable включаем модуль gensens. Затем переходим к секции gensens и приводим её к такому виду:
# GENSENS graph
# -----------------------------------------------------------------------------
<gensens>
<list>
0 = byt0
</list>
<title>
0 = TBW SSD
</title>
<desc>
byt0 = /run/monitorix-tbw-sdf
</desc>
<unit>
byt0 = 1
</unit>
<map>
byt0 = System SSD
</map>
<alerts>
</alerts>
rigid = 0, 0, 2
limit = 100, 100, 100
</gensens>
Перезапускаем сервис:
# service monitorix restart
И смотрим график:

Обратите внимание, что данные отображаются в терабайтах. На графике букву «m» следует читать как милли-терабайт, т.е. 1/1000 ТБ. Значит 370m = 0.37 ТБ. После перехода рубежа в 1 ТБ отображение должно вроде стать нормальным.
Точно также можно добавлять в мониторинг любые другие данные.