Ответ
Это классическая задача для pull-модели мониторинга, которую я решал в изолированных сегментах сети. Основной принцип: агент на целевом сервере только предоставляет метрики, а сервер мониторинга сам забирает их.
Стандартное решение на стеке Prometheus:
-
На целевом сервере (без исходящих):
- Устанавливаем и запускаем экспортеры (например,
node_exporterдля системных метрик). Они работают как веб-серверы на локальном порту../node_exporter --web.listen-address="0.0.0.0:9100"
- Устанавливаем и запускаем экспортеры (например,
-
На сервере мониторинга (который имеет доступ к целевому серверу):
- В конфигурации Prometheus (
prometheus.yml) добавляем таргет.scrape_configs: - job_name: 'isolated-node' static_configs: - targets: ['<IP_целевого_сервера>:9100'] # Prometheus сам подключается к этому адресу
- В конфигурации Prometheus (
Если прямой доступ к порту 9100 с сервера мониторинга тоже запрещен, используем SSH-туннель как временный или аварийный канал:
# Выполняем на сервере мониторинга:
ssh -N -L 9100:localhost:9100 user@<IP_целевого_сервера>
# Теперь Prometheus может скрапить localhost:9100
Для более сложных сценариев (например, когда исходящий трафик разрешен по расписанию) можно использовать:
- Pushgateway: Краткосрочные задачи (например, cron jobs) могут отправлять (push) свои метрики в Pushgateway, который уже находится в доступной сети. Однако это не для долгоживущих процессов.
- Агенты с кэшированием: Такие как Telegraf, которые можно настроить на сбор метрик и их буферизацию, с последующей отправкой раз в N часов через разрешенный временной интервал.
Ключевой принцип, который я применяю: архитектура мониторинга должна соответствовать политикам безопасности сети, а не обходить их.