Sempre m'he preguntat sobre la temperatura dels HDD al meu NAS. Tinc el NAS en una habitació tancada sense aire condicionat. A més, vaig desmuntar el NAS fa un temps, i els discs estaven molt calents... Aleshores no mesurava la temperatura, però em vaig començar a preocupar. Podeu trobar moltes discussions sobre la temperatura de la unitat NAS i el seguiment des d'un entorn Linux/Python. Però cap de les solucions em va funcionar! El que volia: Monitorització de la temperatura del disc dur NAS d'una : no volia llegir el valor d'alguna part del subsistema Linux, cosa que pot canviar la propera versió del programari NAS. manera fiable i documentada Volia veure , que es troba al soterrani del meu germà, en un gràfic. el meu NAS de casa i el meu NAS de seguretat Volia veure els valors en un Volia una flexibilitat total en l'aspecte del gràfic, preferiblement configurar-lo jo mateix a Matplotlib. gràfic d'aspecte genial. Vull poder treure els valors del tauler del NAS i . Tinc una asseguda al meu escriptori. Ja mostra la temperatura, la humitat i els nivells de contaminació del meu balcó i l'historial de la meva disponibilitat de connexió a Internet. Vull veure l'historial de la temperatura del disc dur allà. mostrar gràfics en temps real pantalla de 2 minlog Pas 1: recopilació de les dades de temperatura Recollirem dades mitjançant mitjançant el paquet . el protocol SNMP pysnmp Comprensió de SNMP i MIB és un protocol molt utilitzat per supervisar la salut i el rendiment dels dispositius de xarxa. Permet la recollida de dades com ara temperatures, ús de la CPU i estat del disc. (Simple Network Management Protocol) SNMP són bases de dades d'informació que es poden consultar mitjançant SNMP. Cada dada s'identifica mitjançant un OID (identificador d'objecte), que identifica de manera única una variable que es pot llegir o configurar mitjançant SNMP. (Management Information Bases) Les MIB Heu d'especificar els valors que voleu recopilar. Tinc Synology NAS. a les seves pàgines. Hem de reunir: de MIB Publiquen el fitxer MIB Nom del disc: 1.3.6.1.4.1.6574.2.1.1.2 Model de disc: 1.3.6.1.4.1.6574.2.1.1.3 Temperatura del disc: 1.3.6.1.4.1.6574.2.1.1.6 Hi ha un a la pàgina pysnmp. Va escriure el cos de l'script de Python per a mi, gestionant totes les dificultats amb l'API SNMP i gestionant trucades asíncrones. La secció clau és la següent: excel·lent bot de xat 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}) Heu d'habilitar el protocol SNMP a la configuració del Synology NAS: Pas 2: implementeu l'script i envieu dades per processar-les Vaig implementar l'script directament al NAS a l'entorn Docker. Heu d'assegurar-vos que el contenidor Docker s'iniciï de nou després de l'eventual reinici. He configurat un fitxer simple docker-compose.yaml per aquest motiu: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature A continuació, inicieu el Docker amb . docker-compose up -d Estic afiliat al , un sistema senzill per recopilar, processar i visualitzar dades. Envieu les dades allà mitjançant sol·licituds HTTPS (codificades a l'URL o al cos) i hi configureu un script de visualització. Aleshores, els gràfics estan disponibles des de qualsevol lloc que necessiteu. 2minlog Podeu utilitzar el 2minlog. Alternativament, podeu enviar les dades a una base de dades o un sistema de fitxers local. Pas 3: Visualització de les dades Vaig configurar un script Matplotlib senzill per mostrar el gràfic. De fet, vaig demanar a ChatGPT (o1-preview) que ho fes i ho va fer bastant bé. L'script de Python no era perfecte, però era prou bo per acabar la tasca ràpidament. La indicació és a continuació. 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 ... L'script de visualització es desplega a la plataforma 2minlog. També podeu executar-lo localment. L'script està disponible a . GitHub Embolicant-ho Podeu utilitzar un totalment gestionat per recopilar, processar i visualitzar les dades. Consulteu la . Visualitzo els resultats en una tauleta d'Android asseguda a la meva taula i cicle pels diferents gràfics amb . També podeu desar les dades al vostre sistema de fitxers local i fer el mateix. 2minlog documentació Image Tuner La solució es prova en un Synology NAS, però es pot adaptar per a altres. Referències: Repositori GitHub: Projecte de monitorització de la temperatura del NAS Documentació Pysnmp: Biblioteca pysnmp Chatbot del paquet Pysnmp: guru de SNMP Configuració de la pantalla: i Actualització automàtica de pantalla completa configuració de la tauleta Android antiga com a pantalla Fitxers Synology MIB**:** Guia Synology MIB 2minlog: plataforma de visualització de dades 2minlog #Synology #SynologyNAS #Temperatura #Monitorització #Visualització de dades #Matplotlib #SNMP #2minlog #Python #Docker