HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <h2>Задача</h2>
1 <h2>Задача</h2>
2 <p>Необходимо настроить мониторинг нагрузки на дисковые хранилища DELL MD36XX. Есть проблема - полки не умеют отдавать данные по snmp. Кстати, подобные проблемы также встречаются у хранилищ IBM, HP и других вендоров.</p>
2 <p>Необходимо настроить мониторинг нагрузки на дисковые хранилища DELL MD36XX. Есть проблема - полки не умеют отдавать данные по snmp. Кстати, подобные проблемы также встречаются у хранилищ IBM, HP и других вендоров.</p>
3 <h2>Окружение</h2>
3 <h2>Окружение</h2>
4 <p>Сами вендоры предоставляют клиентское ПО. Так называемое StorageManager's. Некоторое из них только под Windows, но в последнее время появилось и под Linux. В моем случае ПО установилось под Linux и имеет в своём составе консольную утилиту SMcli. С помощью SMcli можно снимать статистику в файл:</p>
4 <p>Сами вендоры предоставляют клиентское ПО. Так называемое StorageManager's. Некоторое из них только под Windows, но в последнее время появилось и под Linux. В моем случае ПО установилось под Linux и имеет в своём составе консольную утилиту SMcli. С помощью SMcli можно снимать статистику в файл:</p>
5 SMcli -n StorageName -S -quick -c "save storageArray performanceStats file=\\"/var/log/md36xx.stat\\";"<p>И выглядит она следующим образом</p>
5 SMcli -n StorageName -S -quick -c "save storageArray performanceStats file=\\"/var/log/md36xx.stat\\";"<p>И выглядит она следующим образом</p>
6 "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" ...<h2>Варианты решений</h2>
6 "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" ...<h2>Варианты решений</h2>
7 <p>Данную информацию можно распарсить и отправить в zabbix, причем для отправки есть несколько вариантов</p>
7 <p>Данную информацию можно распарсить и отправить в zabbix, причем для отправки есть несколько вариантов</p>
8 <p>Zabbix agent и UserParameter, в котором можно расписать каждый из интересуемых параметров, например:</p>
8 <p>Zabbix agent и UserParameter, в котором можно расписать каждый из интересуемых параметров, например:</p>
9 UserParameter = dell.md.discovery, /path/script_discovery UserParameter = dell.md.totalio[*], /path/script2 $1 UserParameter = dell.md.currmb[*], /path/script3 $1<p>Zabbix_sender, который даёт возможность одним вызовом скрипта отправить все параметры разом. Именно этот вариант я и выбрал.</p>
9 UserParameter = dell.md.discovery, /path/script_discovery UserParameter = dell.md.totalio[*], /path/script2 $1 UserParameter = dell.md.currmb[*], /path/script3 $1<p>Zabbix_sender, который даёт возможность одним вызовом скрипта отправить все параметры разом. Именно этот вариант я и выбрал.</p>
10 <h2>Настройки в zabbix</h2>
10 <h2>Настройки в zabbix</h2>
11 <p>В zabbix необходимо сконфигурировать новый хост и создать в нем<strong>discover rule</strong></p>
11 <p>В zabbix необходимо сконфигурировать новый хост и создать в нем<strong>discover rule</strong></p>
12 <p>Прописать в нём фильтр:</p>
12 <p>Прописать в нём фильтр:</p>
13 <p>И добавить<strong>item prototypes</strong></p>
13 <p>И добавить<strong>item prototypes</strong></p>
14 <p>Тут детальнее, как именно прописывается прототип:</p>
14 <p>Тут детальнее, как именно прописывается прототип:</p>
15 <h2>Отсылка в Zabbix</h2>
15 <h2>Отсылка в Zabbix</h2>
16 <p>Отсылку данных можно производить через<strong>zabbix_sender -i &lt;key_value_file&gt;</strong></p>
16 <p>Отсылку данных можно производить через<strong>zabbix_sender -i &lt;key_value_file&gt;</strong></p>
17 <p>Формат файла:</p>
17 <p>Формат файла:</p>
18 <p>Причём в качестве<strong>value</strong>можно передавать json для discovery в формате:</p>
18 <p>Причём в качестве<strong>value</strong>можно передавать json для discovery в формате:</p>
19 { 'data' :[ {'{#MDDEV}': 'drive1'}, {'{#MDDEV}': 'drive1'}, ] }<p>Где {#MDDEV} - макрос через которые мы обнаруживаем имена наших устройств/дисков, с которых собираемся снимать статистику.</p>
19 { 'data' :[ {'{#MDDEV}': 'drive1'}, {'{#MDDEV}': 'drive1'}, ] }<p>Где {#MDDEV} - макрос через которые мы обнаруживаем имена наших устройств/дисков, с которых собираемся снимать статистику.</p>
20 <h2>Итого алгоритм действий следующий:</h2>
20 <h2>Итого алгоритм действий следующий:</h2>
21 <p>- снимаем статистику через<strong>SMcli</strong>, сохраняем в файл; - парсим полученный файл; - генерим файл для<strong>zabbix_sende</strong>r.</p>
21 <p>- снимаем статистику через<strong>SMcli</strong>, сохраняем в файл; - парсим полученный файл; - генерим файл для<strong>zabbix_sende</strong>r.</p>
22 <p>Всё это можно реализовать<strong>bash-скриптом</strong>. Но мне проще всего показалось реализовать один скрипт на Python, который потом будет вызываться из крона раз в минуту. Трудности возникли только с модулем отсылки в zabbix. Он устанавливался и под 2.7 и под 3.6, но запустился только под 3.6.</p>
22 <p>Всё это можно реализовать<strong>bash-скриптом</strong>. Но мне проще всего показалось реализовать один скрипт на Python, который потом будет вызываться из крона раз в минуту. Трудности возникли только с модулем отсылки в zabbix. Он устанавливался и под 2.7 и под 3.6, но запустился только под 3.6.</p>
23 <p>Cкрипт можно взять в<a>GitHub</a></p>
23 <p>Cкрипт можно взять в<a>GitHub</a></p>
24 <p><em>Есть вопрос? Напишите в комментариях!</em></p>
24 <p><em>Есть вопрос? Напишите в комментариях!</em></p>
25  
25