Palagi kong iniisip ang tungkol sa temperatura ng mga HDD sa aking NAS. Mayroon akong NAS sa isang saradong silid na walang airco. Bukod dito, na-disassemble ko ang NAS kanina, at talagang mainit ang mga disc... Hindi ko sinukat ang temperatura noon, ngunit nagsimula akong mag-alala. Makakahanap ka ng maraming talakayan sa temperatura ng drive ng NAS at pagsubaybay nito mula sa kapaligiran ng Linux/Python. Ngunit wala sa mga solusyon ang gumana para sa akin! Ang gusto ko: Pagsubaybay sa temperatura ng NAS HDD sa isang - Hindi ko nais na basahin ang halaga mula sa ilang bahagi ng subsystem ng Linux, na maaaring magbago sa susunod na paglabas ng NAS software. maaasahang, dokumentado na paraan Gusto kong makita , na nasa basement ng aking kapatid, sa isang graph. ang aking NAS sa bahay at ang aking backup na NAS Gusto kong makita ang mga halaga sa isang Gusto ko ng kabuuang flexibility sa hitsura ng graph, mas mainam na i-set up ito nang mag-isa sa Matplotlib. cool-looking graph. Gusto kong makuha ang mga halaga mula sa dashboard ng NAS at . Mayroon akong na nakaupo sa aking desk. Ipinapakita na nito ang mga antas ng temperatura, halumigmig, at polusyon sa aking balkonahe at ang kasaysayan ng pagkakaroon ng aking koneksyon sa internet. Gusto kong makita ang history ng temperatura ng HDD doon. magpakita ng mga graph sa real time 2minlog display Hakbang 1: Pagkolekta ng data ng temperatura Mag-iipon kami ng data sa pamamagitan ng sa pamamagitan ng package. SNMP protocol pysnmp Pag-unawa sa SNMP at MIB ay isang malawakang ginagamit na protocol para sa pagsubaybay sa kalusugan at pagganap ng mga network device. Pinapayagan nito ang pagkolekta ng data tulad ng mga temperatura, paggamit ng CPU, at status ng disk. (Simple Network Management Protocol) Ang SNMP ay mga database ng impormasyon na maaaring itanong sa pamamagitan ng SNMP. Ang bawat piraso ng data ay kinikilala ng isang OID (Object Identifier), na natatanging kinikilala ang isang variable na maaaring basahin o itakda sa pamamagitan ng SNMP. (Management Information Bases) Ang mga MIB Kailangan mong tukuyin ang mga halaga upang tipunin. Mayroon akong Synology NAS. file sa kanilang mga pahina. Kailangan nating magtipon: ng MIB Ini-publish nila ang MIB Pangalan ng disk: 1.3.6.1.4.1.6574.2.1.1.2 Modelo ng disk: 1.3.6.1.4.1.6574.2.1.1.3 Temperatura ng disk: 1.3.6.1.4.1.6574.2.1.1.6 Mayroong isang sa pahina ng pysnmp. Isinulat nito ang katawan ng script ng Python para sa akin, pinangangasiwaan ang lahat ng mga paghihirap sa SNMP API at paghawak ng mga async na tawag. Ang pangunahing seksyon ay sumusunod: mahusay na 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}) Kailangan mong paganahin ang SNMP protocol sa mga setting ng Synology NAS: Hakbang 2: I-deploy ang script at magpadala ng data para sa pagproseso Direktang ini-deploy ko ang script sa NAS sa kapaligiran ng Docker. Dapat mong tiyakin na magsisimula muli ang lalagyan ng Docker pagkatapos ng pag-restart. Nag-set up ako ng isang simpleng docker-compose.yaml file para sa kadahilanang iyon: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature Pagkatapos ay simulan ang Docker gamit . docker-compose up -d Ako ay kaakibat sa - isang simpleng sistema para mangalap, magproseso, at mag-visualize ng data. Ipapadala mo ang data doon sa pamamagitan ng mga kahilingan sa HTTPS (naka-encode sa URL o sa katawan) at nag-set up ng visualization script doon. Ang mga graph ay madaling magagamit mula sa kahit saan na kailangan mo. 2minlog Maaari mong gamitin ang 2minlog. Bilang kahalili, maaari mong ipadala ang data sa isang database o lokal na file system. Hakbang 3: Visualization ng data Nag-set up ako ng simpleng Matplotlib script para ipakita ang graph. Sa totoo lang, hiniling ko sa ChatGPT (o1-preview) na gawin ito, at maganda ang ginawa nito. Ang script ng Python ay hindi perpekto, ngunit ito ay sapat na mabuti upang matapos ang gawain nang mabilis. Nasa ibaba ang prompt. 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 ... Ang visualization script ay na-deploy sa loob ng 2minlog platform. Maaari mo ring patakbuhin ito nang lokal. Available ang script sa . GitHub Binabalot ito Maaari kang gumamit ng ganap na pinamamahalaang para mangalap, magproseso, at mailarawan ang data. Tingnan ang . Ipinapakita ko ang mga resulta sa isang Android tablet na nakaupo sa aking mesa at umiikot sa iba't ibang mga graph na may . Maaari mo ring i-save ang data sa iyong lokal na file system at gawin ang parehong. 2minlog dokumentasyon Image Tuner Ang solusyon ay sinubukan sa isang Synology NAS, ngunit maaaring iakma para sa iba. Mga sanggunian: GitHub Repository: NAS Temperature Monitoring Project Dokumentasyon ng Pysnmp: pysnmp Library Pysnmp package chatbot: SNMP guru Display setup: at Full Screen Autorefresh Setup Old Android Tablet bilang Display Synology MIB Files**:** Synology MIB Guide 2minlog: 2minlog data visualization platform #Synology #SynologyNAS #Temperature #Monitoring #DataVisualization #Matplotlib #SNMP #2minlog #Python #Docker