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
Tải Java JDK Oracle ở đường dẫn:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
# 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
# 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 JMX: http-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