הביטויים המשמשים ב-triggers הם מאוד גָמִישׁ. אתה יכול להשתמש בהם כדי ליצור בדיקות לוגיות מורכבות לגבי סטטיסטיקה מפוקחת.
ביטוי פשוט משתמש ב-פונקציה המוחלת על הפריט עם כמה פרמטרים. הפונקציה מחזירה תוצאה שמשווה ל- סף, באמצעות אופרטור וקבוע.
התחביר של ביטוי שימושי פשוט הוא function(/host/key,parameter)<operator><constant>
.
לדוגמה:
יופעל אם מספר הבתים שהתקבלו במהלך חמשת האחרונים דקות היה תמיד מעל 100 קילובייט.
בעוד שהתחביר זהה לחלוטין, מנקודת המבט הפונקציונלית ישנם שני סוגים של ביטויי טריגר:
כאשר מגדירים ביטוי בעיה בלבד, ישמש ביטוי זה הן כסף הבעיה והן כסף התאוששות הבעיה. כפי ש ברגע שביטוי הבעיה מוערך ל-TRUE, יש בעיה. כפי ש ברגע שביטוי הבעיה מוערך ל-FALSE, הבעיה היא נפתר.
כאשר מגדירים גם את ביטוי הבעיה וגם את ההחלמה המשלימה ביטוי, פתרון בעיות הופך מורכב יותר: לא רק ביטוי הבעיה צריך להיות FALSE, אבל גם ביטוי ההתאוששות יש להיות כן. זה שימושי כדי ליצור hysteresis ולהימנע הדק מתנופף.
פונקציות מאפשרות לחשב את הערכים שנאספו (ממוצע, מינימום, מקסימום, סכום), מצא מחרוזות, התייחסות לזמן נוכחי וגורמים אחרים.
רשימה מלאה של פונקציות נתמכות היא זמין.
בדרך כלל פונקציות מחזירות ערכים מספריים להשוואה. כשחוזרים מחרוזות, השוואה אפשרית עם ה-= ו-<> אופרטורים (ראה example).
פרמטרי פונקציה מאפשרים לציין:
ניתן לציין את המארח ואת מפתח הפריט בתור /host/key
. ההתייחסות הפריט חייב להיות במצב נתמך (פרט לפונקציה nodata(), אשר מחושב גם עבור פריטים שאינם נתמכים).
בעוד שביטויי טריגר אחרים כפרמטרי פונקציה מוגבלים ל פונקציות שאינן היסטוריה בטריגרים, מגבלה זו אינה חלה ב פריטים מחושבים.
פרמטרים ספציפיים לפונקציה ממוקמים אחרי מפתח הפריט והם מופרדים ממפתח הפריט באמצעות פסיק. ראה את נתמך functions לרשימה מלאה של אלה פרמטרים.
רוב הפונקציות המספריות מקבלות זמן כפרמטר. אתה מורשה להשתמש שניות או סיומות זמן לציון זמן. לפני האשטג, לפרמטר יש משמעות אחרת:
ביטוי | תיאור |
---|---|
sum(/host/key,10m) | סכום הערכים ב-10 הדקות האחרונות. |
sum(/host/key,#10) | סכום של עשרת הערכים האחרונים. |
לפרמטרים עם hashtag יש משמעות שונה עם הפונקציה אחרון - הם מציינים את הערך הקודם ה-N, אז בהינתן הערכים 3, 7, 2, 6, 5 (מהאחרון לפחות אחרון):
last(/host/key,#2)
יחזיר '7'last(/host/key,#5)
יחזיר את '5'משמרת זמן אופציונלית נתמכת עם ספירת זמן או ערכים בתור פרמטר פונקציה. פרמטר זה מאפשר להתייחס לנתונים מא פרק זמן בעבר.
משמרת זמן מתחילה ב'עכשיו' - מציינת את השעה הנוכחית, והיא ואחריו +N<יחידת זמן>
או -N<יחידת זמן>
- כדי להוסיף או להחסיר N יחידות זמן.
לדוגמה, avg(/host/key,1h:now-1d)
יחזיר את הערך הממוצע לשעה לפני יום אחד.
::: שימו לב חשוב משמרת זמן שצוינה בחודשים (M) ושנים (y) נתמכת רק עבור פונקציות מגמה. פונקציות אחרות תומכות בשניות (s), דקות (m), שעות (h), ימים (d) ושבועות (w). :::
משמרת זמן עם פרקי זמן מוחלטים
פרקי זמן מוחלטים נתמכים בפרמטר משמרת הזמן, למשל, חצות עד חצות ליום, שני-ראשון למשך שבוע, היום הראשון-היום האחרון של החודש למשך חודש.
משמרת זמן עבור פרקי זמן מוחלטים מתחילה ב-'עכשיו' - מציינת את השעה הנוכחית, ואחריה כל מספר של פעולות זמן: /<יחידת זמן>
- מגדיר את ההתחלה והסוף של יחידת הזמן, עבור לדוגמה, חצות עד חצות ליום, +N<יחידת זמן>
או -N<יחידת זמן>
- להוסיף או להחסיר N יחידות זמן.
שים לב שהערך של משמרת זמן יכול להיות גדול או שווה ל-0, בעוד שהערך המינימלי לתקופת הזמן הוא 1.
פרמטר | תיאור |
---|---|
1d:now/d | אתמול |
1d:now/d+1d | היום |
2d:now/d+1d | היומיים האחרונים |
1w:now/w | שבוע שעבר |
1w:now/w+1w | השבוע |
פרמטרי פונקציה עשויים להכיל ביטויים אחרים, כמו להלן תחביר:
שימו לב שלא ניתן להשתמש בביטויים אחרים, אם הפונקציה מתייחסת היסטוריית פריטים. לדוגמה, התחביר הבא אינו מותר:
min(/host/key,#5*10)
האופרטורים הבאים נתמכים עבור טריגרים (בירידה עדיפות ביצוע):
Priority | מפעיל | הגדרה | הערות עבור ערכים לא ידועים | אלץ את האופרנד לצוף 1 |
---|---|---|---|---|
1 | - | מינוס מינוס | -לא ידוע → לא ידוע | כן |
2 | לא | לוגי לא | לא לא ידוע → לא ידוע | כן |
3 | * | כפל | 0 * לא ידוע → לא ידוע (כן, לא ידוע, לא 0 - כדי לא להפסיד לא ידוע בפעולות אריתמטיות)<br >1.2 * לא ידוע → לא ידוע |
כן |
/ | חלוקה | לא ידוע / 0 → שגיאה לא ידוע / 1.2 → לא ידוע 0.0 / לא ידוע → לא ידוע |
כן | |
4 | + | אריתמטי פלוס | 1.2 + לא ידוע → לא ידוע | כן |
- | אריתמטי מינוס | 1.2 - לא ידוע → לא ידוע | כן | |
5 | < | פחות מ. האופרטור מוגדר כ: A<B ⇔ (A<B-0.000001) |
1.2 < לא ידוע → לא ידוע | כן |
<= | קטן או שווה ל. האופרטור מוגדר כ: A<=B ⇔ (A≤B+0.000001) |
לא ידוע <= לא ידוע → לא ידוע | כן | |
> | יותר מ. האופרטור מוגדר כ: A>B ⇔ (A>B+0.000001) |
כן | ||
>= | יותר מ או שווה ל. האופרטור מוגדר כ: A>=B ⇔ (A≥B-0.000001) |
כן | ||
6 | = | שווה. האופרטור מוגדר כ: A=B ⇔ (A≥B-0.000001) ו-(A≤B+0.000001) |
לא 1 | |
<> | לא שווה. האופרטור מוגדר כ: A<>B ⇔ (A<B-0.000001) או (A>B+0.000001) |
לא 1 | ||
7 | ו | לוגי AND | 0 ו לא ידוע → 0 1 ו לא ידוע → לא ידוע לא ידוע ו לא ידוע → לא ידוע |
כן |
8 | או | לוגי OR | 1 או לא ידוע → 1 0 או לא ידוע → לא ידוע לא ידוע או לא ידוע → לא ידוע |
כן |
1 אופרנד מחרוזת עדיין יצוק למספרי אם:
(אם הקאסט נכשל - אופרנד מספרי מוטל לאופרנד מחרוזת ו שני האופרנדים מקבלים השוואה כמחרוזות.)
אופרטורים לא, ו ואו הם תלויי רישיות וחייבים להיות ב- אותיות קטנות. הם גם חייבים להיות מוקפים ברווחים או בסוגריים.
לכל האופרטורים, למעט - או לא, יש משמאל לימין אסוציאטיביות. Unary - ו-לא אינם אסוציאטיביים (כלומר יש להשתמש ב--(-1) ו-לא (לא 1) במקום --1 ו לא לא 1).
תוצאה הערכה:
הערכים הנדרשים להערכת טריגר מאוחסנים במטמון על ידי שרת Zabbix. בגלל זה הערכת טריגר גורמת לעומס מסד נתונים גבוה יותר עבור זמן מה לאחר הפעלת השרת מחדש. מטמון הערך אינו ניקה מתי ערכי היסטוריית הפריטים מוסרים (באופן ידני או על ידי עוזרת בית), אז השרת ישתמש בערכי המטמון עד שהם ישנים מהזמן תקופות המוגדרות בפונקציות טריגר או שהשרת מופעל מחדש.
עומס המעבד גבוה מדי בשרת Zabbix.
על ידי שימוש בפונקציה 'last()', אנו מתייחסים לגרסה העדכנית ביותר ערך. /Zabbix server/system.cpu.load[all,avg1]
נותן שם קצר של הפרמטר המנוטר. זה מציין שהמארח הוא 'שרת Zabbix' והמפתח המנוטר הוא 'system.cpu.load[all,avg1]'. סוף כל סוף, >5
אומר שהטריגר נמצא במצב PROBLEM בכל עת מדידת עומס המעבד האחרונה משרת Zabbix גדולה מ-5.
www.example.com עמוס מדי.
last(/www.example.com/system.cpu.load[all,avg1])>5 או min(/www.example.com/system.cpu.load[all,avg1],10m)>2
הביטוי נכון כאשר עומס המעבד הנוכחי גדול יותר מ-5 או שעומס המעבד היה יותר מ-2 במהלך 10 הדקות האחרונות.
/etc/passwd השתנה.
(last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2 ))=1
הביטוי נכון כאשר הערך הקודם של /etc/passwd checksum שונה מהאחרון.
ביטויים דומים יכולים להיות שימושיים כדי לעקוב אחר שינויים חשובים קבצים, כגון /etc/passwd, /etc/inetd.conf, /kernel וכו'.
מישהו מוריד קובץ גדול מהאינטרנט.
שימוש בפונקציה min:
הביטוי נכון כאשר מספר הבתים שהתקבלו ב-eth0 גדול יותר מ-100 KB ב-5 הדקות האחרונות.
שני הצמתים של שרת ה-SMTP המקובצים באשכולות מושבתים.
שימו לב לשימוש בשני מארחים שונים בביטוי אחד:
הביטוי נכון כאשר שני שרתי ה-SMTP מושבתים בשניהם smtp1.example.com ו-smtp2.example.com.
יש לשדרג את סוכן Zabbix.
שימוש בפונקציה find():
הביטוי נכון אם לסוכן Zabbix יש גרסה בטא8.
לא ניתן להגיע לשרת.
הביטוי נכון אם המארח "example.example.com" אינו נגיש יותר יותר מ-5 פעמים ב-30 הדקות האחרונות.
אין פעימות לב ב-3 הדקות האחרונות.
שימוש בפונקציה nodata():
כדי לעשות שימוש בטריגר זה, יש להגדיר את 'טיק' כ-Zabix trapper. המארח צריך שלח מדי פעם נתונים עבור פריט זה באמצעות zabbix_sender. אם אין נתונים התקבל תוך 180 שניות, ערך הטריגר הופך ל-PROBLEM.
שים לב שניתן להשתמש ב-'nodata' עבור כל סוג פריט.
פעילות מעבד בשעות הלילה.
שימוש בזמן הפונקציה():
הטריגר עשוי לשנות את מצבו למצב נכון רק בשעות הלילה (00:00 - 06:00).
פעילות מעבד בכל עת למעט חריגה.
שימוש בפונקציה time() ואופרטור not:
min(/zabbix/system.cpu.load[all,avg1],5m)>2
ולא (dayofweek()=7 ושעה()>230000)
ולא (dayofweek()=1 ושעה()<010000)
הטריגר עשוי לשנות את מצבו למצב נכון בכל עת, למעט שעתיים בשינוי שבוע (ראשון, 23:00 - יום שני, 01:00).
בדוק אם הזמן המקומי של הלקוח מסונכרן עם זמן שרת Zabbix.
שימוש בפונקציה fuzzytime():
הטריגר ישתנה למצב הבעיה במקרה שהזמן המקומי מופעל שרת MySQL_DB ושרת Zabbix נבדל ביותר מ-10 שניות. הערה ש'system.localtime' חייב להיות מוגדר כ-פאסיבי check.
השוואת עומס ממוצע היום עם עומס ממוצע של אותו זמן אתמול (באמצעות משמרת זמן בתור 'now-1d').
ביטוי זה יופעל אם העומס הממוצע של השעה האחרונה יעלה על עומס ממוצע של אותה שעה אתמול יותר מפעמיים.
שימוש בערך של פריט אחר כדי לקבל סף טריגר:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
הטריגר יופעל אם האחסון החינמי יורד מתחת ל-10 אחוזים.
שימוש ב-evaluation result כדי לסיים את מספר הטריגרים סף:
(last(/server1/system.cpu.load[all,avg1])>5) + (last(/server2/system.cpu.load[all,avg1])>5) + (last(/server3/system. cpu.load[all,avg1])>5)>=2
הטריגר יופעל אם לפחות שניים מהטריגרים בביטוי הם מעל 5.
השוואת ערכי מחרוזת של שני פריטים - אופרנדים כאן הם פונקציות ש מחרוזות להחזיר.
בעיה: צור התראה אם גרסת אובונטו שונה בגרסה אחרת מארחים
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
השוואה בין שני ערכי מחרוזת - אופרנדים הם:
בעיה: זיהוי שינויים בשאילתת ה-DNS
מפתח הפריט הוא:
עם פקודות מאקרו המוגדרות כ
ובדרך כלל מחזיר:
אז ביטוי הטריגר שלנו כדי לזהות אם תוצאת שאילתת ה-DNS חרגה מהתוצאה הצפויה היא:
last(/Zabbix server/net.dns.record[8.8.8.8,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME} {$DNS_RESOURCE_RECORD_TYPE} 0 דואר.{$WEBSITE_NAME}"
שימו לב למרכאות סביב האופרנד השני.
השוואה בין שני ערכי מחרוזת - אופרנדים הם:
בעיה: גלה אם תוכן הקובץ /tmp/hello
שווה ל:
אפשרות 1) כתוב את המחרוזת ישירות
שים לב כיצד תווים \ ו- " מוחלפים כאשר המחרוזת מושוואת באופן ישיר.
אפשרות 2) השתמש במאקרו
בביטוי:
השוואת תקופות ארוכות טווח.
בעיה: עומס שרת Exchange גדל ביותר מ-10% בחודש שעבר
אתה יכול גם להשתמש ב-אירוע name בטריגר תצורה לבניית הודעת התראה משמעותית, למשל ל לקבל משהו כמו
"עומס שרת Exchange עלה ב-24% ביולי (0.69) בהשוואה ליוני (0.56)"
יש להגדיר את שם האירוע כ:
העומס של שרת {HOST.HOST} גדל ב-{{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M) }.fmtnum(0)}% ב-{{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)} ) בהשוואה ל-{{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})
זה גם שימושי לאפשר סגירה ידנית בתצורת טריגר עבור בעיה מסוג זה.
Have a trigger expressions example that might be useful to others? Use the Example suggestion form to send it to Zabbix developers.
לפעמים יש צורך במרווח בין בעיה למצבי התאוששות, במקום סף פשוט. לדוגמה, אם נרצה להגדיר את א טריגר שמדווח על בעיה כאשר טמפרטורת חדר השרת עולה 20°C ואנו רוצים שהוא יישאר במצב הבעיה עד הטמפרטורה יורד מתחת ל-15°C, סף טריגר פשוט ב-20°C לא יספיק.
במקום זאת, עלינו להגדיר ביטוי טריגר עבור אירוע הבעיה תחילה (טמפרטורה מעל 20 מעלות צלזיוס). אז אנחנו צריכים להגדיר תוספת מצב התאוששות (טמפרטורה מתחת ל-15 מעלות צלזיוס). זה נעשה על ידי הגדרת an פרמטר נוסף של ביטוי שחזור כאשר מגדיר טריגר.
במקרה זה, שחזור הבעיה יתבצע בשני שלבים:
ביטוי השחזור יוערך רק כאשר אירוע הבעיה נפתר קודם.
::: הערה אזהרה ביטוי ההחלמה שהוא TRUE לבדו לא פתור בעיה אם ביטוי הבעיה עדיין TRUE! :::
הטמפרטורה בחדר השרתים גבוהה מדי.
ביטוי בעיה:
ביטוי שחזור:
שטח דיסק פנוי נמוך מדי.
ביטוי בעיה: זה פחות מ-10GB עבור 5 הדקות האחרונות
ביטוי שחזור: זה יותר מ-40GB עבור 10 הדקות האחרונות
.