שיטה לניטור מידע
משמעותי מתוך מערכת הניטורים הקיימת בסביבת השו"ב
הכותב:
נייד: 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) יירש אותם.