НОВОСТИ Мониторинг NetApp Volumes через SSH

NewsBot
Оффлайн

NewsBot

.
.
Регистрация
21.07.20
Сообщения
40.408
Реакции
1
Репутация
0
tkitou-f7n6p7-sip3k-igbxd1g.jpeg


Всем привет, меня зовут Игорь Сидоренко. Одной из основных сфер моей работы, а также моим хобби является мониторинг. Я расскажу о Zabbix и о том, как с его помощью замониторить необходимую нам информацию о томах NetApp, имея доступ только по SSH. Кому интересна тема мониторинга и Zabbix, прошу под кат.

Изначально мы мониторили тома, монтируя их к определенному серверу, на котором висел специальный шаблон, отлавливающий NFS-маунты на ноде и ставящий их на мониторинг, по аналогии с файловыми системами базового шаблона Linux. Маунт надо было прописать в fstab и примонтировать вручную — из-за этого многое терялось и забывалось.

Потом мне пришла в голову прекрасная идея: надо всё это автоматизировать. Было несколько вариантов:

  • Есть готовые шаблоны, работающие с SNMP, но доступов нет.
  • Получение списка томов и автоматический маунт на ноде: надо создавать папку, прописывать fstab, маунтить вот это всё, слишком много геморроя.
  • Есть же великолепный , но в нашей версии ONTAP он урезан и не дает пользователю нужную информацию.
  • Как-то использовать доступ по SSH для получения томов и постановки их на мониторинг.

Выбор пал на .

Низкоуровневое обнаружение (LLD)


Для начала нам необходимо создать , это будут названия наших томов. Всё это необходимо для того, чтобы вытащить конкретную информацию по нужному нам тому. Сырые данные выглядят примерно так (на момент написания их 114):


set -unit B; volume show -state online

ixdywl9eqh1p1go_zxfrizaiclu.png


Ну как же без костылей: напишем однострочный bash-скрипт, который будет выводить названия томов в формате JSON (поскольку это , cкрипты лежат на Zabbix-сервере в директории /usr/lib/zabbix/externalscripts):
netapp_volume_discovery.sh

#!/usr/bin/bash

SVM_NAME=""
SVM_ADDRESS=""
USERNAME=""
PASSWORD=""

for i in $(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USERNAME@$SVM_ADDRESS 'set -unit B; volume show -state online' | grep $SVM_NAME | awk {'print $2'}); do echo '{"volume_name":"'$i'"}'; done | jq -s '.


laomtwbd7ma5qeefwct0xctrt18.png


Теперь необходимо создать и на основе полученных данных создавать элементы данных:

zhp97swbiyfegowlqgi_bqjbhd0.png


bghbcc_4inq7nkizumuayyn6lew.png


Элементы данных


Для автоматического создания элементов данных необходимо сделать :

iub1sx1ukviu_x6irsjljtcnrco.png


Мы будем использовать мастер-элементы и несколько от них элементов. Таким образом, для каждого тома создается один мастер-элемент, в котором выполняется набор команд по SSH:


set -unit B; df -i -volume {#VOLUME_NAME}; volume show-space {#VOLUME_NAME}; statistics volume show -volume {#VOLUME_NAME}

Получаем вот такую простыню:

Get Volume: ackey_media info

Last login time: 9/15/2020 12:42:45
Filesystem iused ifree %iused Mounted on

/vol/ackey_media/ 96 311191 0% /ackey_media

Volume Name: ackey_media
Volume MSID: 2159592810
Volume DSID: 1317
Vserver UUID: 46a00e5d-c22d-11e8-b6ed-00a098d48e6d
Aggregate Name: NGHF_FAS2720_04
Aggregate UUID: 7ec21b4d-b4db-4f84-85e2-130750f9f8c3
Hostname: FAS2720_04
User Data: 20480B
User Data Percent: 0%
Deduplication: -
Deduplication Percent: -
Temporary Deduplication: -
Temporary Deduplication Percent: -
Filesystem Metadata: 1150976B
Filesystem Metadata Percent: 0%
SnapMirror Metadata: -
SnapMirror Metadata Percent: -
Tape Backup Metadata: -
Tape Backup Metadata Percent: -
Quota Metadata: -
Quota Metadata Percent: -
Inodes: 12288B
Inodes Percent: 0%
Inodes Upgrade: -
Inodes Upgrade Percent: -
Snapshot Reserve: -
Snapshot Reserve Percent: -
Snapshot Reserve Unusable: -
Snapshot Reserve Unusable Percent: -
Snapshot Spill: -
Snapshot Spill Percent: -
Performance Metadata: 28672B
Performance Metadata Percent: 0%
Total Used: 1212416B
Total Used Percent: 0%
Total Physical Used Size: 1212416B
Physical Used Percentage: 0%
Logical Used Size: 1212416B
Logical Used Percent: 0%
Logical Available: 10736205824B

DOMCLIC_SVM : 9/15/2020 12:42:51

*Total Read Write Other Read Write Latency

Volume Vserver Ops Ops Ops Ops (Bps) (Bps) (us)
----------- ----------- ------ ---- ----- ----- ----- ----- -------
ackey_media DOMCLIC_SVM 0 0 0 0 0 0 0


Из этой простыни необходимо отобрать нужные нам метрики.

Магия регулярных выражений


Изначально для я хотел использовать JavaScript, но как-то не осилил, не зашло. Поэтому остановился на регулярках, да и использую их практически везде.

Количество используемых инод


Отберем информацию только о инодах по каждому тому в два этапа:

hfopykvfrw55mtf_mcqozzpxy8e.png


71ws01ts-pq8mmf2mgx9zbqcvf0.png


Сначала вся информация:


\/vol\/\w+\/.*

zl_t6igdhwyvjy09epdqnmjivlw.png


mgvdwciiybzkewd-zpcud4carkm.png


Потом конкретно по метрикам:


(\d+)\s+(\d+)\s+(\d+)

n87vbge4bnznjwj46mzdb4wgc_m.png


qwwznlqxyxlmjawgyfnggr9ouly.png


Вывод — шаблон форматирования вывода. \N (где N=1..9) — управляющая последовательность заменяется N-ной совпадающей группой. Управляющая последовательность \0 заменяется совпадающим текстом:

  • \1 - Inode used on {#VOLUME_NAME} — количество использованных инод;
  • \2 - Inode free on {#VOLUME_NAME} — количество свободных инод;
  • \3 - Inode used percentage on {#VOLUME_NAME} — использованные иноды в процентах;
  • Inode total on {#VOLUME_NAME} — , количество доступных инод.


last(inode_free[{#VOLUME_NAME}])+last(inode_used[{#VOLUME_NAME}])

Количество используемого места


Здесь всё проще, данные и регулярки в более приятном формате:

2bi3od224fpmhvoa7t8qspmwuly.png


ppp-onzlnmqizlqa-ujfxrx_bwc.png


Выдергиваем нужную нам метрику и берем только число:


(?code>

5vwbgcev65vdts6hdwpvbwl7zte.png


m4izldetiyujxdszupcoo3-m-ag.png


Собираемые метрики:

  • Logical available on {#VOLUME_NAME} — количество доступного логического места;
  • Logical used percent on {#VOLUME_NAME} — использованное логическое место в процентах;
  • Logical used size on {#VOLUME_NAME} — количество использованного логического места;
  • Physical used percentage on {#VOLUME_NAME} — использованное физическое место в процентах;
  • Total physical used size on {#VOLUME_NAME} — количество использованного физического места;
  • Total used on {#VOLUME_NAME} — всего использовано места;
  • Total used percent on {#VOLUME_NAME} — всего использовано места в процентах;
  • Logical size on {#VOLUME_NAME} — , количество доступного логического места.


last(logical_available[{#VOLUME_NAME}])+last(total_used[{#VOLUME_NAME}])

Производительность томов


Почитав документацию и потыкав разные команды, я выяснил, что мы можем получать метрики по производительности наших томов. За это отвечает маленький кусочек:


statistics volume show -volume {#VOLUME_NAME}

8ws-lnbbjptvjszsje6f7pas7ny.png


9tze1ebsnfrdh11qescjmids3y8.png


Из общей простыни первой регуляркой мы отбираем метрики по производительности:


.DOMCLIC_SVM.*

q_-wb1lgd0wc89pmqbuc0q85keq.png


fmbsorilhautq_v6w6o5j3k3imm.png


Второй группируем числа:


(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)

g2-ahq_egdn3twufqot-sunhw1u.png


Где:

  • \1 - Total number of operations per second on {#VOLUME_NAME} — общее количество операций в секунду;
  • \2 - Read operations per second on {#VOLUME_NAME} — операций чтения в секунду;
  • \3 - Write operations per second on {#VOLUME_NAME} — операций записи в секунду;
  • \4 - Other operations per second on {#VOLUME_NAME} — другие операции в секунду (не знаю, что это, но зачем-то снимаю);
  • \5 - Read throughput in bytes per second on {#VOLUME_NAME} — скорость чтения в байтах в секунду;
  • \6 - Write throughput in bytes per second on {#VOLUME_NAME} — скорость записи в байтах в секунду;
  • \7 - Average latency for an operation in microseconds on {#VOLUME_NAME} — средняя задержка операций в микросекундах.

Алертинг


Набор триггеров стандартный, место и иноды:

btxalyyccegjbgn9ekxdy6ulr48.png


  • Free disk space less than 1% on {#VOLUME_NAME}
  • Free disk space less than 5% on {#VOLUME_NAME}
  • Free disk space less than 10% on {#VOLUME_NAME}
  • Free inodes less than 1% on {#VOLUME_NAME}
  • Free inodes less than 5% on {#VOLUME_NAME}
  • Free inodes less than 10% on {#VOLUME_NAME}

Визуализация


Визуализация приходится, в основном, на , это красиво и удобно. На примере одного тома выглядит примерно так:

mwttcjuwvqt1u-g8bobe6oxpimi.png


В правом верхнем углу есть кнопка Show in Zabbix, с помощью которой можно провалиться в Zabbix и увидеть все метрики по выбранному тому.

Итоги


  • Автоматическая постановка томов на мониторинг.
  • Автоматическое удаление томов из мониторинга, в случае удаление тома с NetApp.
  • Избавились от привязки к одному серверу и ручному монтированию томов.
  • Добавились метрики производительности по каждому тому. Теперь мы реже дергаем поддержку датацентра ради графиков с NetApp.

Скоро обещают обновить ONTAP и завезти расширенный API, шаблон переедет на .

Шаблон, скрипт и дашборд




Полезные ссылки



 
Сверху Снизу