Uvijek sam se pitao o temperaturi HDD-ova u mom NAS-u. Imam NAS u zatvorenoj prostoriji bez klime. Štoviše, rastavio sam NAS prije nekog vremena, i diskovi su bili jako vrući… Tada nisam mjerio temperaturu, ali sam se počeo brinuti. Možete pronaći mnoge rasprave o temperaturi NAS diska i njenom nadzoru iz okruženja Linux/Python. Ali nijedno od rješenja nije uspjelo za mene! Što sam htio: Praćenje temperature NAS HDD-a na - Nisam želio čitati vrijednost iz nekog dijela Linux podsustava, što bi moglo promijeniti sljedeće izdanje NAS softvera. pouzdan, dokumentiran način Htio sam vidjeti , koji je u bratovom podrumu, u jednom grafikonu. svoj kućni NAS i moj rezervni NAS Želio sam vidjeti vrijednosti u Želio sam potpunu fleksibilnost u izgledu grafikona, po mogućnosti sam ga postavio u Matplotlibu. grafikonu koji izgleda cool. Želim biti u mogućnosti preuzeti vrijednosti s nadzorne ploče NAS-a i . Na stolu imam . Već pokazuje temperaturu, vlažnost i razine zagađenja na mom balkonu te povijest dostupnosti moje internetske veze. Tamo želim vidjeti povijest temperature HDD-a. prikazati grafikone u stvarnom vremenu 2minlog zaslon Korak 1: Prikupljanje podataka o temperaturi Podatke ćemo prikupljati putem putem paketa . SNMP protokola pysnmp Razumijevanje SNMP-a i MIB-ova je široko korišten protokol za praćenje zdravlja i performansi mrežnih uređaja. Omogućuje prikupljanje podataka kao što su temperature, upotreba CPU-a i status diska. (Simple Network Management Protocol) SNMP su baze podataka informacija koje se mogu pretraživati putem SNMP-a. Svaki dio podataka identificiran je OID-om (Object Identifier), koji jedinstveno identificira varijablu koja se može pročitati ili postaviti putem SNMP-a. (Management Information Bases) MIB Morate navesti vrijednosti za prikupljanje. Imam Synology NAS. Oni datoteku na svojim stranicama. Moramo skupiti: MIB objavljuju MIB Naziv diska: 1.3.6.1.4.1.6574.2.1.1.2 Model diska: 1.3.6.1.4.1.6574.2.1.1.3 Temperatura diska: 1.3.6.1.4.1.6574.2.1.1.6 Na stranici pysnmp postoji . Napisao je tijelo Python skripte za mene, rješavajući sve poteškoće sa SNMP API-jem i rukovanjem asinkronim pozivima. Slijedi ključni dio: izvrstan chatbot 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}) Morate omogućiti SNMP protokol u Synology NAS postavkama: Korak 2: implementirajte skriptu i pošaljite podatke na obradu Skriptu sam postavio izravno na NAS u Docker okruženju. Morate osigurati da se Docker spremnik ponovno pokrene nakon eventualnog ponovnog pokretanja. Iz tog sam razloga postavio jednostavnu datoteku docker-compose.yaml: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature Zatim pokrenite Docker s . docker-compose up -d Povezan sam s - jednostavnim sustavom za prikupljanje, obradu i vizualizaciju podataka. Tamo šaljete podatke putem HTTPS zahtjeva (kodiranih u URL-u ili u tijelu) i tamo postavljate skriptu za vizualizaciju. Grafikoni su tada lako dostupni s bilo kojeg mjesta. 2minlog Možete koristiti 2minlog. Alternativno, možete poslati podatke u bazu podataka ili lokalni datotečni sustav. Korak 3: Vizualizacija podataka Postavio sam jednostavnu Matplotlib skriptu za prikaz grafikona. Zapravo, zamolio sam ChatGPT (o1-preview) da to učini i bilo je prilično dobro. Python skripta nije bila savršena, ali je bila dovoljno dobra da brzo završi zadatak. Upit je ispod. 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 ... Skripta za vizualizaciju postavljena je unutar platforme 2minlog. Možete ga pokrenuti i lokalno. Skripta je dostupna na . GitHubu Zamatanje Možete koristiti potpuno upravljani za prikupljanje, obradu i vizualizaciju podataka. Provjerite . Prikazujem rezultate na Android tabletu koji stoji na mom stolu i kružim različitim grafikonima pomoću . Također možete spremiti podatke na svoj lokalni datotečni sustav i učiniti isto. 2minlog dokumentaciju Image Tunera Rješenje je testirano na Synology NAS-u, ali se može prilagoditi za druge. Reference: GitHub Repozitorij: Projekt nadzora temperature NAS-a Pysnmp dokumentacija: pysnmp biblioteka Pysnmp paket chatbot: SNMP guru Postavljanje zaslona: i Automatsko osvježavanje cijelog zaslona postavljanje starog Android tableta kao zaslona Synology MIB datoteke**:** Synology MIB vodič 2minlog: 2minlog platforma za vizualizaciju podataka #Synology #SynologyNAS #Temperature #Monitoring #DataVisualization #Matplotlib #SNMP #2minlog #Python #Docker