13 מעקב דרך JMX

סקירה כללית

ניתן להשתמש בניטור JMX לניטור מוני JMX של Java יישום.

לניטור JMX יש תמיכה מקורית ב- Zabbix בצורה של Zabbix דמון בשם "שער Zabbix Java", שהוצג מאז Zabbix 2.0.

כדי לאחזר את הערך של מונה JMX מסוים במארח, Zabbix השרת שואל את Zabbix שער Java, אשר בתורו משתמש ב-JMX הַנהָלָה API כדי לשאול את יישום העניין מרחוק.

לפרטים נוספים והגדרה עיין ב-Zabbix Java gateway.

::: הערה אזהרה תקשורת בין שער Java לבין המנוטר יישום JMX לא צריך להיות חומת אש. :::

הפעלת ניטור JMX מרחוק עבור יישום Java

אפליקציית Java לא צריכה שום תוכנה נוספת מותקנת, אבל יש להפעיל אותו עם אפשרויות שורת הפקודה המפורטות להלן יש תמיכה בניטור JMX מרחוק.

כמינימום, אם אתה רק רוצה להתחיל במעקב אחר א יישום Java פשוט על מארח מקומי ללא אבטחה נאכפת, התחל זה עם האפשרויות האלה:

 ג'אווה \
        -Dcom.sun.management.jmxremote \
        -Dcom.sun.management.jmxremote.port=12345 \
        -Dcom.sun.management.jmxremote.authenticate=false \
        -Dcom.sun.management.jmxremote.ssl=false \
        -Dcom.sun.management.jmxremote.registry.ssl=false \
        -jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

זה גורם ל-Java להאזין לחיבורי JMX נכנסים ביציאה 12345, מ מארח מקומי בלבד, ואומר לו לא לדרוש אימות או SSL.

אם ברצונך לאפשר חיבורים בממשק אחר, הגדר את פרמטר Djava.rmi.server.hostname ל-IP של ממשק זה.

אם אתה רוצה להקפיד יותר על אבטחה, יש הרבה אחרים אפשרויות Java הזמינות עבורך. לדוגמה, הדוגמה הבאה מתחילה את אפליקציה עם קבוצה צדדית יותר של אפשרויות ופותחת אותה לרחבה יותר רשת, לא רק מארח מקומי.

 ג'אווה \
        -Djava.rmi.server.hostname=192.168.3.14 \
        -Dcom.sun.management.jmxremote \
        -Dcom.sun.management.jmxremote.port=12345 \
        -Dcom.sun.management.jmxremote.authenticate=true \
        -Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password \
        -Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access \
        -Dcom.sun.management.jmxremote.ssl=true \
        -Dcom.sun.management.jmxremote.registry.ssl=true \
        -Djavax.net.ssl.keyStore=$YOUR_KEY_STORE \
        -Djavax.net.ssl.keyStorePassword=$YOUR_KEY_STORE_PASSWORD \
        -Djavax.net.ssl.trustStore=$YOUR_TRUST_STORE \
        -Djavax.net.ssl.trustStorePassword=$YOUR_TRUST_STORE_PASSWORD \
        -Dcom.sun.management.jmxremote.ssl.need.client.auth=true \
        -jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

ניתן לציין את רוב (אם לא את כל) ההגדרות הללו /etc/java-6-openjdk/management/management.properties (או איפה שלא הקובץ נמצא במערכת שלך).

שים לב שאם ברצונך להשתמש ב-SSL, עליך לשנות את הסקריפט startup.sh על ידי הוספת אפשרויות -Djavax.net.ssl.* לשער Java, כך שהוא יידע היכן ניתן למצוא חנויות מפתח ואמון.

ראה ניטור וניהול באמצעות JMX לתיאור מפורט.

קביעת תצורה של ממשקי JMX ופריטים בחזית Zabbix

כששער Java פועל, השרת יודע היכן למצוא אותו ו-Java יישום שהתחיל עם תמיכה בניטור JMX מרחוק, הגיע הזמן כדי להגדיר את הממשקים והפריטים ב- Zabbix GUI.

הגדרת ממשק JMX

אתה מתחיל ביצירת ממשק מסוג JMX במארח העניין.

כל שדות הקלט החובה מסומנים בכוכבית אדומה.

הוספת פריט סוכן JMX

עבור כל מונה JMX שאתה מעוניין בו אתה מוסיף פריט JMX agent מצורף לממשק הזה.

המפתח בצילום המסך למטה אומר jmx["java.lang:type=Memory","HeapMemoryUsage.used"].

כל שדות הקלט החובה מסומנים בכוכבית אדומה.

השדות הדורשים מידע ספציפי עבור פריטי JMX הם:

סוג הגדר את סוכן JMX כאן.
Key מפתח הפריט jmx[] מכיל שלושה פרמטרים:
שם אובייקט - שם האובייקט של MBean
שם תכונה - שם תכונה MBean עם מורכבות אופציונלית שמות שדות נתונים מופרדים על ידי נקודות
תיאור קצר ייחודי - תיאור ייחודי המאפשר מספר פריטי JMX עם אותו שם אובייקט ושם תכונה על המארח (אופציונלי)
ראה למטה לפרטים נוספים על פריט JMX מפתחות.
מאז Zabbix 3.4, אתה עשוי לגלות תכונות MBeans ו-MBean באמצעות פריט jmx.discovery[] גילוי ברמה נמוכה.
נקודת קצה JMX ניתן לציין נקודת קצה JMX מותאמת אישית. ודא שהפרמטרים של חיבור נקודת הקצה של JMX תואמים לממשק JMX. ניתן להשיג זאת על ידי שימוש בפקודות מאקרו של {HOST.*} כפי שנעשה בנקודת הקצה של ברירת המחדל של JMX.
שדה זה נתמך מאז 3.4.0. {HOST.*} מאקרו ופקודות מאקרו של משתמשים נתמכות.
שם משתמש ציין את שם המשתמש, אם הגדרת אימות ביישום Java שלך.
נתמכות בפקודות מאקרו של משתמש.
סיסמה ציין את הסיסמה, אם הגדרת אימות ביישום Java שלך.
נתמכות בפקודות מאקרו של משתמשים.

אם אתה רוצה לפקח על מונה בוליאני שהוא "נכון" או "שקר", ואז אתה מציין את סוג המידע כ"נומרי (לא חתום)" ובחר בשלב העיבוד המקדים "בוליאנית עד עשרונית" בעיבוד המקדים לשונית. השרת יאחסן ערכים בוליאניים כ-1 או 0, בהתאמה.

מפתחות פריט JMX בפירוט רב יותר

תכונות פשוטות

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

 jmx[com.example:Type=שלום, משקל]

בדוגמה זו שם אובייקט הוא "com.example:Type=Hello", תכונה השם הוא "משקל" וכנראה שסוג הערך המוחזר צריך להיות "נומרי (לָצוּף)".

תכונות המחזירות נתונים מרוכבים

זה הופך מסובך יותר כאשר התכונה שלך מחזירה נתונים מורכבים. לדוגמה: שם התכונה שלך הוא "תפוח" והוא מחזיר hash המייצג את הפרמטרים שלו, כמו "משקל", "צבע" וכו'. המפתח שלך עשוי נראה כמו זה:

 jmx[com.example:Type=Hello,apple.weight]

כך מופרדים שם תכונה ומפתח hash, באמצעות a סמל נקודה. באותו אופן, אם תכונה מחזירה נתונים מרוכבים מקוננים, חלקים מופרדים בנקודה:

 jmx[com.example:Type=Hello,fruits.apple.weight]
תכונות המחזירות נתונים טבלאיים

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

דוגמה למאפיין נתונים טבלאי:

  jmx[com.example:type=Hello,foodinfo]

ערך פריט:

[
          {
            "תפוח",
            "b": "בננה",
            "c": "דובדבן"
          },
          {
            "תפוח אדמה",
            "b": "חסה",
            "c": "בצל"
          }
       ]
בעיה עם נקודות

בינתיים הכל טוב. אבל מה אם שם תכונה או מפתח hash מכילים נקודה סֵמֶל? הנה דוגמא:

 jmx[com.example:Type=Hello,all.fruits.apple.weight]

זו בעיה. איך לומר לזאביקס ששם התכונה הוא "הכל.פירות", לא רק "הכל"? איך להבחין בנקודה שהיא חלק ממנה השם מהנקודה שמפרידה בין שם תכונה לבין מפתחות hash?

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

 jmx[com.example:Type=Hello,all\.fruits.apple.weight]

באותו אופן, אם מפתח ה-hash שלך מכיל נקודה, אתה בורח ממנה:

 jmx[com.example:Type=Hello,all\.fruits.apple.total\.weight]
נושאים אחרים

תו נטוי אחורי בשם של תכונה צריך להיות ב-escape:

 jmx[com.example:type=Hello,c:\\documents]

לטיפול בתווים מיוחדים אחרים במפתח פריט JMX, ראה פורמט מפתח הפריט סעיף.

זה בעצם כל מה שיש בזה. ניטור JMX שמח!

סוגי נתונים לא פרימיטיביים

מאז Zabbix 4.0.0 אפשר לעבוד עם MBeans מותאמים אישית חוזרים סוגי נתונים לא פרימיטיביים, אשר עוקפים את שיטת toString().

שימוש בנקודת קצה מותאמת אישית עם JBoss EAP 6.4

נקודות קצה מותאמות אישית מאפשרות עבודה עם פרוטוקולי תחבורה שונים אחרים מאשר ברירת המחדל של RMI.

כדי להמחיש אפשרות זו, בואו ננסה להגדיר את JBoss EAP 6.4 ניטור כדוגמה. ראשית, בואו נניח כמה הנחות:

  • כבר התקנת את Zabbix Java gateway. אם לא, אז אתה יכול עשה זאת בהתאם לתיעוד.
  • שרת Zabbix ו-Java Gateway מותקנים עם הקידומת /usr/local/
  • JBoss כבר מותקן ב- /opt/jboss-eap-6.4/ ופועל ב- מצב עצמאי
  • נניח שכל הרכיבים הללו עובדים על אותו מארח
  • חומת אש ו-SELinux מושבתות (או מוגדרות בהתאם)

בואו נעשה כמה הגדרות פשוטות ב-zabbix_server.conf:

 JavaGateway=127.0.0.1
        StartJavaPollers=5

ובקובץ התצורה zabbix_java/settings.sh (או zabbix_java_gateway.conf):

 START_POLLERS=5

בדוק ש-JBoss מאזין ליציאת הניהול הסטנדרטית שלו:

 $ netstat -natp | grep 9999
        tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 10148/java

כעת בואו ניצור מארח עם ממשק JMX 127.0.0.1:9999 ב- Zabbix.

כפי שאנו יודעים שגרסה זו של JBoss משתמשת ב-JBoss Remoting פרוטוקול במקום RMI, אנו עשויים לעדכן באופן המוני את פרמטר נקודת הקצה של JMX עבור פריטים בתבנית JMX שלנו בהתאם:

 service:jmx:remoting-jmx://{HOST.CONN}:{HOST.PORT}

בואו נעדכן את מטמון התצורה:

 $ /usr/local/sbin/zabbix_server -R config_cache_reload

שים לב שאתה עלול להיתקל בשגיאה תחילה.

"פרוטוקול לא נתמך: remoting-jmx" אומר ששער Java לא לדעת איך לעבוד עם הפרוטוקול שצוין. את זה ניתן לתקן על ידי יצירת קובץ ~/needed_modules.txt עם התוכן הבא:

 jboss-as-remoting
        jboss-logging
        jboss-logmanager
        jboss-marshalling
        jboss-remoting
        jboss-sasl
        jcl-over-slf4j
        jul-to-slf4j-stub
        log4j-jboss-logmanager
        remoting-jmx
        slf4j-api
        xnio-api
        xnio-nio</pre>

ולאחר מכן ביצוע הפקודה:

 $ for i ב-$(cat ~/needed_modules.txt); מצא את /opt/jboss-eap-6.4 -iname ${i}*.jar -exec cp {} /usr/local/sbin/zabbix_java/lib/ \; ; בוצע

לפיכך, לשער Java יהיו כל המודולים הדרושים לעבודה איתם jmx-remoting. מה שנשאר זה להפעיל מחדש את שער Java, לחכות קצת ו אם עשית הכל נכון, ראה שנתוני ניטור JMX מתחילים להגיע לזאביקס (ראה גם: אחרון data).