Monday, December 24, 2018

שיטה לניטור מידע משמעותי מתוך מערכת הניטורים הקיימת בסביבת השו"ב

שיטה לניטור מידע משמעותי מתוך מערכת הניטורים הקיימת בסביבת השו"ב
הכותב:
נפתלי שפריי, naftalysh@gmail.com
נייד: 054-8310965

מבוא:
קיים צורך אמיתי לנטר "מידע משמעותי" לגבי כל סוגי המשאבים המנוטרים בתשתיות.
"מידע משמעותי" מתייחס לשאלה הבסיסית -  
"תוך כמה זמן המשאב המנוטר ימוצה בהתייחס לקצב השינוי בשימוש בו".
מידע מסוג זה קל יותר לקשור ל- SLA והוא מביא ערך אמיתי מתוך תשתית הניטור הקיימת.

כיום משתמשים בערכי-סף (Threshold) כדי למתג אירועים, אבל ערכי הסף קשורים בד"כ לערכים גולמיים והם לכשעצמם לא נותנים מענה לצורך.
במסמך זה אתאר שיטה גנרית שתיושם ברמת RULE ב- OMNIBUS (ניתן להשתמש בכל שיטה אחרת)
ותיושם לכל סוג של משאב מנוטר שדוגמים ממנו ערכים גולמיים.
ה- RULE הנ"ל יעבוד במקביל לשאר ה- RULE ים ולא תהיה שום התנגשות ביניהם.

הרחבה:
אנו נדגום את קצב השינוי לאורך מספר נקודות מדידה (כדי לקבל מגמה אמיתית) ועל-בסיס הקצב
הנדגם נוכל לענות על השאלה המודגשת.

עבור רוב המשאבים המנוטרים קיימים הנתונים הבאים:
·        Value             – ערך נדגם.
·        Max               – ערך מקסימאלי מותר למשאב.
·        Min               – ערך מינימאלי מותר למשאב.
·        t                   – זמן מחזור מדידה (כל כמה זמן מודדים את המשאב).

אנו נוסיף משתנים נוספים:
·        N                  – מספר יחידות זמן שבהם יחושב קצב השינוי.
·        R                  – קצב שינוי של הערך הנדגם לזמן של - N*t (N מחזורי מדידה).
·        Rav               – ממוצע רץ של קצב השינוי.
·        TtoMax          – זמן מוערך להגעת המשאב למצב MAX.
·        TtoMin           – זמן מוערך להגעת המשאב למצב MIN.
·        TtoMaxThreshold       – ערך סף למיתוג אירוע עבור TtoMax.
·        TtoMinThreshold        – ערך סף למיתוג אירוע עבור TtoMin.
·        Array [N]        - מבנה נתונים (מערך או STACK) שיכיל בכל רגע את N הדגימות האחרונות.


האירועים ("המידע המשמעותי") שימותגו יהיה מהסוג הבא:
1.      TimetoMaxThresholdReached – "עברנו ערך סף של זמן הגעת משאב מנוטר ל- Max.
2.     TimetoMinThresholdReached – "עברנו ערך סף של זמן הגעת משאב מנוטר ל- Min.


האלגוריתם:
(בלי הגבלת כלליות אני בוחר ב-  N=5 , ז"א מספר יחידות הזמן בהם יחושב קצב השינוי. ניתן לבחור בכל ערך אחר).

-- ה- RULE הבא יופעל כל פעם שיגיע ערך נדגם חדש לתוך Value --

הגדרות משתנים מקומיים ב- RULE
I = 0;  /*משתנה זמני שימדוד את מספר המדידות שבוצעו  */
N = 5; /* ניתן לבחור כל ערך אחר */
R = Rav = 0;
TtoMax = TtoMin = 0;
Array [0..N-1] = 0;

         
If (Value >= Max) {
Trigger Event (TimetoMaxThresholdReached);
}
Else If (Value <= Min) {
Trigger Event (TimetoMinThresholdReached);
}

/*הראשונים יש למלא את מערך הערכים הנדגמים כל עוד לא קיבלנו את הנתונים הנדגמים */
If  (I < N) {   
Array [I++] = Value; 
Exit;
}

/* יש לדאוג שהמערך יכיל את הערכים הנדגמים האחרונים בכל פעם */
Array[0..N-2] = Array[1..N-1]; /* save last N-1 values in Array[0..N-2] */
Array[N-1] = Value; /* save last Value in Array[N-1] */

R = (Array [N] – Array [1](  / N;
Rav = (Rav == 0) ? R : (Rav + R) / 2;

If (Rav > 0 and Value < Max) {
TtoMax = ((Max – Value) / Rav) * t;
If  (TtoMax <= TtoMaxThreshold) {
          Trigger Event (TimetoMaxThresholdReached);
}
}
Else If (Rav < 0 and Value > Min) {
          TtoMin = ((Value - Min) / Rav) * t;  
If  (TtoMin <= TtoMinThreshold) {
          Trigger Event (TimetoMinThresholdReached);
          }
}

הערות לגבי המימוש בפועל:
1.     האלגוריתם כתוב בפסידוקוד - ניתן לממש אותו בשפה המתאימה ל- OMNIBUS.
2.     ה- "משתנים הנוספים" ימומשו ע"י הוספת שדות נוספים ל- "CLASS אירוע בסיסי" (Base Class)  ב- OMNIBUS ,כך שכל CLASS אירוע של ניטור משאב (היורש את ה- Base Class) יירש אותם.





No comments: