This is a translation of the original English documentation page. Help us make it better.

2 ביטוי הקפצה

סקירה כללית

הביטויים המשמשים ב-triggers הם מאוד גָמִישׁ. אתה יכול להשתמש בהם כדי ליצור בדיקות לוגיות מורכבות לגבי סטטיסטיקה מפוקחת.

ביטוי פשוט משתמש ב-פונקציה המוחלת על הפריט עם כמה פרמטרים. הפונקציה מחזירה תוצאה שמשווה ל- סף, באמצעות אופרטור וקבוע.

התחביר של ביטוי שימושי פשוט הוא function(/host/key,parameter)<operator><constant>.

לדוגמה:

   min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

יופעל אם מספר הבתים שהתקבלו במהלך חמשת האחרונים דקות היה תמיד מעל 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(min(/host/key,1h),min(/host2/key2,1h)*10)

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

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).

תוצאה הערכה:

  • <, <=, >, >=, =, <> אופרטורים יניבו '1' בביטוי הטריגר אם צוין היחס הוא נכון ו-'0' אם הוא שקר. אם לפחות אופרנד אחד הוא לא ידוע התוצאה היא לא ידוע;
  • ו עבור אופרנדים ידועים יניבו '1' אם שני האופרנדים שלו השווה לא שווה ל-'0'; אחרת, הוא מניב '0'; לא ידוע אופרנדים ו מניבים '0' רק אם אופרנד אחד משווה ל '0'; אחרת, הוא מניב 'לא ידוע';
  • או עבור אופרנדים ידועים יניבו '1' אם אחד מהאופרנדים שלו השווה לא שווה ל-'0'; אחרת, הוא מניב '0'; לא ידוע אופרנדים או מניבים '1' רק אם אופרנד אחד משווה לא שווה ל '0'; אחרת, הוא מניב 'לא ידוע';
  • התוצאה של אופרטור השלילה הלוגית לא עבור ידוע האופרנד הוא '0' אם הערך של האופרנד שלו משווה לא שווה ל-'0'; '1' אם הערך של האופרנד שלו משתווה ל-'0'. לא ידוע האופרנד לא מניב 'לא ידוע'.

שמירה במטמון

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

דוגמאות של הקפצות

דוגמה 1

עומס המעבד גבוה מדי בשרת Zabbix.

 last(/Zabbix server/system.cpu.load[all,avg1])>5

על ידי שימוש בפונקציה 'last()', אנו מתייחסים לגרסה העדכנית ביותר ערך. /Zabbix server/system.cpu.load[all,avg1] נותן שם קצר של הפרמטר המנוטר. זה מציין שהמארח הוא 'שרת Zabbix' והמפתח המנוטר הוא 'system.cpu.load[all,avg1]'. סוף כל סוף, >5 אומר שהטריגר נמצא במצב PROBLEM בכל עת מדידת עומס המעבד האחרונה משרת Zabbix גדולה מ-5.

דוגמה 2

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 הדקות האחרונות.

דוגמה 3

/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 וכו'.

דוגמה 4

מישהו מוריד קובץ גדול מהאינטרנט.

שימוש בפונקציה min:

 min(/www.example.com/net.if.in[eth0,bytes],5m)>100K

הביטוי נכון כאשר מספר הבתים שהתקבלו ב-eth0 גדול יותר מ-100 KB ב-5 הדקות האחרונות.

דוגמה 5

שני הצמתים של שרת ה-SMTP המקובצים באשכולות מושבתים.

שימו לב לשימוש בשני מארחים שונים בביטוי אחד:

 last(/smtp1.example.com/net.tcp.service[smtp])=0 ו-last(/smtp2.example.com/net.tcp.service[smtp])=0

הביטוי נכון כאשר שני שרתי ה-SMTP מושבתים בשניהם smtp1.example.com ו-smtp2.example.com.

דוגמה 6

יש לשדרג את סוכן Zabbix.

שימוש בפונקציה find():

 find(/example.example.com/agent.version,,"like","beta8")=1

הביטוי נכון אם לסוכן Zabbix יש גרסה בטא8.

דוגמה 7

לא ניתן להגיע לשרת.

 count(/example.example.com/icmpping,30m,,"0")>5

הביטוי נכון אם המארח "example.example.com" אינו נגיש יותר יותר מ-5 פעמים ב-30 הדקות האחרונות.

דוגמה 8

אין פעימות לב ב-3 הדקות האחרונות.

שימוש בפונקציה nodata():

 nodata(/example.example.com/tick,3m)=1

כדי לעשות שימוש בטריגר זה, יש להגדיר את 'טיק' כ-Zabix trapper. המארח צריך שלח מדי פעם נתונים עבור פריט זה באמצעות zabbix_sender. אם אין נתונים התקבל תוך 180 שניות, ערך הטריגר הופך ל-PROBLEM.

שים לב שניתן להשתמש ב-'nodata' עבור כל סוג פריט.

דוגמה 9

פעילות מעבד בשעות הלילה.

שימוש בזמן הפונקציה():

 min(/Zabbix server/system.cpu.load[all,avg1],5m)>2 ו-time()>000000 ו-time()<060000

הטריגר עשוי לשנות את מצבו למצב נכון רק בשעות הלילה (00:00 - 06:00).

דוגמה 10

פעילות מעבד בכל עת למעט חריגה.

שימוש בפונקציה time() ואופרטור not:

 min(/zabbix/system.cpu.load[all,avg1],5m)>2
        ולא (dayofweek()=7 ושעה()>230000)
        ולא (dayofweek()=1 ושעה()<010000)

הטריגר עשוי לשנות את מצבו למצב נכון בכל עת, למעט שעתיים בשינוי שבוע (ראשון, 23:00 - יום שני, 01:00).

דוגמה 11

בדוק אם הזמן המקומי של הלקוח מסונכרן עם זמן שרת Zabbix.

שימוש בפונקציה fuzzytime():

 fuzzytime(/MySQL_DB/system.localtime,10s)=0

הטריגר ישתנה למצב הבעיה במקרה שהזמן המקומי מופעל שרת MySQL_DB ושרת Zabbix נבדל ביותר מ-10 שניות. הערה ש'system.localtime' חייב להיות מוגדר כ-פאסיבי check.

דוגמה 12

השוואת עומס ממוצע היום עם עומס ממוצע של אותו זמן אתמול (באמצעות משמרת זמן בתור 'now-1d').

 avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2

ביטוי זה יופעל אם העומס הממוצע של השעה האחרונה יעלה על עומס ממוצע של אותה שעה אתמול יותר מפעמיים.

דוגמה 13

שימוש בערך של פריט אחר כדי לקבל סף טריגר:

 last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1

הטריגר יופעל אם האחסון החינמי יורד מתחת ל-10 אחוזים.

דוגמה 14

שימוש ב-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.

דוגמה 15

השוואת ערכי מחרוזת של שני פריטים - אופרנדים כאן הם פונקציות ש מחרוזות להחזיר.

בעיה: צור התראה אם גרסת אובונטו שונה בגרסה אחרת מארחים

 last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
דוגמה 16

השוואה בין שני ערכי מחרוזת - אופרנדים הם:

  • פונקציה שמחזירה מחרוזת
  • שילוב של פקודות מאקרו ומיתרים

בעיה: זיהוי שינויים בשאילתת ה-DNS

מפתח הפריט הוא:

 net.dns.record[8.8.8.8,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1]

עם פקודות מאקרו המוגדרות כ

 {$WEBSITE_NAME} = example.com
        {$DNS_RESOURCE_RECORD_TYPE} = MX

ובדרך כלל מחזיר:

 example.com MX 0 mail.example.com

אז ביטוי הטריגר שלנו כדי לזהות אם תוצאת שאילתת ה-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}"

שימו לב למרכאות סביב האופרנד השני.

דוגמה 17

השוואה בין שני ערכי מחרוזת - אופרנדים הם:

  • פונקציה שמחזירה מחרוזת
  • קבוע מחרוזת עם תווים מיוחדים \ ו-"

בעיה: גלה אם תוכן הקובץ /tmp/hello שווה ל:

 \" //שלום ?\"

אפשרות 1) כתוב את המחרוזת ישירות

 last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""

שים לב כיצד תווים \ ו- " מוחלפים כאשר המחרוזת מושוואת באופן ישיר.

אפשרות 2) השתמש במאקרו

 {$HELLO_MACRO} = \" //שלום ?\"

בביטוי:

 last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
דוגמה 18

השוואת תקופות ארוכות טווח.

בעיה: עומס שרת Exchange גדל ביותר מ-10% בחודש שעבר

 trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)

אתה יכול גם להשתמש ב-אירוע 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)})

זה גם שימושי לאפשר סגירה ידנית בתצורת טריגר עבור בעיה מסוג זה.

היסטרזיס

לפעמים יש צורך במרווח בין בעיה למצבי התאוששות, במקום סף פשוט. לדוגמה, אם נרצה להגדיר את א טריגר שמדווח על בעיה כאשר טמפרטורת חדר השרת עולה 20°C ואנו רוצים שהוא יישאר במצב הבעיה עד הטמפרטורה יורד מתחת ל-15°C, סף טריגר פשוט ב-20°C לא יספיק.

במקום זאת, עלינו להגדיר ביטוי טריגר עבור אירוע הבעיה תחילה (טמפרטורה מעל 20 מעלות צלזיוס). אז אנחנו צריכים להגדיר תוספת מצב התאוששות (טמפרטורה מתחת ל-15 מעלות צלזיוס). זה נעשה על ידי הגדרת an פרמטר נוסף של ביטוי שחזור כאשר מגדיר טריגר.

במקרה זה, שחזור הבעיה יתבצע בשני שלבים:

  • ראשית, ביטוי הבעיה (טמפרטורה מעל 20°C) יצטרך להעריך ל-FALSE
  • שנית, ביטוי ההתאוששות (טמפרטורה מתחת ל-15°C) יהיה להעריך ל-TRUE

ביטוי השחזור יוערך רק כאשר אירוע הבעיה נפתר קודם.

::: הערה אזהרה ביטוי ההחלמה שהוא TRUE לבדו לא פתור בעיה אם ביטוי הבעיה עדיין TRUE! :::

דוגמה 1

הטמפרטורה בחדר השרתים גבוהה מדי.

ביטוי בעיה:

 last(/server/temp)>20

ביטוי שחזור:

 last(/server/temp)<=15
דוגמה 2

שטח דיסק פנוי נמוך מדי.

ביטוי בעיה: זה פחות מ-10GB עבור 5 הדקות האחרונות

 max(/server/vfs.fs.size[/,free],5m)<10G

ביטוי שחזור: זה יותר מ-40GB עבור 10 הדקות האחרונות

 min(/server/vfs.fs.size[/,free],10m)>40G

.