לפעמים יש סימנים לבעיה הקרובה. סימנים אלה יכולים להיות מזוהה כך שניתן לבצע פעולות מראש כדי למנוע או לפחות למזער את השפעת הבעיה.
ל-Zabix יש כלים לחזות את ההתנהגות העתידית של המערכת המנוטרת מבוסס על נתונים היסטוריים. כלים אלו מתממשים באמצעות חיזוי פונקציות טריגר.
שני דברים שצריך לדעת הם איך להגדיר מצב בעיה וכיצד נדרש זמן רב כדי לנקוט בפעולה. אז יש שתי דרכים להגדיר את a מפעיל איתות על מצב לא רצוי פוטנציאלי. קודם ה ההדק חייב להידלק כאשר המערכת לאחר "זמן לפעול" צפוי להיות במצב בעייתי. שנית: ההדק חייב להידלק כאשר המערכת פועלת הולך להגיע למצב הבעיה תוך פחות מ"זמן לפעול". פונקציות ההדק המתאימות לשימוש הן תחזית ו הזמן שנותר. שים לב שהניתוח הסטטיסטי הבסיסי הוא בעצם זהה עבור שתי הפונקציות. אתה יכול להגדיר טריגר בכל דרך שתרצה מעדיף עם תוצאות דומות.
שתי הפונקציות משתמשות כמעט באותה סט של פרמטרים. השתמש ברשימה של פונקציות נתמכות לעיון.
קודם כל, כדאי לציין את התקופה ההיסטורית שזאביקס צריכה לנתח כדי להגיע לתחזית. אתה עושה את זה בצורה מוכרת על ידי פירושו של פרמטר 'תקופת זמן' ושינוי זמן אופציונלי כמוך זה עם ממוצע, ספירה, דלתא, מקסימום, דקה וסכום פונקציות.
(תחזית בלבד)
פרמטר 'זמן' מציין כמה רחוק Zabbix צריך בעתיד להוציא תלות שהיא מוצאת בנתונים היסטוריים. לא משנה אם אתה משתמש time_shift
או לא, זמן
נספר תמיד החל מהזרם רֶגַע.
(נותר זמן בלבד)
הפרמטר threshold
מציין ערך שאליו הפריט המנותח צריך להגיע, אין הבדל אם מלמעלה או מלמטה. לאחר שקבענו את f(t) (ראה להלן) עלינו לפתור את המשוואה f(t) = threshold
ולהחזיר את שורש שהוא קרוב יותר לעכשיו ולימין מעכשיו או 999999999999.9999 אם אין שורש כזה.
כאשר ערכי פריט מתקרבים לסף ואז חוצים זה, timeleft מניח שהצומת כבר בעבר ו לכן עובר לצומת הבא עם רמת 'סף', אם כל. השיטה הטובה ביותר צריכה להיות להשתמש בתחזיות כהשלמה ל אבחון בעיות רגילות, לא כתחליף.1
Default fit
is the linear function. But if your monitored system is more complicated you have more options to choose from.
fit |
x = f(t) |
---|---|
linear | x = a + b*t |
polynomialN2 | x = a0 + a1*t + a2*t2 + ... + an*tn |
exponential | x = a*exp(b*t) |
logarithmic | x = a + b*log(t) |
power | x = a*tb |
(תחזית בלבד)
בכל פעם שפונקציית טריגר מוערכת היא מקבלת נתונים מה- תקופת ההיסטוריה שצוינה ומתאים פונקציה שצוינה לנתונים. כך, אם הנתונים מעט שונים, הפונקציה המותאמת תהיה מעט שונה. אם פשוט נחשב את הערך של הפונקציה המותאמת ב-a זמן שצוין בעתיד לא תדע דבר על איך פריט מנותח צפוי להתנהג מעכשיו לאותו רגע ב עתיד. עבור כמה אפשרויות 'התאמה' (כמו פולינום) ערך פשוט מ העתיד עשוי להיות מטעה.
תוצאה | מצב |
---|---|
value | f(עכשיו + זמן ) |
max | maxnow <= t <= now + time f(t) |
דקה | דקהעכשיו <= t <= עכשיו + זמן f(t) |
דלתא | מקסימום - דקה |
avg | ממוצע של f(t) (עכשיו <= t <= עכשיו + זמן ) לפי הגדרה |
כדי להימנע מחישובים עם מספרים עצומים אנו רואים את חותמת הזמן של ערך ראשון בתקופה שצוינה בתוספת 1 ns כזמן אפס חדש (נוכחי זמן עידן בסדר 109, עידן בריבוע הוא 1018, דיוק כפול הוא בערך 10-16). 1 ns מתווסף כדי לספק את כל ערכי הזמן החיוביים עבור התאמות לוגריתמיות וכוח הכוללות חישוב log(t). זְמַן תזוזה אינה משפיעה על ליניארי, פולינום, מעריכי (מלבד חישובים קלים ומדויקים יותר) אבל משנה את הצורה של פונקציות לוגריתמיות וכוח.
פונקציות מחזירות -1 במצבים כאלה:
לא מסומנות אזהרות או שגיאות אם הבחירה מתאימה בצורה גרועה מתאר את הנתונים שסופקו או שפשוט יש מעט מדי נתונים כדי לדייק נְבוּאָה.
כדי לקבל אזהרה כאשר עומד להיגמר לך שטח הדיסק הפנוי המארח שלך אתה יכול להשתמש בביטוי טריגר כמו זה:
עם זאת, קוד שגיאה -1 עשוי להיכנס לפעולה ולהכניס את הטריגר שלך ל-a מצב בעיה. בדרך כלל זה טוב כי אתה מקבל אזהרה שאתה התחזיות אינן פועלות כהלכה וכדאי להסתכל עליהן יותר ביסודיות כדי לברר מדוע. אבל לפעמים זה רע כי -1 יכול פשוט אומר שלא היו נתונים לגבי שטח הדיסק הפנוי שהושג בו השעה האחרונה. אם אתה מקבל יותר מדי התראות חיוביות כוזבות שקול להשתמש בביטוי טריגר מסובך יותר 5:
המצב קצת יותר קשה עם תחזית. ראשית כל, -1 עשוי או לא יכול להכניס את ההדק למצב בעיה בהתאם ל אם יש לך ביטוי כמו forecast(/host/item,(...))<...
או כמו forecast(/host/item,(...))>...
יתר על כן, -1 עשוי להיות תחזית חוקית אם היא רגילה לפריט הערך יהיה שלילי. אבל ההסתברות של המצב הזה במציאות המצב בעולם זניח (ראה איך האופרטור = עובד). כך הוסף ... or forecast(/host/item,(...))=-1
או ... and forecast(/host/item,(...))<>-1
אם אתה רוצה או לא רוצה התייחס ל-1 כבעיה בהתאמה.
לדוגמה, טריגר פשוט כמו timeleft(/host/item,1h,X) < 1h
עלול להיכנס למצב בעיה כאשר ערך הפריט מתקרב ל-X ואז פתאום מתאושש ברגע שערך X הוא השיג. אם הבעיה היא שערך הפריט נמוך מ-X השתמש ב: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h
אם הבעיה היא שערך הפריט נמצא מעל X שימוש: last(/host/item) > X or timeleft(/host/item,1h,X) < 1h
↩︎
תואר פולינום יכול להיות מ-1 עד 6, פולינום1 שווה ערך לליניארי. עם זאת, השתמש בפולינומים בדרגה גבוהה יותר עם זהירות. אם ה תקופת הערכה מכילה פחות נקודות מהנדרש כדי לקבוע מקדמי פולינום, תואר פולינום יופחת (למשל polynomial5 מתבקש, אבל יש רק 4 נקודות, לכן polynomial3 יותקן).↩︎
למשל התאמת פונקציות מעריכי או כוח כרוכה חישוב log() של ערכי פריט. אם הנתונים מכילים אפסים או שליליים מספרים תקבל שגיאה מכיוון ש-log() מוגדר לחיובי ערכים בלבד.↩︎
עבור ליניארי, מעריכי, לוגריתמי ועוצמה מתאים לכולם ניתן לכתוב את החישובים הדרושים במפורש. עבור פולינום ניתן לחשב רק ערך ללא שלבים נוספים. חישוב avg כולל חישוב נגד נגזרת פולינומית (באופן אנליטי). מחשוב מקסימום, דקה ודלתא כרוך חישוב נגזרת פולינומית (באופן אנליטי) ומציאת שורשיה (מבחינה מספרית). פתרון f(t) = 0 כרוך במציאת שורשים פולינומיים (מבחינה מספרית).↩︎
אבל במקרה זה -1 יכול לגרום לטריגר שלך להתאושש מה- מצב בעיה. כדי להיות מוגן לחלוטין השתמש: timeleft(/host/vfs.fs.size[/,free],1h,0)<1h ו-({TRIGGER.VALUE}=0 ו-timeleft(/host/vfs.fs.size[/,free],1h ,0)<>-1 או {TRIGGER.VALUE}=1)
↩︎