paint-brush
Python + SNMP = Denbora errealeko NAS diskoaren tenperatura monitorea!🌡️ Ikasi nola egin nuenarabera@support2minlog
Historia berria

Python + SNMP = Denbora errealeko NAS diskoaren tenperatura monitorea!🌡️ Ikasi nola egin nuen

arabera 2minlog6m2024/10/31
Read on Terminal Reader

Luzeegia; Irakurri

Denbora errealeko NAS HDD tenperatura kontrolatzeko sistema fidagarria konfiguratu dut. Python script bat Docker ingurune batean exekutatzen da zuzenean NAS-en. Tenperatura SNMP protokoloaren bidez biltzen du eta datuak 2minlog datuak bistaratzeko plataformara bidaltzen ditu. Tenperaturaren garapena Matplotlib bidez bistaratzen dut eta Android tablet batean bistaratzen dut.
featured image - Python + SNMP = Denbora errealeko NAS diskoaren tenperatura monitorea!🌡️ Ikasi nola egin nuen
2minlog HackerNoon profile picture
0-item
1-item
2-item

Nire NASeko HDDen tenperaturari buruz galdetu izan diot beti. NAS-a gela itxi batean daukat aire girorik gabe. Gainera, duela denbora pixka bat NAS desmuntatu nuen, eta diskoak oso bero zeuden... Orduan ez nuen tenperatura neurtzen, baina kezkatuta hasi nintzen. Eztabaida asko aurki ditzakezu NAS unitatearen tenperaturari eta Linux/Python ingurunetik kontrolatzeari buruz. Baina irtenbideetako batek ere ez zidan balio!


Zer nahi nuen:

  • NAS HDD tenperatura kontrolatzea modu fidagarrian eta dokumentatuan - Ez nuen Linux azpisistemaren zatiren baten balioa irakurri nahi izan, eta horrek NAS softwarearen hurrengo bertsioa alda dezake.
  • Nire etxeko NAS eta nire anaiaren sotoan dagoen nire babesko NAS grafiko batean ikusi nahi nituen.
  • Balioak itxura politaren grafiko batean ikusi nahi nituen. Grafiko itxuran erabateko malgutasuna nahi nuen, ahal izanez gero neuk konfiguratzea Matplotlib-en.
  • NAS paneletik balioak atera eta grafikoak denbora errealean bistaratzeko gai izan nahi dut . 2 minutuko pantaila bat daukat mahaian eserita. Dagoeneko erakusten du nire balkoiaren tenperatura, hezetasun eta kutsadura mailak eta nire Interneteko konexioaren erabilgarritasunaren historia. Bertan HDDaren tenperaturaren historia ikusi nahi dut.


1. urratsa: tenperaturaren datuak biltzea

Datuak SNMP protokoloaren bidez bilduko ditugu pysnmp paketearen bidez.


SNMP eta MIBak ulertzea

SNMP (Simple Network Management Protocol) sareko gailuen osasuna eta errendimendua kontrolatzeko oso erabilia den protokoloa da. Tenperaturak, PUZaren erabilera eta diskoaren egoera bezalako datuak biltzeko aukera ematen du.

MIBak (Management Information Bases) SNMP bidez kontsulta daitezkeen informazio datu-baseak dira. Datu bakoitza OID (Object Identifier) baten bidez identifikatzen da, SNMP bidez irakurri edo ezar daitekeen aldagai bat modu esklusiboan identifikatzen duena.


Biltzeko MIB balioak zehaztu behar dituzu. Synology NAS dut. MIB fitxategia euren orrialdeetan argitaratzen dute. Bildu behar dugu:

  • Diskoaren izena: 1.3.6.1.4.1.6574.2.1.1.2
  • Disko eredua: 1.3.6.1.4.1.6574.2.1.1.3
  • Diskoaren tenperatura: 1.3.6.1.4.1.6574.2.1.1.6


Chatbot bikaina dago pysnmp orrian. Python script-aren gorputza idatzi zidan, SNMP APIarekin zailtasun guztiak kudeatzen eta dei asinkronikoak kudeatzen. Funtsezko atala honakoa da:

 async def run(server_name, ipaddress, username, passwd, outinfo): # SNMP walk for disk name, model, and temperature oids = [ ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.2')), # Disk name (diskID) ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.3')), # Disk model (diskModel) ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.6')) # Disk temperature (diskTemperature) ] errorIndication, errorStatus, errorIndex, varBinds = await bulkCmd( SnmpEngine(), UsmUserData(username, passwd, authProtocol=usmHMACSHAAuthProtocol), # Use the appropriate auth protocol await UdpTransportTarget.create((ipaddress, 161)), ContextData(), 0, 10, # Increase the max-repetitions to get more results in one request *oids # Query disk name, model, and temperature ) if errorIndication: print(f"Error: {errorIndication}") elif errorStatus: print(f"Error Status: {errorStatus.prettyPrint()} at {errorIndex and varBinds[int(errorIndex) - 1] or '?'}") else: disk_data = {} for varBind in varBinds: oid, value = varBind oid_str = str(oid) # Disk name if oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.2'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['name'] = value # Disk model elif oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.3'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['model'] = value # Disk temperature elif oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.6'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['temperature'] = value # Print out the disk information for index, info in disk_data.items(): name = info.get('name', 'Unknown') model = info.get('model', 'Unknown') temperature = info.get('temperature', 'Unknown') name = str(name) model = str(model) temperature = str(temperature) print(f"IP Address {ipaddress}, Disk {index}: Name: {name}, Model: {model}, Temperature: {temperature} °C") outinfo.append({'server_name': server_name, 'ip': ipaddress, 'disk': index, 'name': name, 'model': model, 'temperature': temperature})


Synology NAS ezarpenetan SNMP protokoloa gaitu behar duzu:

2. urratsa: zabaldu scripta eta bidali datuak prozesatzeko

Scripta zuzenean zabaldu nuen NAS-en Docker ingurunean. Ziurtatu behar duzu Docker edukiontzia berriro abiarazten dela behin betiko berrabiarazi ondoren. Docker-compose.yaml fitxategi sinple bat konfiguratu dut arrazoi horregatik:

 version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature

Ondoren, abiarazi Docker-a docker-compose up -d rekin.


2minlog- ekin afiliatuta nago - datuak biltzeko, prozesatzeko eta ikusteko sistema sinplea. Datuak hara bidaltzen dituzu HTTPS eskaeren bidez (URLan edo gorputzean kodetuta) eta bertan bistaratzeko script bat konfiguratzen duzu. Ondoren, grafikoak erraz eskura daitezke behar duzun tokitik.


2minlog-a erabil dezakezu. Bestela, datuak datu-base batera edo tokiko fitxategi-sistema batera bidal ditzakezu.

3. urratsa: Datuen bistaratzea

Matplotlib script soil bat konfiguratu dut grafikoa bistaratzeko. Egia esan, ChatGPT (o1-preview) egiteko eskatu nion, eta nahiko ondo egin zuen. Python script-a ez zen perfektua, baina nahikoa ona zen zeregina azkar amaitzeko. Gonbidapena behean dago.

 Here is a csv file. Can you write a code: Split data into different graphs by combining the server name and name (eg, DS920+ / Disk 1). Each graph will show the temperature. There will be a title in each graph (eg, DS920+ / Disk 1) The graphs will have the same temperature range. The background will be black, graph background will be also black, the graph color will be from dark green (low temperatures) to light green (high temperatures). There will be two thin lines - 20 °C (blue) and 45 °C (red). Trim the data for last week with tickmarks at midnight of every day. The data are in UTC time. Convert it to Europe/Berlin time zone. The resolution of the total image is hxw 600 x 1024 pixels. Save the image to PNG. disk,ip,model,name,server_name,temperature,timestamp 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:19:48.723761 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:19:49.253975 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:19:49.818734 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:19:50.393793 0,10.0.2.9,ST12000NM001G-2MV103,Disk 1,DS220j,28,2024-09-19T20:19:50.873142 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:20:02.119583 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:20:02.596654 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:20:03.101480 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:20:03.697423 0,10.0.2.9,ST12000NM001G-2MV103,Disk 1,DS220j,28,2024-09-19T20:20:04.221348 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:25:02.254611 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:25:02.714633 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:25:03.295622 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:25:03.780728 ...


Bistaratze-gidoia 2minlog plataformaren barruan zabaltzen da. Lokalean ere exekutatu dezakezu.


GitHub- en dago eskuragarri gidoia.

Itzultzen

Erabat kudeatutako 2minlog bat erabil dezakezu datuak biltzeko, prozesatzeko eta ikusteko. Begiratu dokumentazioa . Emaitzak nire mahai gainean eserita dagoen Android tablet batean bistaratzen ditut eta grafiko ezberdinen arabera ibiltzen ditut Image Tuner- ekin. Datuak zure fitxategi sistema lokalean ere gorde ditzakezu eta gauza bera egin dezakezu.


Irtenbidea Synology NAS batean probatzen da, baina beste batzuetarako egokitu daiteke.

Erreferentziak:


#Synology #SynologyNAS #Tenperatura #Monitorizazioa #DatuBistaratzea #Matplotlib #SNMP #2minlog #Python #Docker