תמיד תהיתי לגבי טמפרטורת הדיסקים הקשיחים ב-NAS שלי. יש לי את ה-NAS בחדר סגור ללא מיזוג אוויר. יתרה מכך, פירקתי את ה-NAS לפני זמן מה, והדיסקים היו ממש לוהטים... לא מדדתי אז את הטמפרטורה, אבל התחלתי להיות מודאג. אתה יכול למצוא דיונים רבים על טמפרטורת כונן NAS וניטור זה מסביבת Linux/Python. אבל אף אחד מהפתרונות לא עבד בשבילי! מה שרציתי: ניטור טמפרטורת NAS HDD - לא רציתי לקרוא את הערך מחלק כלשהו של תת-מערכת לינוקס, מה שעשוי לשנות את המהדורה הבאה של תוכנת NAS. בצורה אמינה ומתועדת רציתי לראות , שנמצא במרתף של אחי, בגרף אחד. את ה-NAS הביתי שלי ואת ה-NAS הגיבוי שלי רציתי לראות את הערכים רציתי גמישות מוחלטת במראה הגרף, רצוי להגדיר אותו בעצמי ב-Matplotlib. בגרף מגניב למראה. אני רוצה להיות מסוגל להוציא את הערכים מלוח המחוונים של ה-NAS ולהציג . יש לי יושב על השולחן שלי. זה כבר מראה את הטמפרטורה, הלחות ורמות הזיהום במרפסת שלי ואת ההיסטוריה של זמינות חיבור האינטרנט שלי. אני רוצה לראות את היסטוריית הטמפרטורה של HDD שם. גרפים בזמן אמת צג 2minlog שלב 1: איסוף נתוני הטמפרטורה נאסוף נתונים באמצעות באמצעות חבילת . פרוטוקול SNMP pysnmp הבנת SNMP ו-MIBs הוא פרוטוקול בשימוש נרחב לניטור התקינות והביצועים של התקני רשת. זה מאפשר איסוף נתונים כגון טמפרטורות, שימוש במעבד ומצב דיסק. (Simple Network Management Protocol) SNMP הם מסדי נתונים של מידע שניתן לבצע שאילתה באמצעות SNMP. כל פיסת נתונים מזוהה על ידי OID (זיהוי אובייקט), המזהה באופן ייחודי משתנה שניתן לקרוא או להגדיר באמצעות SNMP. (Management Information Bases) MIBs עליך לציין את ערכי לאיסוף. יש לי Synology NAS. הם בדפים שלהם. אנחנו צריכים לאסוף: ה-MIB מפרסמים את קובץ MIB שם דיסק: 1.3.6.1.4.1.6574.2.1.1.2 דגם דיסק: 1.3.6.1.4.1.6574.2.1.1.3 טמפרטורת דיסק: 1.3.6.1.4.1.6574.2.1.1.6 יש בדף pysnmp. זה כתב לי את גוף הסקריפט של Python, טיפל בכל הקשיים עם SNMP API וטיפול בקריאות אסינכרון. להלן סעיף המפתח: צ'אט בוט מצוין 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}) עליך להפעיל את פרוטוקול SNMP בהגדרות Synology NAS: שלב 2: פרוס את הסקריפט ושלח נתונים לעיבוד פרסתי את הסקריפט ישירות על ה-NAS בסביבת Docker. עליך לוודא שהמכולה של Docker מתחילה שוב לאחר ההפעלה מחדש. הגדרתי קובץ docker-compose.yaml פשוט מסיבה זו: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature לאחר מכן הפעל את ה- Docker עם . docker-compose up -d אני קשור ל - מערכת פשוטה לאיסוף, עיבוד והצגה של נתונים. אתה שולח לשם את הנתונים באמצעות בקשות HTTPS (מקודדות ב-URL או בגוף) ומגדיר שם סקריפט להדמיה. לאחר מכן, הגרפים יהיו זמינים מכל מקום שאתה צריך. -2minlog אתה יכול להשתמש ב-2minlog. לחלופין, ניתן לשלוח את הנתונים למסד נתונים או למערכת קבצים מקומית. שלב 3: הדמיה של נתונים הגדרתי סקריפט פשוט של Matplotlib כדי להציג את הגרף. למעשה, ביקשתי מ-ChatGPT (o1-preview) לעשות את זה, וזה עשה די טוב. התסריט של Python לא היה מושלם, אבל הוא היה מספיק טוב כדי לסיים את המשימה במהירות. ההנחיה נמצאת למטה. 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 ... סקריפט ההדמיה נפרס בתוך פלטפורמת 2minlog. אתה יכול גם להפעיל אותו באופן מקומי. התסריט זמין ב- . GitHub עוטף את זה אתה יכול להשתמש ב מנוהל במלואו כדי לאסוף, לעבד ולהמחיש את הנתונים. בדוק את . אני מציג את התוצאות בטאבלט אנדרואיד שיושב על השולחן שלי ועובר במחזוריות לפי הגרפים השונים עם . אתה יכול גם לשמור את הנתונים במערכת הקבצים המקומית שלך ולעשות אותו דבר. -2minlog התיעוד Image Tuner הפתרון נבדק ב-Synology NAS, אך ניתן להתאים אותו לאחרים. הפניות: מאגר GitHub: פרויקט ניטור טמפרטורה של NAS תיעוד Pysnmp: ספריית pysnmp צ'אטבוט בחבילת Pysnmp: גורו SNMP הגדרת תצוגה: והגדרת רענון אוטומטי של מסך מלא טאבלט אנדרואיד ישן כתצוגה Synology MIB Files**:** מדריך Synology MIB 2minlog: פלטפורמת הדמיית נתונים של 2minlog #Synology #SynologyNAS #טמפרטורה #ניטור #DataVisualization #Matplotlib #SNMP #2minlog #Python #Docker