ניטור מערכות אחסון IBM Storwize באמצעות Zabbix

במאמר זה נדבר מעט על ניטור מערכות אחסון IBM Storwize ומערכות אחסון אחרות התומכות בפרוטוקולי CIM/WBEM. הצורך בניטור כזה נותר מחוץ למשוואה; אנו נתייחס לכך כאקסיומה. נשתמש ב-Zabix כמערכת ניטור.

בגרסאות האחרונות של Zabbix החלה החברה להקדיש הרבה יותר תשומת לב לתבניות - החלו להופיע תבניות לשירותי ניטור, DBMS, חומרת שרתים (IMM/iBMC) באמצעות IPMI. ניטור מערכת האחסון עדיין מחוץ לתבניות מחוץ לקופסה, כך שכדי לשלב מידע על המצב והביצועים של רכיבי אחסון ב- Zabbix, עליך להשתמש בתבניות מותאמות אישית. אני מביא לידיעתך אחת מהתבניות הללו.

ראשית, קצת תיאוריה.

כדי לגשת לסטטוס ולסטטיסטיקה של מערכות האחסון של IBM Storwize, תוכל להשתמש ב:

  1. פרוטוקולי CIM/WBEM;
  2. ממשק API משוכלל (נתמך ב-IBM Storwize החל מגירסת תוכנה 8.1.3);
  3. מלכודות SNMP (קבוצה מוגבלת של מלכודות, ללא סטטיסטיקה);
  4. התחבר באמצעות SSH ולאחר מכן מרחוק מתאים לכתיבת סקריפטים בנחת.

המעוניינים יכולים ללמוד עוד על שיטות ניטור שונות בחלקים הרלוונטיים בתיעוד הספק, וכן במסמך IBM Spectrum Virtualize scripting.

אנו נשתמש בפרוטוקולי CIM/WBEM, המאפשרים לנו לקבל פרמטרי הפעלה של מערכת האחסון ללא שינויים מהותיים בתוכנה עבור מערכות אחסון שונות. פרוטוקולי CIM/WBEM פועלים בהתאם מפרט יוזמת ניהול אחסון (SMI-S). יוזמת ניהול אחסון - המפרט מבוסס על סטנדרטים פתוחים CIM (מודל מידע משותף) и WBEM (ניהול ארגוני מבוסס אינטרנט), נחוש בדעתו כוח משימה ניהול מבוזר.

WBEM פועל על גבי פרוטוקול HTTP. באמצעות WBEM אתה יכול לעבוד לא רק עם מערכות אחסון, אלא גם עם HBAs, מתגים וספריות קלטות.

על פי אדריכלות SMI и לקבוע תשתית, המרכיב העיקרי ביישום SMI הוא שרת WBEM, המעבד בקשות CIM-XML מלקוחות WBEM (במקרה שלנו, מסקריפטים לניטור):

ניטור מערכות אחסון IBM Storwize באמצעות Zabbix

CIM הוא מודל מונחה עצמים המבוסס על Unified Modeling Language (UML).
אלמנטים מנוהלים מוגדרים כמחלקות CIM בעלות מאפיינים ושיטות לייצוג נתונים ופונקציונליות מנוהלים.

על פי www.snia.org/pywbem, כדי לגשת למערכות אחסון באמצעות CIM/WBEM, ניתן להשתמש ב-PyWBEM - ספריית קוד פתוח שנכתבה ב-Python, המספקת למפתחים ומנהלי מערכות יישום של פרוטוקול CIM לגישה לאובייקטי CIM ולביצוע פעולות שונות עם שרת WBEM הפועל ב- בהתאם למפרטי SMI-S או CIM אחרים.

כדי להתחבר לשרת WBEM אנו משתמשים ב-class constructor WBEMCconnection:

conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
            namespace, no_verification=True)

זהו חיבור וירטואלי, מכיוון ש-CIM-XML/WBEM פועל על גבי HTTP, החיבור האמיתי מתרחש כאשר מתודות נקראות על מופע של המחלקה WBEMConnection. בהתאם ל-IBM System Storage SAN Volume Controller ו-Storwize V7000 Best Practices and Performance Guidelines (דוגמה C-8, עמוד 412), נשתמש ב-"root/ibm" כמרחב השמות של CIM עבור מערכת האחסון של IBM Storwize.

שים לב שכדי לאסוף נתונים סטטיסטיים באמצעות פרוטוקול CIM-XML/WBEM, עליך לכלול את המשתמש בקבוצת האבטחה המתאימה. אחרת, בעת ביצוע שאילתות WBEM, הפלט של תכונות מופע המחלקה יהיה ריק.

כדי לגשת לסטטיסטיקות אחסון, המשתמש שתחתיו נקרא הבנאי WBEMConnection(), חייב להיות לפחות RestrictedAdmin (זמין עבור code_level > 7.8.0) או זכויות מנהל (לא מומלץ מסיבות אבטחה).

אנו מתחברים למערכת האחסון באמצעות SSH ומסתכלים על מספרי הקבוצה:

> lsusergrp
id name            role            remote
0  SecurityAdmin   SecurityAdmin   no    
1  Administrator   Administrator   no    
2  CopyOperator    CopyOperator    no    
3  Service         Service         no    
4  Monitor         Monitor         no    
5  RestrictedAdmin RestrictedAdmin no    

הוסף את משתמש zabbix לקבוצה הרצויה:

> chuser -usergrp 5 zabbix

בנוסף, בהתאם ל-IBM System Storage SAN Volume Controller ו- Storwize V7000 Best Practices and Performance Guidelines (עמ' 415), עליך לאפשר איסוף נתונים סטטיסטיים על מערכת האחסון. אז, כדי לאסוף נתונים סטטיסטיים בכל דקה:

> startstats -interval 1 

אנו בודקים:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

כדי לקבל את כל מחלקות האחסון הקיימות, עליך להשתמש בשיטה EnumerateClassNames() .

לדוגמה:

classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
     print (classname)

השיטה משמשת כדי לקבל את הערכים של פרמטרים של מערכת האחסון EnumerateInstances() class WBEMConnection, מחזירה רשימה של מופעים CIMInstance().

לדוגמה:

instances = conn.EnumerateInstances(classname,
                   namespace=nd_parameters['name_space'])
for instance in instances:
     for prop_name, prop_value in instance.items():
          print('  %s: %r' % (prop_name, prop_value))

עבור מחלקות מסוימות המכילות מספר רב של מופעים, כגון IBMTSSVC_StorageVolume, שאילתה מלאה של כל המופעים יכולה להיות איטית למדי. זה יכול ליצור כמויות גדולות של נתונים שיש להכין על ידי מערכת האחסון, להעביר דרך הרשת ולעבד על ידי הסקריפט. יש שיטה למקרה כזה ExecQuery(), מה שמאפשר לנו לקבל רק את המאפיינים של מופע מחלקה שמעניינים אותנו. שיטה זו כוללת שימוש בשפת שאילתה דמוית SQL, שפת שאילתות CIM (DMTF:CQL) או שפת שאילתות WBEM (WQL), כדי לבצע שאילתות על אובייקטי אחסון CIM:

request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)

כדי לקבוע אילו מחלקות אנחנו צריכים כדי להשיג את הפרמטרים של אובייקטי אחסון, קרא את התיעוד, למשל כיצד מושגי מערכת ממפים למושגי CIM.

לכן, כדי לקבל פרמטרים (לא מוני ביצועים) של דיסקים פיזיים (כונני דיסקים) נסקר את Class IBMTSSVC_DiskDrive, כדי לקבל פרמטרים של Volumes - Class IBMTSSVC_StorageVolume, כדי לקבל פרמטרים של מערך - Class IBMTSSVC_Array, כדי לקבל פרמטרים של MDisks - Class IBMTSSVume_BackendVol.

לביצועים תוכלו לקרוא דיאגרמות פונקציונליות של הסוכן Common Information Model (באופן ספציפי - חסום תת-פרופיל ביצועי שרת) ו-IBM System Storage SAN Controller ו- Storwize V7000 שיטות עבודה מומלצות והנחיות ביצועים (דוגמה C-11, עמוד 415).

כדי לקבל סטטיסטיקות אחסון עבור נפחים, עליך לציין IBMTSVC_StorageVolumeStatistics כערך של הפרמטר ClassName. ניתן לראות את המאפיינים של מחלקת IBMTSSVC_StorageVolumeStatistics הדרושים לאיסוף נתונים סטטיסטיים ב סטטיסטיקה של צומת.

כמו כן, לניתוח ביצועים אתה יכול להשתמש במחלקות IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

כדי להקליט נתונים למערכת הניטור נשתמש במנגנון מלכודות זביקס, מיושם ב-python במודול py-zabbix. נמקם את המבנה של מחלקות מערכות אחסון והמאפיינים שלהן במילון בפורמט JSON.

אנו מעלים את התבנית לשרת Zabbix, מוודאים שלשרת הניטור יש גישה למערכת האחסון באמצעות פרוטוקול WEB (TCP/5989), וממקמים קבצי קונפיגורציה, סקריפטים לאיתור וניטור על שרת הניטור. לאחר מכן, הוסף הפעלת סקריפט למתזמן. כתוצאה מכך: אנו מגלים אובייקטי אחסון (מערכים, דיסקים פיזיים ווירטואליים, מארזים ועוד), מעבירים אותם לתגליות Zabbix, קוראים את מצב הפרמטרים שלהם, קוראים סטטיסטיקות ביצועים (מוני ביצועים), מעבירים את כל זה ל-Zabix המקביל. פריטים מהתבנית שלנו.

תבנית Zabbix, סקריפטים python, מבנה מחלקות אחסון ומאפיינים, כמו גם דוגמאות של קבצי תצורה, אתה יכול למצוא כאן.

מקור: www.habr.com

הוספת תגובה