first attempt. not live yet
This commit is contained in:
93
Check_scripts/HPE - ILO SNMP monitor.py
Normal file
93
Check_scripts/HPE - ILO SNMP monitor.py
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
__license__ = "MIT"
|
||||
__authors__ = "D.de Kooker <info@dcomputers.nl>"
|
||||
|
||||
"""
|
||||
This script is designed to monitor a HPE ilo using the python pysnmp module
|
||||
|
||||
Returncodes:
|
||||
0 - All OK
|
||||
1 - There is an error message retrieved by the SNMP monitor
|
||||
2 - There is an warning message retrieved by the SNMP monitor
|
||||
|
||||
Command line arguments:
|
||||
python Check_scripts/HPE - ILO SNMP monitor.py {ILO IP} {SNMP Community string}
|
||||
|
||||
Changelog:
|
||||
17-09-2023 - Initial creation of the script using openAI. Script doesn't work yet, returns errors
|
||||
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import importlib
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
# Check if pysnmp is installed
|
||||
try:
|
||||
importlib.import_module('pysnmp')
|
||||
except ImportError:
|
||||
print("pysnmp is not installed. Installing...")
|
||||
|
||||
# Specify the full path to pip based on the Python executable
|
||||
python_exe = sys.executable
|
||||
pip_cmd = f'"{python_exe}" -m pip'
|
||||
|
||||
# Use subprocess to install pysnmp using pip
|
||||
subprocess.run(f'{pip_cmd} install pysnmp', shell=True)
|
||||
|
||||
from pysnmp.hlapi import *
|
||||
|
||||
def snmp_query(target_ip, community_string, oids_to_query):
|
||||
error_occurred = False # Track if any errors occurred
|
||||
|
||||
for name, oid in oids_to_query.items():
|
||||
errorIndication, errorStatus, errorIndex, varBinds = next(
|
||||
getCmd(SnmpEngine(),
|
||||
CommunityData(community_string),
|
||||
UdpTransportTarget((target_ip, 161), timeout=5, retries=5),
|
||||
ContextData(),
|
||||
ObjectType(ObjectIdentity(oid)))
|
||||
)
|
||||
|
||||
if errorIndication:
|
||||
error_occurred = True
|
||||
print(f"Error querying {name}: {errorIndication}")
|
||||
else:
|
||||
for varBind in varBinds:
|
||||
print(f"{name}: {varBind.prettyPrint()}")
|
||||
|
||||
return error_occurred
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Monitor HPE server and iLO via SNMP.')
|
||||
parser.add_argument('target_ip', help='iLO IP address')
|
||||
parser.add_argument('community_string', help='SNMP community string')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
hardware_and_health = {
|
||||
'System Model': '1.3.6.1.2.1.1.1.0',
|
||||
'Serial Number': '1.3.6.1.4.1.232.2.2.2.1.9.1.3.2.0',
|
||||
'Asset Tag': '1.3.6.1.4.1.232.2.2.2.1.9.1.3.3.0',
|
||||
# 'CPU Usage': '1.3.6.1.4.1.232.11.2.4.1.0',
|
||||
# 'Memory Usage': '1.3.6.1.4.1.232.11.2.11.1.0',
|
||||
'Network Interfaces': '1.3.6.1.2.1.2.2.1',
|
||||
'Storage': '1.3.6.1.2.1.25.2',
|
||||
'Fans': '1.3.6.1.4.1.232.6.2.9.3.6.0',
|
||||
'Temperature': '1.3.6.1.4.1.232.6.2.9.2.6.0',
|
||||
'Power Supplies': '1.3.6.1.4.1.232.6.2.9.4.6.0',
|
||||
'Memory Errors': '1.3.6.1.4.1.232.6.2.6.8.1.0',
|
||||
'Drive Predictive Failures': '1.3.6.1.4.1.232.3.2.3.1.1.7.0',
|
||||
}
|
||||
|
||||
error_occurred = snmp_query(args.target_ip, args.community_string, hardware_and_health)
|
||||
|
||||
if error_occurred:
|
||||
exit(1) # Exit with code 1 (indicating error)
|
||||
else:
|
||||
exit(0) # Exit with code 0 (indicating success)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user