Zabbix + Iostat: мониторинг дисковой подсистемы

    Zabbix + Iostat: мониторинг дисковой подсистемы.
    image
    Зачем?
    Дисковая подсистема одна из важных подсистем сервера и от уровня нагрузки на дисковую подсистему зачастую зависит очень многое, например скорость отдачи контента или то как быстро будет отвечать база данных. Это в большей степени относится к почтовым или файловым серверам, серверам БД. Вобщем, показатели дисковой производительности отслеживать нужно. На основании графиков производительности дисковой подсистемы мы можем принять решение о необходимости наращивания мощностей задолго до того как петух клюнет. Да и вобще полезно поглядывать от релиза к релизу как работа разработчиков сказывается на уровне нагрузки.

    Под катом, о мониторинге и о том как настроить.

    Зависимости:
    Мониторинг реализован через zabbix агента и две утилиты: awk и iostat (пакет sysstat). Если awk идет в дистрибутивах по умолчанию, то iostat требуется установить с пакетом sysstat (тут отдельное спасибо Sebastien Godard и сотоварищи).

    Известные ограничения:
    Для мониторинга нужен sysstat начиная с версии 9.1.2, т.к. там есть очень важное изменение: «Added r_await and w_await fields to iostat's extended statistics». Так что следует быть внимательным, в некоторых дистрибутивах, например в CentOS немного «стабильная» и менее фичастая версия sysstat.
    Если же отталкиваться от версии zabbix (2.0 или 2.2) то тут вопрос не принципиален, работает на обоих версиях. На 1.8 не заработает т.к. используется Low level discovery.

    Возможности (чисто субъективно, по мере убывания полезности):
    • Low level discovery (далее просто LLD) для автоматического обнаружения блочных устройств на наблюдаемом узле;
    • утилизация блочного устройства в % — удобная метрика для отслеживания общей нагрузки на устройстве;
    • latency или отзывчивость — доступна как общая отзывчивость, так и отзывчивость на операциях чтения/записи;
    • величина очереди (в запросах) и средний размер запроса (в секторах) — позволяет оценить характер нагрузки и степень загруженности устройства;
    • текущая скорость чтения/записи на устройство в человекопонятных килобайтах;
    • количество запросов чтения/записи (в секунду) объединенных при постановке в очередь на выполнение;
    • iops — величина операций чтения/записи в секунду;
    • усредненное время обслуживания запросов (svctm). Вообще она deprecated, разработчики обещают ее давно спилить, но все никак руки не доходят.

    Вобщем как видно, здесь доступны все те метрики которые есть в iostat (кто незнаком с этой утилитой настоятельно рекомендую заглянуть в man iostat).

    Доступные графики:
    Графики рисуются per-device, LLD обнаруживает устройства которые попадают под регулярное выражение "(xvd|sd|hd|vd)[a-z]", так что если ваши диски имеют другие имена, можно легко внести соответствующие изменения. Такая регулярка сделана чтобы обнаруживать устройства которые будут родительскими по отношению к прочим разделам, LVM томам, MDRAID массивам и т.п. Вобщем чтобы не собирать лишнего. Немного отвлеклись, итак список графиков:
    • Disk await — отзывчивость устройства (r_await, w_await);
    • Disk merges — операции слияния в очереди (rrqm/s, wrqm/s);
    • Disk queue — состояние очереди (avgrq-sz, avgqu-sz);
    • Disk read and write — текущие значения чтения/записи на устройство (rkB/s, wkB/s);
    • Disk utilization — утилизация диска и значение IOPS (%util, r/s, w/s) — позволяет неплохо отслеживать скачки в утилизации и чем, чтением или записью они были вызваны.

    Аналоги и отличия:
    В заббиксе есть коробочные варианты для похожего мониторинга, это ключи vfs.dev.read и vfs.dev.write. Они хороши и прекрасно работают, но менее информативны чем iostat. Например в iostat есть такие метрики как latency и utilization.
    Также есть аналогичный шаблон от Michael Noman на мой взгляд отличие только одно, она заточена на старые версии iostat, ну и + небольшие синтаксические изменения.

    Где взять:
    Итак, мониторинг состоит из файла конфигурации для агента, двух скриптов для сбора/получения данных и шаблон для веб-интерфейса. Все это доступно в репозитории на Github, поэтому любым доступным способом (git clone, wget, curl, etc...) скачиваем их на машины которые хотим замониторить и переходим к следующему пункту.

    Как настроить:
    • iostat.conf — содержимое этого файла следует поместить в файл конфигурации zabbix агента, либо положить в каталог конфигурации который указан в Include опции основной конфигурации агента. Вобщем зависит от политики партии. Я использую второй вариант, для кастомных конфигов у меня отдельная директория.
    • scripts/iostat-collect.sh и scripts/iostat-parse.sh — эта два рабочих скрипта следует скопировать в /usr/libexec/zabbix-extensions/scripts/. Тут также можно использовать удобное вам размещение, однако в таком случае не забудьте поправить пути в параметрах определенных в iostat.conf. Не забудьте проверить что они исполняемы (mode=755).

    Теперь все готово, запускаем агента и переходим на сервер мониторинга и выполняем команду (не забываем подменить agent_ip):
    # zabbix_get -s agent_ip -k iostat.discovery
    

    Таким образом, проверяем с сервера мониторинга что iostat.conf подгрузился и отдает информацию, заодно смотрим что LLD работает. В качестве ответа вернется JSON с именами обнаруженных устройств. Если ответа не пришло, значит что-то сделали не так.

    Также есть такой момент, что zabbix server не дожидается выполнения некоторых item'ов со стороны агентов (iostat.collect). Для этого следует увеличить значения Timeout.

    Как настроить в web интейрфейс:
    Теперь остался шаблон iostat-disk-utilization-template.xml. Через веб интерфейс импортируем его в раздел шаблонов и назначем на наш хост. Тут все просто. Теперь остается ждать примерно один час, такое время установлено в LLD правиле (тоже настраивается). Или можно поглядывать в Latest Data наблюдаемого хоста, в раздел Iostat. Как только там появились значения, можно перейти в раздел графиков и понаблюдать за первыми данными.

    И напоследок тройка скринов графиков c локалхоста))):
    Непосредственно данные в Latest Data:
    image

    Графики отзывчивости (Latency):
    image

    График утилизации и IOPS:
    image

    Вот и собственно и все, спасибо за внимание.
    Ну и по традиции, пользуясь случаем передаю привет Федорову Сергею (Алексеевичу) :)
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 13
    • 0
      Извините, но вы сами в тексте привели ссылку на первоисточник на русском языке. Зачем дублировать это на хабре? Поправить пару параметров не так уж сложно, на мой взгляд.
      • 0
        Забавно, верно все говорите, однако 53 человека посчитали полезным иметь эту статью у себя в избранном…
        • 0
          Несколько раз столкнулся с тем что «первоисточник» вызывает какие-то сложности, здесь же я попробовал все расжевать и в будущем буду давать уже эту ссылку.
        • 0
          Вроде всё выполнил правильно, но в Latest Data вижу только Iostat: Collect statistics 0, iostat.discovery диски видит, файл в /tmp/ создается и руками если сделать iostat.metric данные получаются, но в заббиксе кроме Iostat: Collect statistics 0 ничего нет.
          • 0
            Как пройдет цикл LLD все появится, я писал об этом:
            >> Теперь остается ждать примерно один час, такое время установлено в LLD правиле (тоже настраивается).
            • 0
              Да всё верно, спасибо.
              • 0
                Незачто, c LLD правилами вседа так.
          • 0
            Вчера настроил отправку SMS Забиксом через модем ZTE, приедет диск, настроим Йопсы. Спасибо девелоперам за наше светлое мониторинговое будущее! Девелоперам СЛАВА! ))
            • 0
              Помогите разобраться с проблемой. По некоторым характеристикам нет данных

              www.dropbox.com/s/vm2zzux631hezhv/Latest_data_refreshed_every_30_sec_20140603_104405_20140603_104415.jpg

              а для некоторых график выглядит вот так

              www.dropbox.com/s/zvvvrvp59ozarkl/History_refreshed_every_30_sec_20140603_104504_20140603_104508.jpg

              В чем может быть причина? Скрипты же отрабатывают, но почему то некорректно. IOSTAT версии 10, ZABBIX и клиент и агент 2.2.3.

              В скриптах ничего не менял, время в collect стоит 8 секунд, в агенте увеличил таймаут до 10.
              • +1
                в агенте подними до максимальных 30 таймаут
                • 0
                  Не помогло. До этого стоял таймаут 3 секунды и выдавало ZBX_NOTSUPPORTED. Когда поднял до 10 перестало. Думаю если бы дело было в таймауте то выдавало бы опять таки ZBX_NOTSUPPORTED.
                  • 0
                    Может отдавать пустой ответ, если скрипт не успевает отработать. Запусти в цикле опрос zabbix_get-ом
              • 0
                Возился с настройкой около часа, не мог понять почему не происходит collect данных, таймаут в конфиге агента выставил в 30 секунд…
                Оказывается еще нужно таймаут в конфиге сервера тоже поменять… :)

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