RRDTool Graphs with Gradient

Автор: | 7 марта 2012

CPU Temperature RRD Graph

Захотелось мне странного – чтобы на графике RRD c температурой процессора был градиент вместо простой линии.

То, что вы видите выше – результат моих изысканий, изначально график выглядел примерно так:

trx

Просто полка и не очень ясно, какая там обстановка, пока не глянешь на цифровые значения. А если учесть наличие других графиков на странице, то не заметить перегрев проще простого.

В интернетах нашел небольшой мануал по рисованию красивости – Grading with RRDtool Tutorialс картинкой:

ping

Основная идея в том, чтобы каждый столбик графика рисовать с помощью правил в зависимости от высоты столбика:

"CDEF:shading10=ping_time,0.90,*" "AREA:shading10#E10000"

shading10 – это 90% от высоты нарисованного столбика shading2 (т.е. исходного числа ping_time). Математически это выглядит так:

shading10=ping_time*0.9

* В CDEF используются правила RPN – Reverse Polish notation (Обратная польская запись).

Так прорисовываются все столбики, от самого большого, до самого маленького.

График, конечно, красивый, но в отношении температуры, цвет столбца должен прямо зависеть от координаты, т.е. температуры. В моем случае, пробный график стал таким:

tr0

Даже если бы температура процессора была 20 градусов цельсия, график был бы точно таким же, а это не то, что требовалось. Добиться интуитивно понятной визуализации можно только привязав цвет к температуре.

Вторая попытка была ближе к правде 🙂

tr1

Но градиент выглядел не совсем градиентно))

* С градиентами отдельная история, я думал в сети есть какие-то онлайн инструменты для создания массива цветов градиента, оказывается, максимум, что есть, это простые инструменты – раз, два и три.

Дальше было:

tr2

Выглядит как негатив) Я попутал переменные и вышел такой компот. Поставив все на свои места, получил:

tr3 

Заменил верхний цвет нижнего графика:

trf

и обнаружил косяк: некоторое время не работал сбор параметров температуры и в базе значения nan. Когда попадаются такие значения, график рисуется градиентом в полный рост. Сделал дополнительную проверку переменной min и в отрисовке использую minn:

'CDEF:minn=min,UN,0,min,IF'
'CDEF:shading99=minn,100,LT,minn,100,IF' 'AREA:shading99#F20D6E'
'CDEF:shading95=minn,95,LT,minn,95,IF' 'AREA:shading95#E61A75'
...
'CDEF:shading05=minn,5,LT,minn,5,IF' 'AREA:shading05#00FFFF'

Есть еще один баг, но я считаю его не значительным. При получении данных из базы RRD, в последней минуте данные в значении nan (полагаю, они просто еще не попали в базу), и, после замены nan на 0, на графике рисуется вертикальная “полка” (точнее, “яма”), это видно на самом первом графике – темный столбик справа.

P.S.

на графике процессор имеет температуру 84С, на самом деле это не правда, BIOS говорит другие цифры, у жестких дисков 32-35С, а процессор на 84С страшно бы глючил или сгорел. Я думаю это температура в F (Фаренгейтах), но пока не доходят руки устранить этот баг 😉

Добавить комментарий