Zabbix: Оптимизация и чистка базы данных
Zabbix: Оптимизация и чистка базы данных
Спустя 2 года решил обновить запись Zabbix: Чистка базы данных, так как есть более эффективные методы борьбы с «распуханием» базы , да и в целом информации накопилось больше чем можно удержать в голове и evernote.
Основная задача, которую пытаемся решить — малой кровью обеспечить хорошую производительность сервера и предотвратить неконтролируемый рост базы.
Настройка PING3
Администрировать устройство можно следующими способами: WEB интерфейс, Telnet, SNMP.
Подробное описание можно почитать тут http://www.equicom.ua/ping/ping3/Ping3(-knock).pdf
При первом включении, по умолчанию на устройстве установлен статический IP адрес 192.168.2.200 (DHCP не поддерживается). Также созданы два аккаунта для входа:
- admin:admin (логин:пароль) — пользователь с правами администратора (полный доступ ко всем функциям устройства)
- user:user (логин:пароль) — пользователь с ограниченными правами (только наблюдение за состоянием устройства)
После успешной авторизации будет открыта страница системных настроек, на которой можно увидеть номер используемой версии firmware. Далее необходимо произвести конфигурирование устройства и настройку всех требуемых параметров:
- На вкладке System указываем нужный статический IP для устройства. Также изменяем пароли для авторизации.
- На вкладке Analog Lines настраиваем значения, для аналоговых входов.
Устройство имеет три внешних аналоговых входа, именуемых AN1-AN3. Входы AN1 и AN2 выведены на одноименные разъемы, указанные на корпусе устройства. Вход AN3 выведен на разъем EXT. Еще один вход AN4 является внутренним и предназначен для измерения собственного напряжения питания устройства PING3.
Для точности получение данных, нужно изменять параметры получения значений. К каждому отдельному датчику, свои параметры.
Для получения значения температуры в градусах Цельсия в настройках аналогового входа, к которому подключен термодатчик, необходимо задать такие коэффициенты:
- O (offset) = –50
- M (multiplier) = 330
- Averaging = 100 (или больше)
Для получения значения собственного напряжения питания устройства в вольтах установите для входа AN4 следующие параметры:
- O (offset) = 0.5
- M (multiplier) = 21.7
- Averaging = 100
На этом, настройку устройства PING3 можно считать завершенной.
Получение данных с устройства PING3
Самым распространенным способом считать информацию с устройства, есть протокол сетевого управления SNMP. Устройство PING3 поддерживает версии SNMP v1, v2c.
Таблица (неполная, только для аналоговых входов) с поддерживаемыми OID выглядит следующим образом:
OID | Type | AN1 | AN2 | AN3 | AN4 | ext |
1.3.6.1.4.1.35160.1.16.1.7.1 | Integer | value offset | ||||
1.3.6.1.4.1.35160.1.16.1.8.1 | Integer | value multiplier | ||||
1.3.6.1.4.1.35160.1.16.1.9.1 | Integer | low limit | ||||
1.3.6.1.4.1.35160.1.16.1.10.1 | Integer | high limit | ||||
1.3.6.1.4.1.35160.1.16.1.11.1 | Integer | hysteresis | ||||
1.3.6.1.4.1.35160.1.16.1.12.1 | Integer | averaging | ||||
1.3.6.1.4.1.35160.1.16.1.13.1 | Integer | current value | ||||
1.3.6.1.4.1.35160.1.16.1.7.2 | Integer | value offset | ||||
1.3.6.1.4.1.35160.1.16.1.8.2 | Integer | value multiplier | ||||
1.3.6.1.4.1.35160.1.16.1.9.2 | Integer | low limit | ||||
1.3.6.1.4.1.35160.1.16.1.10.2 | Integer | high limit | ||||
1.3.6.1.4.1.35160.1.16.1.11.2 | Integer | hysteresis | ||||
1.3.6.1.4.1.35160.1.16.1.12.2 | Integer | averaging | ||||
1.3.6.1.4.1.35160.1.16.1.13.2 | Integer | current value | ||||
1.3.6.1.4.1.35160.1.16.1.7.3 | Integer | value offset | ||||
1.3.6.1.4.1.35160.1.16.1.8.3 | Integer | value multiplier | ||||
1.3.6.1.4.1.35160.1.16.1.9.3 | Integer | low limit | ||||
1.3.6.1.4.1.35160.1.16.1.10.3 | Integer | high limit | ||||
1.3.6.1.4.1.35160.1.16.1.11.3 | Integer | hysteresis | ||||
1.3.6.1.4.1.35160.1.16.1.12.3 | Integer | averaging | ||||
1.3.6.1.4.1.35160.1.16.1.13.3 | Integer | current value | ||||
1.3.6.1.4.1.35160.1.16.1.7.4 | Integer | value offset | ||||
1.3.6.1.4.1.35160.1.16.1.8.4 | Integer | value multiplier | ||||
1.3.6.1.4.1.35160.1.16.1.9.4 | Integer | low limit | ||||
1.3.6.1.4.1.35160.1.16.1.10.4 | Integer | high limit | ||||
1.3.6.1.4.1.35160.1.16.1.11.4 | Integer | hysteresis | ||||
1.3.6.1.4.1.35160.1.16.1.12.4 | Integer | averaging | ||||
1.3.6.1.4.1.35160.1.16.1.13.4 | Integer | current value | ||||
1.3.6.1.4.1.35160.1.26.0 | Integer | Power Sensor |
Полный список OID можно посмотреть при помощи приложения SnmpWalk.exe (качаем тут https://snmpsoft.com/shell-tools/snmp-walk/), выполнив команду:
SnmpWalk.exe -r:192.168.2.200
Подключение к Zabbix
Сбор данных в систему Zabbix, задача индивидуальная, в зависимости от подключенных датчиков и их особенностей. Разработан готовый шаблон, для мониторинга температуры и 220 (используются датчики, указаны в описании статьи) в серверной, можно скачать тут. Каждое устройство добавляем как новый узел сети, с указанием интерфейса SNMP.
Внедрение Zabbix
Как видим, Zabbix полезный инструмент, позволяющий не только найти причины ошибки, но и избежать ее повторения в будущем. Однако, для получения полной и корректной информации, следует выполнить его настройку. Это технически сложный процесс, для которого не подходит универсальная инструкция. У специалистов It-lite большой опыт таких работ, благодаря чему они быстро и качественно выполнят внедрение мониторинга Zabbix. При этом, они обязательно учитывают нюансы настраиваемой инфраструктуры.
Обнаружение интерфейсов микротик
В Zabbix есть прекрасный механизм низкоуровневого обнаружения и есть подготовленный готовый шаблон, который вам нужно будет скачать тут. После импортируем этом шаблон в Zabbix и присоединяем его к нашему узлу сети.
После через некоторое время минуты 3-5 можно зайти и посмотреть последние данные и убедиться, что наши интерфейсы появились в узлах сети и данные от них приходят.
Так как у меня канал от провайдера подключен в порт «ether1» будем мониторить его. Дальше идем Настройки-> Узлы сети-> Элементы данных -> ищем тут наш интерфейс ether1 (In) и ether1 (Out). Отмечаем их и копируем в заранее созданный отдельный шаблон именно для интерфейса и для конкретного узла. (можно, конечно, и по-другому, но так в последующем будет удобно всем этим управлять).
Дальше отсоединяем шаблон (с очищением данных), который мы использовали для обнаружения интерфейсов и присоединяем тот в который только скопировали.
Почему именно так, а не сделать обнаружение для всех разом? Это не удобно так как на каждый придется заходить отключать ненужное и если вы будете VPNиться до микротика то и эти подключения будут автоматом создаваться в Zabbix. Вы можете придумать свои варианты).
Низкоуровневые обнаружения в теории
LLD появился в Zabbix где-то с версии 2.0. Эта техника применяется не только для автообнаружения на хостах, LLD еще очень хорошо разгружает работу сервера Zabbix. В случае активной проверки сервер Zabbix сам отправляет запрос на хост, чтобы получить метрику. Обычно запрос ставится в очередь наряду со всеми остальными запросами и обрабатывается в порядке очереди, но, если метрик много, сервер будет серьезно загружен. В случае с LLD в режиме проверки хост zabbix-trapper сам отправляет серверу список метрик, а спустя небольшое время — и сами метрики со значениями. То есть нагрузка выходит минимальная. Сервер сам решает, что принимать, а что нет, исходя из настроек.
Реализация технологии LLD на хосте следующая: используется связка «приложение — скрипт — сендер Zabbix — сервер Zabbix». Давайте пройдемся по всем этапам, чтобы было понятнее.
- Инициализация скрипта.
- Запрос от скрипта к приложению на получение метрик.
- Обработка запроса от скрипта приложением.
- Ответ скрипту от приложения с передачей данных.
- Формирование скриптом JSON LLD для передачи имен метрик на сервер Zabbix.
- Выдача JSON при вызове скрипта.
- Обработка полученных от приложения данных путем формирования метрик и их значений (к примеру, с записью в файл).
- Вызов сендера Zabbix скриптом и инициализация отправки метрик на сервер.
- Сендер передает запрос на сервер Zabbix. Режим проверки на сервере zabbix-trapper.
- Сервер Zabbix считывает метрики и отправляет ответ для сендера.
- Сендер получает ответ от сервера и логирует его на экран или в файл.
Чтобы было наглядней, я подготовил для вас небольшую графическую схему взаимодействия компонентов. Надеюсь, она вам поможет.
Схема взаимодействия компонентов Zabbix LLD
В остальных вопросах вы можете смело обращаться к документации Zabbix. Русскоязычная документация лежит в открытом доступе.
Чтобы ясно понимать принципы работы и взаимодействия компонентов в системе, всегда рисуйте схему. Это поможет вам увидеть полную картину работы системы и освежит память в случае, если вы давно не притрагивался к компонентам системы.
Шаг 5: Добавление Хоста на Zabbix — Server Ubuntu Linux
По умолчанию Zabbix отслеживает только тот сервер, на котором он установлен. В этом разделе мы добавим Zabbix-Host на Zabbix-Server через браузер.
Итак, войдите в свой экземпляр Zabbix-сервера используя браузер.
В левой навигационной панели выберите пункт Configuration > > Hosts
Настройка хостов на Zabbix сервера
Перейдите в правый верхний угол и нажмите кнопку «Создать хост«. (Create host)
Создать хост
В появившемся окне заполните данные удаленного хоста, такие как имя хоста. видимое имя, IP-адрес, краткое описание и нажмите на кнопку «Выбрать» (Select) рядом с текстовым полем «Группы«.
Заполните все поля
В появившемся списке выберите пункт «Серверы Linux‘ и нажмите кнопку «Выбрать«.
Добавить группу хостов
Это приведет вас обратно, и вы сможете просмотреть только что добавленную группу, как показано ниже.
Добавить группу серверов Linux
Затем перейдите на вкладку «шаблоны» (Templates) и нажмите кнопку «Выбрать» рядом с текстовым полем «Связать новые шаблоны» (Link new Templates).
Перейдите на вкладку шаблоны
Нажмите на кнопку «Выбрать«(Select) рядом с текстовым полем «Группа хостов«, как показано на рисунке.
Поиск группы хостов
Нажмите на опцию «Шаблоны/операционные системы» (Templates/Operating systems), как показано на рисунке.
выберите шаблоны опции операционной системы
Затем выберите опцию «Template OS Linux by Zabbix agent’ и нажмите кнопку «Выбрать» (Select).
Выберите шаблон OS Linux с помощью Zabbix агента
Затем нажмите на кнопку «Добавить» (Add).
Ссылка новый шаблон для Zabbix агента
Теперь ваш хост будет указан на панели мониторинга, как показано на рисунке ниже.
Удаленный хост добавлен на в Zabbix сервер
Низкоуровневое обнаружение в ZABBIX: правила LLD
В официальной документации эта тема 1 рассмотрена подробно, но на мой взгляд примеры слишком узкие (штатное обнаружение файловых систем, snmp OID’ов и сетевых интерфейсов) и обсуждение вопроса начинается совсем не с того конца. По поводу пользовательских правил обнаружения присутствует лишь небольшая «приписка» в самом конце с примером скрипта на perl (!).
Мне же хочется рассмотреть вопрос значительно шире, но в то же время на конкретных примерах. Я расскажу об LLD на основе задачи анализа данных производительности дисковой подсистемы Linux-серверов. Метрики производительности буду получать утилитой iostat (пакет sysstat). Пример вывода данных:
Вы же можете анализировать вывод любой другой программы.
Что это?
Для тех, кто ещё не знает о чем идет речь, небольшое пояснение на основе простого примера:
у вас есть сервер, на сервере один жесткий диск. Вам нужно отслеживать набор метрик этого диска. Вы без труда создаете шаблон, наполняете его ключами данных, триггерами и прочими элементами и ставите на мониторинг. Далее вам нужно мониторить второй сервер, на котором два диска (разумеется с разными именами). Перед вами встает задача написать новый или дополнить существующий шаблон ещё одним диском с точно такими же метриками. А что, если потом у вас появится сервер с 10 дисками или более?
Правила обнаружения элегантно решают подобные задачи, самостоятельно определяя список отслеживаемых объектов с заранее установленными одинаковыми метриками для каждого.
Правила обнаружения
Для создания правила обнаружения необходимо зайти в шаблон мониторинга (или создать новый, если его ещё нет) — Правила обнаружения — Создать правило обнаружения:
Подавляющее большинство параметров произвольные и вы можете выбрать для них любые значения, но все же я поясню некоторые моменты:
- Имя — любое на ваш вкус;
- Тип — только Zabbix агент;
- Ключ — выберите любой, но потом вы должны использовать это же имя ключа в конфигурации агента Zabbix;
- Интервал обновлений — не выставляйте слишком маленький интервал, ведь аппаратная конфигурация сервера обычно меняется редко. Для отладки можете использовать значение в 60 сек., чтобы не ждать слишком долго;
- Фильтр — имя макроса, которое будет использоваться для извлечения имен блочных устройств (актуально для моего примера. У вас это может быть что-то другое, например имена сетевых интерфейсов). Макрос должен быть заключен в <#>, в имени допускается использование символов A-Z , 0-9 , _;
Нажимайте Сохранить и на этом этапе работы на стороне сервера Zabbix завершены, в следующих статьях мы сюда ещё вернемся.
Набор данных
Агент должен возвращать серверу набор отслеживаемых элементов в формате json (список блочных устройств, если опираться на мой пример). Это главное и единственное требование. Каким образом вы это реализуете уже не так важно. Данные в человекочитаемом виде могут выглядеть так: