Mindig is kíváncsi voltam a HDD hőmérsékletére a NAS-omban. A NAS egy zárt szobában van, légkondi nélkül. Ráadásul régebben szétszedtem a NAS-t, és nagyon forrók voltak a lemezek... Akkor még nem mértem a hőmérsékletet, de kezdtem aggódni. Számos vitát találhat a NAS-meghajtó hőmérsékletéről és annak Linux/Python környezetből történő megfigyeléséről. De nekem egyik megoldás sem vált be!
Amit akartam:
- NAS HDD hőmérséklet-figyelés megbízható, dokumentált módon – nem akartam kiolvasni az értéket a Linux alrendszer valamely részéből, ami megváltoztathatja a NAS szoftver következő kiadását.
- Egy grafikonon akartam látni az otthoni NAS-omat és a tartalék NAS-omat , amely a bátyám pincéjében van.
- Az értékeket egy jó megjelenésű grafikonon akartam látni. Teljes rugalmasságot akartam a grafikon megjelenésében, lehetőleg magam állítva be a Matplotlibben.
- Szeretném kivenni az értékeket a NAS irányítópultjáról, és valós időben megjeleníteni a grafikonokat . Van egy 2 minlogos kijelző az asztalomon. Már mutatja az erkélyem hőmérsékletét, páratartalmát és szennyezettségi szintjét, valamint internetkapcsolatom elérhetőségének történetét. Ott szeretném látni a HDD hőmérséklet előzményeit.
1. lépés: A hőmérsékleti adatok összegyűjtése
Az adatokat SNMP protokollon keresztül gyűjtjük a pysnmp csomagon keresztül.
Az SNMP és a MIB megértése
Az SNMP (Simple Network Management Protocol) egy széles körben használt protokoll a hálózati eszközök állapotának és teljesítményének figyelésére. Lehetővé teszi olyan adatok gyűjtését, mint például a hőmérséklet, a CPU-használat és a lemez állapota.
A MIB-ek (Management Information Bases) olyan információk adatbázisai, amelyek SNMP-n keresztül lekérdezhetők. Minden adatot egy OID (Object Identifier) azonosít, amely egyedileg azonosít egy változót, amely SNMP-n keresztül olvasható vagy beállítható.
Meg kell adnia a begyűjtendő MIB értékeket. Synology NAS-om van. A MIB fájlt közzéteszik az oldalaikon. Össze kell gyűjtenünk:
- Lemez neve: 1.3.6.1.4.1.6574.2.1.1.2
- Lemezmodell: 1.3.6.1.4.1.6574.2.1.1.3
- Lemez hőmérséklete: 1.3.6.1.4.1.6574.2.1.1.6
A pysnmp oldalon van egy kiváló chatbot . Ez írta nekem a Python szkript törzsét, kezelve az SNMP API-val kapcsolatos összes nehézséget és kezelve az aszinkron hívásokat. A legfontosabb rész a következő:
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})
Engedélyeznie kell az SNMP protokollt a Synology NAS beállításaiban:
2. lépés: Telepítse a szkriptet, és küldje el az adatokat feldolgozásra
A szkriptet közvetlenül a NAS-ra telepítettem a Docker környezetben. Biztosítania kell, hogy a Docker-tároló újrainduljon az esetleges újraindítás után. Ebből az okból állítottam be egy egyszerű docker-compose.yaml fájlt:
version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature
Ezután indítsa el a Dockert docker-compose up -d
paranccsal.
Csatlakozom a 2minloghoz – egy egyszerű rendszer az adatok összegyűjtésére, feldolgozására és megjelenítésére. Az adatokat HTTPS-kéréseken keresztül (az URL-ben vagy a törzsben kódolva) küldi el, és ott beállít egy vizualizációs szkriptet. A grafikonok ezután bárhonnan elérhetők.
Használhatja a 2minlogot. Alternatív megoldásként elküldheti az adatokat adatbázisba vagy helyi fájlrendszerbe.
3. lépés: Az adatok megjelenítése
Beállítottam egy egyszerű Matplotlib szkriptet a grafikon megjelenítéséhez. Valójában a ChatGPT-t (o1-preview) kértem meg, és elég jól sikerült. A Python szkript nem volt tökéletes, de elég jó volt a feladat gyors befejezéséhez. A felszólítás lent található.
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 ...
A vizualizációs szkript a 2minlog platformon belül kerül telepítésre. Helyben is futtathatja.
A szkript elérhető a GitHubon .
Becsomagolva
Használhat egy teljesen felügyelt 2minlogot az adatok összegyűjtésére, feldolgozására és megjelenítésére. Tekintse meg a dokumentációt . Az eredményeket az asztalomon ülő Android táblagépen jelenítem meg, és az Image Tuner segítségével körbejárom a különböző grafikonokat. Az adatokat a helyi fájlrendszerére is mentheti, és ugyanezt megteheti.
A megoldást Synology NAS-on tesztelték, de másokhoz is adaptálható.
Referenciák:
- GitHub Repository: NAS Temperature Monitoring Project
- Pysnmp dokumentáció: pysnmp Library
- Pysnmp csomag chatbot: SNMP guru
- Kijelző beállítása: Teljes képernyős automatikus frissítés és a régi Android táblagép beállítása képernyőként
- Synology MIB-fájlok**:** Synology MIB-útmutató
- 2minlog: 2minlog adatvizualizációs platform
#Synology #SynologyNAS #Hőmérséklet #Monitoring #DataVisualization #Matplotlib #SNMP #2minlog #Python #Docker