Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как мониторить программу в Windows по snmp?

Iskatel Ученик (201), открыт 3 недели назад
Нужна некая альтернатива штатному компоненту Windows Server под названием SNMP Service, которая могла бы передавать по snmp произвольные данные, например вычисленные в результате работы скриптов. Нужно это, чтобы подружить Windows Server с системой монитоинга, которая умеет забирать данные только по snmp. А более подробно нужно это, чтобы мониторить потребление ресурсов некоторыми сервисами, причём многопоточными, вот допустим есть база данных PostgreSQL, в диспетчере задач вижу несколько строк postgres.exe, не одну, возможно путаю, возможно это не многопотоковость, а многопроцесность, но не суть важно, главное, что нужна будет сумма всех postgres.exe, вернее 2 суммы: потребление памяти и процент загрузки CPU и передать эти две суммы в систему мониторинга по snmp, которая на другом хосте развёрнута.
1 ответ
@GLAVQA Ученик (201) 3 недели назад
Что тебе нужно сделать:
✅ Цель:
Суммировать нагрузку postgres.exe по:

CPU (%)

RAM (MB)

Экспортировать эти значения через SNMP для внешней системы мониторинга.

? Подход: SNMP + скрипты через SNMP Extend (или SNMP Agent Simulator)
? Способ 1: [Net-SNMP for Windows + Extend]
Это самая универсальная и легкая реализация:

? Установка Net-SNMP:
Скачай Net-SNMP for Windows или официальный дистрибутив.

Установи его на сервер.

? Принцип работы:
Net-SNMP позволяет подключить внешний скрипт, который будет вызываться по SNMP и возвращать результат.

? Пример конфига snmpd.conf:
conf
Копировать
Редактировать
# Вызовет скрипт при запросе OID .1.3.6.1.4.1.2021.51
extend .1.3.6.1.4.1.2021.51 postgres_monitor c:/scripts/postgres_snmp.bat
? Пример скрипта postgres_snmp.bat:
bat
Копировать
Редактировать
@echo off
python c:\scripts\postgres_snmp.py
? Пример Python-скрипта postgres_snmp.py:
python
Копировать
Редактировать
import psutil

cpu_sum = 0.0
mem_sum = 0

for proc in psutil.process_iter(['name', 'cpu_percent', 'memory_info']):
try:
if 'postgres' in proc.info['name'].lower():
cpu_sum += proc.info['cpu_percent']
mem_sum += proc.info['memory_info'].rss // (1024 * 1024) # MB
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue

print(f"PostgreSQL CPU: {cpu_sum:.2f}%")
print(f"PostgreSQL RAM: {mem_sum} MB")
? Как это видит SNMP:
После настройки, SNMP-запрос к .1.3.6.1.4.1.2021.51 вернёт строки вида:

yaml
Копировать
Редактировать
PostgreSQL CPU: 14.23%
PostgreSQL RAM: 312 MB
Ты можешь привязать эти значения в мониторинге (например, Zabbix, Nagios, LibreNMS и т.д.) через SNMP OID.

? Альтернатива: SNMP Simulator (агент, отдающий статические или динамические значения)
Если тебе проще — можешь использовать snmpsim, он позволяет отдавать произвольные значения по SNMP, с обновлением из скрипта.

? Резюме:

Что Как
Собрать данные Python (через psutil) или PowerShell
Передать по SNMP Через Net-SNMP + extend
Мониторинг с другого хоста Запрос по SNMP OID, получаешь нужные данные
? Хочешь — сделаю тебе готовый архив:
postgres_snmp.py + конфиг + bat-файл

Готовый snmpd.conf с нужным OID

Инструкцию на русском как установить и проверить

Просто скажи, в каком виде удобно — zip или в виде инструкций под копипаст.
С уважением, GLAVQA
IskatelУченик (201) 3 недели назад
Net-SNMP нужно из исходников собирать правильно, а бинарный пакет под Windows только версии 5.5.1 на SourceForge есть?
IskatelУченик (201) 3 недели назад
Вы такой подробный ответ дали, но понятно не всё.
Похожие вопросы