ה־API של Zabbix מאפשר לך באופן תוכנתי למשוך ולשנות את ההגדרות של Zabbix ולספק גישה לנתוני עבר. השימוש הנרחב בו הוא לטובת:
ה־API של Zabbix עובד במתכונת אתר והוא חלק משירות החזית. הוא משתמש בפרוטוקול JSON-RPC 2.0 שזה אומר שני דברים:
אפשר למצוא מידע נוסף על JSON במפרט של JSON-RPC 2.0 ובעמוד הבית של תצורת JSON.
ה־API מורכב ממספר מתודות שמקובצות נומינלית למנשקי API נפרדים. כל אחת מהמתודות מבצעת משימה מסוימת אחת. למשל, המתודה host.create
שייכת ל־API של host והיא משמשת ליצירת מארחים חדשים. מטעמים היסטורים, מנשקי API נקראים לפעמים „מחלקות”.
רוב מנשקי ה־API מכילים לפחות ארבע מתודות: get
, create
, update
ו־delete
למשיכה, יצירה, עדכון ומחיקה של נתונים בהתאמה, אך חלק ממנשקי ה־API עשויים לספק סדרה שונה לגמרי של מתודות.
בהתבסס על מידע אישור ניתן להגדיר כיצד ספירת הבעיות מוצגת בלוח המחוונים או במפות. כדי לעשות את זה, אתה יש לבצע בחירות באפשרות הצגת בעיות, זמינה ב שניהם מפה תצורה וכן את בעיות לפי חומרה לוח המחוונים widget. אפשר להציג את כל ספירת הבעיות, בעיה לא מאושרת לספור כמו פרד מספירת הבעייתיות או הבלתי מאושרת בלבד.
בהתבסס על מידע על עדכון בעיה (אישור וכו'), זה כן אפשר להגדיר עדכון פעולות - שלח הודעה או בצע פקודות מרחוק.
הסעיף הבא יעבור אתך על מספר דוגמאות שימוש ביתר פירוט.
כדי לגשת לנתונים כלשהם ב-Zabix, אתה צריך:
לדוגמה, אם תרצה להשיג אסימון אימות חדש על ידי כניסה כמשתמש אדמין סטנדרטי, בקשת JSON תיראה כך:
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"username": "מנהל",
"סיסמה": "zabbix"
},
"מזהה": 1,
"auth": null
}
בואו נסתכל מקרוב על אובייקט הבקשה. יש לו את הדברים הבאים נכסים:
jsonrpc
- הגרסה של פרוטוקול JSON-RPC המשמשת את ה-API; ה-API של Zabbix מיישם JSON-RPC גרסה 2.0;שיטה
- שיטת ה-API הנקראת;params
- פרמטרים שיועברו לשיטת ה-API;id
- מזהה שרירותי של הבקשה;auth
- אסימון אימות משתמש; מכיוון שעדיין אין לנו אחד, הוא מוגדר ל'null'.אם סיפקת את האישורים בצורה נכונה, התגובה שהוחזרה על ידי ה API יכיל את אסימון אימות המשתמש:
אובייקט התגובה מכיל בתורו את המאפיינים הבאים:
jsonrpc
- שוב, הגרסה של פרוטוקול JSON-RPC;תוצאה
- הנתונים המוחזרים על ידי השיטה;מזהה
- מזהה של הבקשה המתאימה.All API requests require an authentication or an API token. You can provide the credentials by using the "Authorization" request header:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
An API request can be authorized by the "auth" property.
Note that the "auth" property is deprecated. It will be removed in the future releases.
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid"]},"auth":"0424bd59b807674191e7d77572075f33","id":1}'
A "zbx_session" cookie is used to authorize an API request from Zabbix UI performed using JavaScript (from a module or a custom widget).
כעת יש לנו אסימון אימות משתמש חוקי שניתן להשתמש בו כדי לגשת הנתונים ב-Zabix. לדוגמה, בואו נשתמש ב- שיטת host.get כדי לאחזר את המזהים, שמות מארחים וממשקים של כל המוגדרים מארחים:
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"פלט": [
"hostid",
"מנחה"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"מזהה": 2,
"auth": "0424bd59b807674191e7d77572075f33"
}
::: הערה חשוב שימו לב שהמאפיין 'auth' מוגדר כעת ל- אסימון אימות שהשגנו בהתקשרות user.login
. :::
אובייקט התגובה יכיל את הנתונים המבוקשים על המארחים:
{
"jsonrpc": "2.0",
"תוצאה": [
{
"hostid": "10084",
"host": "שרת Zabbix",
"ממשקים": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"מזהה": 2
}
מטעמי ביצועים אנו ממליצים לרשום תמיד את מאפייני אובייקט שברצונך לאחזר ולהימנע מאחזור הכל.
בואו ניצור פריט חדש ב-Zabbix server" באמצעות הנתונים שהשגנו מה-host.get הקודם בַּקָשָׁה. ניתן לעשות זאת על ידי שימוש ב- שיטת item.create:
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "שטח דיסק פנוי ב-/home/joe/",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"סוג": 0,
"ערך_סוג": 3,
"interfaceid": "1",
"עיכוב": 30
},
"auth": "0424bd59b807674191e7d77572075f33",
"מזהה": 3
}
תגובה מוצלחת תכיל את המזהה של הפריט החדש שנוצר, שבו ניתן להשתמש כדי להתייחס לפריט בבקשות הבאות:
שיטת 'item.create' כמו גם שיטות יצירה אחרות יכול גם לקבל מערכים של אובייקטים וליצור מספר פריטים עם API אחד שִׂיחָה.
אז אם יצירת שיטות יקבלו מערכים, נוכל להוסיף מרובים triggers כך:
{
"jsonrpc": "2.0",
"method": "trigger.create",
"פארמים": [
{
"description": "עומס המעבד גבוה מדי ב-{HOST.NAME}",
"expression": "last(/Linux server/system.cpu.load[percpu,avg1])>5",
},
{
"description": "יותר מדי תהליכים ב-{HOST.NAME}",
"expression": "avg(/Linux server/proc.num[],5m)>300",
}
],
"auth": "0424bd59b807674191e7d77572075f33",
"מזהה": 4
}
תגובה מוצלחת תכיל את המזהים של הקוד החדש שנוצר טריגרים:
אפשר פריט, כלומר, הגדר את הסטטוס שלו ל-"0":
{
"jsonrpc": "2.0",
"method": "item.update",
"params": {
"itemid": "10092",
"סטטוס": 0
},
"auth": "0424bd59b807674191e7d77572075f33",
"מזהה": 5
}
תגובה מוצלחת תכיל את המזהה של הפריט המעודכן:
שיטת 'item.update' כמו גם שיטות עדכון אחרות יכול גם לקבל מערכים של אובייקטים ולעדכן מספר פריטים עם API אחד שִׂיחָה.
אפשר מספר טריגרים, כלומר, הגדר את הסטטוס שלהם ל-0:
{
"jsonrpc": "2.0",
"method": "trigger.update",
"פארמים": [
{
"triggerid": "13938",
"סטטוס": 0
},
{
"triggerid": "13939",
"סטטוס": 0
}
],
"auth": "0424bd59b807674191e7d77572075f33",
"מזהה": 6
}
תגובה מוצלחת תכיל את המזהים של הטריגרים המעודכנים:
זוהי שיטת העדכון המועדפת. איזה API שיטות כמו host.massupdate
מאפשרות לכתוב קוד פשוט יותר, אבל זה כן לא מומלץ להשתמש בשיטות אלה, מכיוון שהן יוסרו ב- מהדורות עתידיות.
עד לנקודה זו כל מה שניסינו עבד מצוין. אבל מה קורה אם ננסה לבצע קריאה לא נכונה ל-API? בואו ננסה צור מארח נוסף על ידי התקשרות host.create אך השמטת ה- פרמטר 'קבוצות' חובה.
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "שרת לינוקס",
"ממשקים": [
{
"סוג 1,
"ראשי": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
]
},
"מזהה": 7,
"auth": "0424bd59b807674191e7d77572075f33"
}
התגובה תכיל אז הודעת שגיאה:
{
"jsonrpc": "2.0",
"שגיאה": {
"קוד": -32602,
"message": "פרמטרים לא חוקיים.",
"data": "אין קבוצות עבור מארח \"שרת לינוקס\"."
},
"מזהה": 7
}
אם אירעה שגיאה, במקום המאפיין 'result', התגובה אובייקט יכיל מאפיין 'שגיאה' עם הנתונים הבאים:
קוד
- קוד שגיאה;הודעה
- סיכום שגיאה קצר;נתונים
- הודעת שגיאה מפורטת יותר.שגיאות יכולות להתרחש במקרים שונים, כגון שימוש בקלט שגוי ערכים, פסק זמן של הפעלה או ניסיון לגשת לאובייקטים לא קיימים. שֶׁלְךָ האפליקציה אמורה להיות מסוגלת לטפל בחן מסוג זה של שגיאות.
כדי לפשט את גירסאות ה-API, מאז Zabbix 2.0.4, הגרסה של ה-API תואם את הגרסה של Zabbix עצמה. אתה יכול להשתמש ב apiinfo.version למצוא להוציא את גרסת ה-API שאיתה אתה עובד. זה יכול להיות שימושי עבור התאמת האפליקציה שלך לשימוש בתכונות ספציפיות לגרסה.
אנו מבטיחים תאימות לאחור בתוך הגרסה העיקרית. כאשר מבצעים שינויים לא תואמים לאחור בין מהדורות גדולות, אנחנו בדרך כלל משאירים את התכונות הישנות כפי שהוצאו משימוש במהדורה הבאה, ו הסר אותם רק לאחר מכן במהדורה. מדי פעם, אנו עשויים להסיר תכונות בין מהדורות עיקריות מבלי לספק לאחור תְאִימוּת. חשוב שלעולם לא תסתמך על שום הוצאה משימוש תכונות והגר לחלופות חדשות יותר בהקדם האפשרי.
אתה יכול לעקוב אחר כל השינויים שבוצעו ב-API ב- לוג שינויים ב-API.
עכשיו צברת מספיק ידע כדי להתחיל לעבוד עם ה־API של Zabbix, אבל למה לעצור שם. כדי להתעמק יותר אנו ממליצים לך לעיין ברשימת מנשקי ה־API הזמינים.