Ceph Object Gateway (RadosGW): performance monitoring (Zabbix)

Про доступные метрики производительности RadosGW(RGW) я писал отдельную заметку.
В этот раз я опишу как мы у себя собираем эти метрики в Zabbix.

Скрипт сбора метрик, user_parameters.conf и собственно шаблон для Zabbix — https://github.com/FATruden/rgw-monitoring

На серверах выполняющих роль RGW, метрики собираются простым скриптом на Python. Скрипт прописан в cron хитрым образом, что бы метрики собирались раз в 30 сек.:

* * * * * /etc/zabbix/zabbix_agentd.d/scripts/get-rgw-perf.py
* * * * * sleep 30; /etc/zabbix/zabbix_agentd.d/scripts/get-rgw-perf.py

В процессе своей работы, скрипт парсит JSON, пересчитывает latency и записывает значение каждой метрики в отдельный, одноименный текстовый файл с префиксом ‘rgw.’ в каталоге /tmp

В user_parameters.conf на сервере с zabbix agent’ом нужно добавить:

### RGW perf counters ###
UserParameter=rgw.[*],cat /tmp/rgw.$1
UserParameter=rgw.state, service ceph-radosgw status > /dev/null ; echo $?

Ну, и собственно импортировать сам шаблон доступный в репозитории выше, и назначить его нужных хостам. Далее настроить Screen по вкусу)

Зачем cron? Почему в текстовые файлы? Почему просто не парсить оформленный вывод Python-скрипта при запросе каждого айтема?

Есть три причины.

1. В данном случае у нас примерно 10 интересных нам метрик. Если на забор данных каждой метрики мы будем дергать Python а тот в свою очередь rgw через сокет, то время забора значения одной метрики будет примерно раз в 20 больше чем таковое при выполнение cat /tmp/rgw.{metric_name}. Это важно если ваш Zabbix-сервер или proxy собирают сотни тысяч метрик. Нужно помогать им делать сбор каждой метритами как можно быстрее.

2. Нагрузка на сам RGW. В моем случае делается два запроса в минуту. В случае дерганья каждой метрики по отдельности с частотой в 30 сек. — получится примерно 20 вызовов RGW.

3. В случае с cron, все метрики получаются одновременно и в файлах они находятся в синхронизированном друг с другом состоянии, что полезнее для поиска корреляций между их значениями.