Thứ Sáu, 11 tháng 1, 2019

Zabbix Check Java JMX






ZABBIX MONITORING JAVA JMX

    


Contents
Sơ đồ hoạt động của Zabbix JMX.. 2
Phần 1: Cài đặt Tomcat + Enable JMX.. 2
Phần 2: Cài đặt và setting Zabbix-Server. 4
Phần 3: Bảo mật JMX.. 6
Phần 4: Fix lỗi template Tomcat7/8 của zabbix not-support. 8



tuanduong122


Sơ đồ hoạt động của Zabbix JMX



Ở bài hướng dẫn này chúng ta sẽ sử dụng ở phía client là : tomcat web-server và enable jmx lên (với các tiến trình chạy trên nền java khác cũng tương tự).
[Zabbix-server --- Zabbix Java gateway --- Tomcat JMX]

Phần 1: Cài đặt Tomcat + Enable JMX

Cài đặt java
# tar -xvzf jdk-8u181-linux-x64.tar.gz
# chown -R root.root jdk1.8.0_181
# mv jdk1.8.0_181 /opt/

Setting môi trường java
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_181/bin/java 2
# alternatives --config java
# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_181/bin/jar 2
# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_181/bin/javac 2
# alternatives --install /usr/bin/javaws javaws /opt/jdk1.8.0_181/bin/javaws  2
# alternatives --set jar /opt/jdk1.8.0_181/bin/jar
# alternatives --set javac /opt/jdk1.8.0_181/bin/javac
# alternatives --set javaws /opt/jdk1.8.0_181/bin/javaws
# java –version

Cài đặt Tomcat
Tải tomcat tại đường dẫn https://tomcat.apache.org/download-80.cgi
# tar -xvzf apache-tomcat-8.5.37.tar.gz
# mv apache-tomcat-8.5.37 /opt/tomcat

Setting tomcat bật JMX
# vim /opt/tomcat/bin/setenv.sh
#Set Heap Memory Commnit and Max
export CATALINA_OPTS="$CATALINA_OPTS -Xms1024m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx3096m"

#Enable JMX with no authenticaion
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote \
 -Dcom.sun.management.jmxremote.port=12345 \
 -Dcom.sun.management.jmxremote.authenticate=false \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Djava.rmi.server.hostname=192.168.80.134"
IP 192.168.80.134 chính là ip của client.
Start tomcat
# cd /opt/tomcat/bin
# ./startup.sh
# tail -n 1000 /opt/tomcat/logs/*
# netstat -apln | grep 12345
tcp        0      0 :::12345                    :::*                        LISTEN      1553/java

Ta có thể tải jconsole.jar về để check real-time (Yêu cầu cài đặt java jdk để mở trên window https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html )






  



Phần 2: Cài đặt và setting Zabbix-Server


Cài đặt thêm zabbix-gateway-java trên zabbix-server
# yum install zabbix-java-gateway

Thêm config
[root@zabbix-server opt]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

[root@ zabbix-server opt]# vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_PORT=10052
START_POLLERS=5

Restart zabbix-server và zabbix-gateway java
# /etc/init.d/zabbix-server restart
# /etc/init.d/zabbix-java-gateway restart

# ps aux | grep java
zabbix     2212  0.0  0.2 168920  3388 ?        S    21:03   0:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000057 sec, idle 5 sec]
zabbix     2213  0.0  0.2 168920  3388 ?        S    21:03   0:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000043 sec, idle 5 sec]
zabbix     2214  0.0  0.2 168920  3388 ?        S    21:03   0:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000059 sec, idle 5 sec]
zabbix     2215  0.0  0.2 168920  3388 ?        S    21:03   0:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000034 sec, idle 5 sec]
zabbix     2216  0.0  0.2 168920  3388 ?        S    21:03   0:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000049 sec, idle 5 sec]
zabbix     2275  2.4  2.1 2353872 30608 ?       Sl   21:04   0:00 java -server -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.4.15.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.listenPort=10052 -Dzabbix.startPollers=5 com.zabbix.gateway.JavaGateway
root       2287  0.0  0.0 103324   896 pts/0    S+   21:04   0:00 grep java


Phần 1 ta đã cài agent, tiếp theo ta sẽ add client vào giám sát trong zabbix
Add hoặc sửa Host




Thêm Template:










Phần 3: Bảo mật JMX

Mục đích là để bảo mật JMX. Khi kết nối cần phải nhập pass và user. https://db.apache.org/derby/docs/10.10/adminguide/radminjmxenabledisable.html
Stop tomcat. Change lại setenv.sh
# /opt/tomcat/bin/shutdown.sh
# vim /opt/tomcat/bin/setenv.sh
#Enable JMX with authentication. You need create file "jmxremote.access" and "jmxremote.password" and chown readonly permission.
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote \
 -Dcom.sun.management.jmxremote.port=12345 \
 -Dcom.sun.management.jmxremote.authenticate=true \
 -Dcom.sun.management.jmxremote.password.file=/opt/tomcat/conf/jmxremote.password \
 -Dcom.sun.management.jmxremote.access.file=/opt/tomcat/conf/jmxremote.access \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Djava.rmi.server.hostname=192.168.80.134"

[root@java-client ~]# vim /opt/tomcat/conf/jmxremote.password
monitorRole  1234321
controlRole  1234567
[root@java-client ~]# vim /opt/tomcat/conf/jmxremote.access
monitorRole readonly
controlRole readwrite
[root@java-client ~]# chmod 600 /opt/tomcat/conf/jmxremote.access
[root@java-client ~]# chmod 600 /opt/tomcat/conf/jmxremote.password

# /opt/tomcat/bin/startup.sh

Client đã setting password xong. Giờ cần khai báo user/pass cho zabbix-server
Cách 1: Vào sửa từng Item trong Template


Cách 2: Export Template ra, sửa trực tiếp tất cả iteam trong file .xml và Import lại

Ta Replace All
                    <username/>
                    <password/>
Thành
                    <username>monitorRole</username>
                    <password>1234321</password>
Hoặc có thể sử dụng MACRO của zabbix thay cho trường Username/pass cũng được.

                    <username>{$USER_JMX}</username>
                    <password>{$PASS_JMX}</password>








Phần 4: Fix lỗi template Tomcat7/8  zabbix not-supported.



VD: Nhìn trên zabbix ta có Item : Template App Apache Tomcat JMXhttp-8080 threads max
Có key: jmx["Catalina:type=ThreadPool,name=http-8080",maxThreads]

Ta sử dụng Jconsole / Mbeans để tìm vị trí của nó trong tree

Tomcat version 7/8 sử dụng connector NIO. Vậy ta có kết luận là Zabbix đang gọi sai Name trong ThreadPool

Ta vào Template của zabbix, sửa lại theo đúng tên như sau:


jmx["Catalina:type=ThreadPool,name=http-8080",maxThreads]
Sửa thành:
jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",maxThreads]
-------------------------------------------------------
Ngoài ra ta có thể tải check_jmx của nagios để check bằng console

Ta chạy lệnh
[root@zabbix-server]# ./check_jmx -U  service:jmx:rmi:///jndi/rmi://192.168.80.134:12345/jmxrmi -O "Catalina:type=ThreadPool,name=\"http-nio-8080\"" -A maxThreads
JMX OK maxThreads=200
Lệnh check_jmx chính là chạy :
[root@zabbix-server]#  java -cp jmxquery.jar org.nagios.JMXQuery -U  service:jmx:rmi:///jndi/rmi://192.168.80.134:12345/jmxrmi -O "Catalina:type=ThreadPool,name=\"http-nio-8080\"" -A maxThreads
JMX OK maxThreads=200



Ứng cứu khi chown -R user1:user1 /etc

1. Bài toán Gõ nhầm: chown -R user1:user1 /etc 2. Giải: Cách 1: Tìm bản backup /etc cũ (tỉ lệ phục hồi gần như ~100%) Cách 2: Tìm tạm 1 thư ...