Zabbix: мониторинг дисковых хранилищ DELL MD36XX

    Всем привет!


    Мы открыли новой набор на обновлённый курс "Администратор Linux": всё те же новые преподаватели, динамичная программа и интересные обсуждения. Ну и заодно делимся интересной заметкой из реального случая одного из преподавателей — Алексей Цыкунова.


    Поехали.



    Задача


    Необходимо настроить мониторинг нагрузки на дисковые хранилища DELL MD36XX.
    Есть проблема – полки не умеют отдавать данные по snmp. Кстати, подобные проблемы также встречаются у хранилищ IBM, HP и других вендоров.


    Окружение


    Сами вендоры предоставляют клиентское ПО. Так называемое StorageManager's. Некоторое из них только под Windows, но в последнее время появилось и под Linux. В моем случае ПО установилось под Linux и имеет в своём составе консольную утилиту SMcli. С помощью SMcli можно снимать статистику в файл:


    SMcli -n StorageName -S -quick -c "save storageArray performanceStats file=\\"/var/log/md36xx.stat\\";"

    И выглядит она следующим образом


    "Performance Monitor Statistics for Storage Array: StorageName - Date/Time: 1/17/18 9:37:04 PM - Polling interval in seconds: 5"
    
    "Objects","Total IOs","Read %","Primary Read Cache Hit %","Primary Write Cache Hit %","SSD Read Cache Hit %","Current MBs/sec","Maximum MBs/sec","Current IOs/sec","Ma
    ximum IOs/sec","Minimum IOs/sec","Average IOs/sec","Minimum MBs/sec","Average MBs/sec","Current IO Latency","Maximum IO Latency","Minimum IO Latency","Average IO Late
    ncy"
    
    "Capture Iteration: 1","","","","","","","","","","","","","","","","",""
    "Date/Time: 1/17/18 9:37:05 PM","","","","","","","","","","","","","","","","",""
    "Storage Array StorageName ","6396.0","52.0","64.6","100.0","0.0","31.2","31.2","1279.0","1279.0","1279.0","1279.0","31.2","31.2","-","-","-","-"
    "RAID Controller Module 0","4043.0","47.3","55.3","100.0","0.0","27.3","27.3","808.0","808.0","808.0","808.0","27.3","27.3","-","-","-","-"
    "RAID Controller Module 1","2353.0","60.0","77.3","100.0","0.0","3.9","3.9","470.0","470.0","470.0","470.0","3.9","3.9","-","-","-","-"
    "Disk Pool Disk_Pool_1","5181.0","59.6","69.3","100.0","0.0","29.1","29.1","1036.0","1036.0","1036.0","1036.0","29.1","29.1","-","-","-","-"
    "Disk Pool Disk_Pool_vps","1215.0","19.4","3.8","100.0","0.0","2.1","2.1","243.0","243.0","243.0","243.0","2.1","2.1","-","-","-","-"
    "Virtual Disk VPS1","645.0","1.6","30.0","100.0","0.0","0.9","0.9","129.0","129.0","129.0","129.0","0.9","0.9","1.7","1.7","1.7","1.7"
    ...

    Варианты решений


    Данную информацию можно распарсить и отправить в zabbix, причем для отправки есть несколько вариантов


    Zabbix agent и UserParameter, в котором можно расписать каждый из интересуемых параметров, например:


    UserParameter = dell.md.discovery, /path/script_discovery
    UserParameter = dell.md.totalio[*], /path/script2 $1
    UserParameter = dell.md.currmb[*], /path/script3 $1

    Zabbix_sender, который даёт возможность одним вызовом скрипта отправить все параметры разом. Именно этот вариант я и выбрал.


    Настройки в zabbix


    В zabbix необходимо сконфигурировать новый хост и создать в нем discover rule



    Прописать в нём фильтр:



    И добавить item prototypes


    item_proto.png


    Тут детальнее, как именно прописывается прототип:



    Отсылка в Zabbix


    Отсылку данных можно производить через zabbix_sender -i <key_value_file>


    Формат файла:


    HOST key value

    Причём в качестве value можно передавать json для discovery в формате:


    { 'data' :[
                   {'{#MDDEV}': 'drive1'},
                   {'{#MDDEV}': 'drive1'},
                 ]
    }

    Где {#MDDEV} – макрос через которые мы обнаруживаем имена наших устройств/дисков, с которых собираемся снимать статистику.


    Итого алгоритм действий следующий:


    – снимаем статистику через SMcli, сохраняем в файл;
    – парсим полученный файл;
    – генерим файл для zabbix_sender.


    Всё это можно реализовать bash-скриптом. Но мне проще всего показалось реализовать один скрипт на Python, который потом будет вызываться из крона раз в минуту. Трудности возникли только с модулем отсылки в zabbix. Он устанавливался и под 2.7 и под 3.6, но запустился только под 3.6.


    Cкрипт можно взять в GitHub


    Как всегда ждём вопросы и замечания тут или на открытом уроке.

    • +11
    • 3,8k
    • 2

    Отус

    230,00

    Профессиональные онлайн-курсы для разработчиков

    Поделиться публикацией

    Похожие публикации

    Комментарии 2
      0
      1. Зачем использовать питоновский модуль zabbix sender если есть консольный вариант утилиты?
      Причем консольный zabbix_sender умеет использовать файл конфигурации zabbix_agentd из вашей системы и при наличии одного указанного в конфиге z-сервера никаких танцев с бубном не нужно.
      2. В отправляемом файле с метриками первое поле hostname не обязательно, можно ставить прочерк:
      — item timestamp value
      А так же желательна отправка поля с временной меткой, это позволит копить данные для отправки и отправлять пачку с одинаковыми items но различающимися по timestamp и value
      Прочерк вместо hostname полезен когда в конфиге агента указана опция Hostname= которая не равна системному имени сервера, вы с таким не сталкивались, но ситуация возможна.
        0
        А если в качестве файла указать этому SMcli /dev/stdout, а запускать не system-ом, а popen-ом и читать из его stdout-а — избежать временного файла не удастся? И если уж так хочется, то после того, как всё прочитали, и отослали метрики в заббикс — положить отчет в файлик. А то место, риск наткнуться на какой-нибудь logrotate между вызовами, и т.п.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое