Про доступные метрики производительности 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_x000D_ * * * * * sleep 30; /etc/zabbix/zabbix_agentd.d/scripts/get-rgw-perf.py
В процессе своей работы, скрипт парсит JSON, пересчитывает latency и записывает значение каждой метрики в отдельный, одноименный текстовый файл с префиксом ‘rgw.’ в каталоге /tmp
В user_parameters.conf на сервере с zabbix agent’ом нужно добавить:
### RGW perf counters ###_x000D_ UserParameter=rgw.[*],cat /tmp/rgw.$1_x000D_ 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, все метрики получаются одновременно и в файлах они находятся в синхронизированном друг с другом состоянии, что полезнее для поиска корреляций между их значениями.
Помогла ли вам статья?