סוג זה של רמה נמוכה גילוי נעשה באמצעות SQL שאילתות, שתוצאותיהן הופכות אוטומטית לאובייקט JSON מתאים לגילוי ברמה נמוכה.
שאילתות SQL מבוצעות באמצעות סוג פריט "מסד נתונים". לכן, רוב ההוראות על ODBC ניטור חל ב כדי לקבל כלל גילוי "מסד נתונים" עובד.
ניתן להשתמש בשני מפתחות פריט בכללי הגילוי של "צג מסד נתונים":
db.odbc.discovery[]
, פריט זה אינו יוצר גילוי ברמה נמוכה פקודות מאקרו ב-JSON המוחזר, לכן אין צורך לבדוק אם שמות העמודות יכולים להיות שמות מאקרו חוקיים. הגילוי ברמה נמוכה ניתן להגדיר פקודות מאקרו כשלב נוסף לפי הצורך, באמצעות ה- LLD מותאם אישית מאקרו פונקציונליות כאשר JSONPath מצביע על הערכים שהתגלו ב- החזיר JSON. ראה גם: שימוש ב-db.odbc.get.כדוגמה מעשית להמחשה כיצד משתנה שאילתת SQL לתוך JSON, הבה נבחן גילוי ברמה נמוכה של פרוקסי Zabbix על ידי ביצוע שאילתת ODBC על מסד הנתונים של Zabbix. זה שימושי עבור יצירה אוטומטית של "zabbix[proxy,<name>,lastaccess]" פריטים פנימיים לניטור אילו פרוקסי חיים.
הבה נתחיל עם תצורת כלל גילוי:
כל שדות הקלט החובה מסומנים בכוכבית אדומה.
כאן, השאילתה הישירה הבאה על מסד הנתונים של Zabbix משמשת לבחירה כל פרוקסי Zabbix, יחד עם מספר המארחים שהם ניטור. ניתן להשתמש במספר המארחים, למשל, לסינון פרוקסי ריקים:
mysql> SELECT h1.host, COUNT(h2.host) AS count FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;
+--------+--------+
| מארח | לספור |
+--------+--------+
| יפן 1 | 5 |
| יפן 2 | 12 |
| לטביה | 3 |
+--------+--------+
3 שורות בסט (0.01 שניות)
לפי הפעולה הפנימית של פריט "db.odbc.discovery[,{$DSN}]", התוצאה של שאילתה זו הופכת אוטומטית לתוצאות הבאות JSON:
[
{
"{#HOST}": "יפן 1",
"{#COUNT}": "5"
},
{
"{#HOST}": "יפן 2",
"{#COUNT}": "12"
},
{
"{#HOST}": "לטביה",
"{#COUNT}": "3"
}
]
ניתן לראות ששמות העמודות הופכים לשמות מאקרו ולשורות נבחרות הופכים לערכים של פקודות מאקרו אלה.
אם זה לא ברור איך שם עמודה ישתנה לתוך שם מאקרו, מומלץ להשתמש בכינויי עמודות כמו "COUNT(h2.host) AS count" בדוגמה למעלה.
במקרה שלא ניתן להמיר שם עמודה לשם מאקרו חוקי, ה- כלל הגילוי הופך ללא נתמך, עם פירוט הודעת השגיאה מספר העמודה הפוגענית. אם רוצים עזרה נוספת, התקבל שמות העמודות מסופקים תחת DebugLevel=4 בקובץ היומן של שרת Zabbix:
$ grep db.odbc.discovery /tmp/zabbix_server.log
...
23876:20150114:153410.856 ב-db_odbc_discovery() query:'SELECT h1.host, COUNT(h2.host) FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid GROUP IN (5BY1.6) IN (5BY1. h1.host;'
23876:20150114:153410.860 עמודת db_odbc_discovery()[1]:'host'
23876:20150114:153410.860 עמודה db_odbc_discovery()[2]:'COUNT(h2.host)'
23876:20150114:153410.860 סוף db_odbc_discovery():NOTSUPPORTED
23876:20150114:153410.860 פריט [שרת Zabbix:db.odbc.discovery[proxies,{$DSN}]] שגיאה: לא ניתן להמיר את שם העמודה מס' 2 למאקרו.
כעת, כאשר אנו מבינים כיצד שאילתת SQL הופכת ל-JSON אובייקט, נוכל להשתמש במאקרו {#HOST} באבות טיפוס של פריט:
לאחר ביצוע הגילוי, ייווצר פריט עבור כל פרוקסי:
באמצעות db.odbc.get[,{$DSN}]
ובדוגמה הבאה של SQL:
mysql> SELECT h1.host, COUNT(h2.host) AS count FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;
+--------+--------+
| מארח | לספור |
+--------+--------+
| יפן 1 | 5 |
| יפן 2 | 12 |
| לטביה | 3 |
+--------+--------+
3 שורות בסט (0.01 שניות)
ה-JSON הזה יוחזר:
[
{
"host": "יפן 1",
"count": "5"
},
{
"host": "יפן 2",
"count": "12"
},
{
"host": "לטביה",
"count": "3"
}
]
כפי שאתה יכול לראות, אין שם פקודות מאקרו גילוי ברמה נמוכה. למרות זאת, ניתן ליצור פקודות מאקרו מותאמות אישית לגילוי ברמה נמוכה ב-LLD פקודות מאקרו של כלל גילוי באמצעות JSONPath, לדוגמה:
כעת ניתן להשתמש במאקרו {#HOST} הזה באבות טיפוס של פריטים: