Есть серверное приложение в виде демона. Задача следить за его состоянием и видеть значения потребления некоторых ресурсов (в том числе каких-то внутренних ресурсов, значение которых можно получить только изнутри приложения). Как лучше реализовать?
Приходят в голову варианты:
1. Zabbix или подобная система мониторинга. В таком случае нужно ли писать плагин для системы или лучше воспользоваться, например, SNMP? Плагин удовлетворяет всем требованиям, кроме того что это не универсально, хотелось бы чтобы не было привязки к конкретной системе мониторинга. SNMP — сразу отпугивает аутентификация, вернее её отсутствие (я не спец в администрировании, сужу по заббиксу, там просто вводится адрес SNMP-агента и все, никаких логинов-паролей) — это не приемлемо. Еще в заббиксе заметил IPMI, но это больше для настройки платформы, для мониторинга приложения наверное будет смотреться странно. JXM не подходит — не Java.
2. Мониторинг через веб. Проблем нет, кроме как в том, что это бесполезно. Да, можно будет посмотреть на меняющиеся циферки и красивые графики, но нужна нормальная система мониторинга, что-то унифицированное, поддерживающее автоматизацию и интегрированное с другими субъектами мониторинга.
3. Написать свою софтинку. Та же проблема что и в пункте 2.
4. Ну я не знаю. Может использовать какой-то сторонний сервис?
Меня бы больше всего устроил вариант с реализацией какого-нибудь стандартного протокола (например SNMP).
Что думаете по этому поводу? Если однозначный ответ дать сложно, то я был бы признателен, если бы вы оценили/сравнили существующие решения. И вообще, как эту проблему решают? (Ну не может же быть, чтобы весь мониторинг ограничивался только мониторингом апача/nginx/mysql?!)
Заббикс умеет выполнять любые команды в агенте. Вы можете добавить какой-нибудь простой CLI интерфейс к вашей системы, чтобы bin/status отдавал просто текстовые данные или искал по какому-то параметру.
У меня реализованно так, что приложения хранят свои статусы и основные показатели в Redis, а Zabbix читает оттуда. Получается, что со стороны заббикса, нужно знать только ключ, со стороны приложений редис и так везде используется
Конечно выбор Заббикс (или коммерческие системы мониторинга).
Не 2 по тому, что для мониторинга не редко нужно повышать уровень доступа (некоторые моменты можно узнать только руту, или кому-то из группы ХХХ). Через вэб такое делать… опасно.
Не 3. По тому что зачем писать то, что написано давно, и используется активно.
Не 4. По тому, что не все Вы сможете отдавать в наружу. Да и не доверяю я этим проксиагентам.
SNMP — сразу отпугивает аутентификация, вернее её отсутствие — всё хорошо с аутентификацией zabbix snmpv3 authpriv. Даже шифрование есть. Но кроме SNMP, к забиксу можно прикрутить любой транспорт или плагин. У меня к примеру он спрашивает о состояни баз и фронтов через WEB. В энтерпрайзах почти всегда мониторинг идет через SNMP. Есть даже железки, которые сериальный порт обворачивают в SNMP ;)
Короче почитайте в группах. Забиксовое комюнити умеет мониторить почти всё.
Спасибо за подробный ответ. Все таки, какой вариант выбрать: реализация SNMP-протокола в своем приложении или реализовать CLI/HTTP/MySQL/Redis (отдача статистики в виде XML через HTTP уже реализована) интерфейс и просто заббикс настроить на понимание этого?
Вам никто не мешает мешать это всё в кучу. Удобно через HTTP — пожалуйста, удобно через SNMP — туда его.
Под большинство конкретных вещей есть уже и реализации и примеры конфигураций.
Я лишь не рекомендую переводить всё на один транспорт. А идти по принципу как удобнее — так и делаем.