Dockerを導入するにあたり、コンテナで動くTomcatの各種メトリクスをZabbixから参照するために行った検証のメモ。
Zabbixの設定
利用したZabbixのバージョンは3.0。これもDockerコンテナで動かしている。
以下の記事を参考に環境を用意した。
[docker]1分でテスト用のZabbix環境を用意する
http://dev.classmethod.jp/cloud/dockerized-zabbix-test/
Zabbix Java Gatewayを利用するため、
- ZS_JavaGateway
- ZS_JavaGatewayPort
- ZS_StartJavaPollers
の3つを追加で指定してコンテナを起動している。
docker run \
-d \
--name zabbix \
-p 10081:80 \
-p 10051:10051 \
-p 10052:10052 \
-v /etc/localtime:/etc/localtime:ro \
--link zabbix-db:zabbix.db \
--env="ZS_DBHost=zabbix.db" \
--env="ZS_DBUser=zabbix" \
--env="ZS_DBPassword=my_password" \
--env="ZS_JavaGateway=127.0.0.1" \
--env="ZS_JavaGatewayPort=10052" \
--env="ZS_StartJavaPollers=5" \
zabbix/zabbix-3.0:latest
最後に、コンテナへアクセスしてZabbix Java Gatewayを起動する。
(最初、これを行わずハマった)
[root@xxxx ~]# docker exec -it zabbix bash
[root@yyyy /]# /usr/local/sbin/zabbix_java/startup.sh
Tomcatの設定
JMXを利用するため、CATALINA_OPSへ以下のような設定を追加する。
CATALINA_OPTS="${CATALINA_OPTS} \
-server \
-Xmx512m \
-Xms512m \
-XX:PermSize=32m \
-XX:MaxPermSize=128m \
-Xloggc:/usr/local/tomca/logs/gc.txt \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.rmi.port=12345 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=${HOST_IP_ADDRESS}"
"-Dcom.sun.management.jmxremote"以降の設定を追加した。
"-Djava.rmi.server.hostname"に関しては、ローカルIPではなくコンテナを起動したDockerホストのIPアドレスが必要となるっぽい。
Tomcatコンテナを起動するために用意したスクリプトで環境変数を指定した。
また、Zabbix Java Gatewayから参照するため12345番ポートをポートフォワードしている。
IP_ADDRESS=`ip -f inet -o addr | grep -v "127.0.0.1" | cut -d\ -f 7 | cut -d/ -f 1 | awk 'NR == 1'`
docker run -d -p 8080:8080 -p 8009:8009 -p 12345:12345 \
-v /etc/localtime:/etc/localtime:ro \
--name tomcat_xxx \
--env CATALINA_OPTS="-Dorg.apache.catalina.SESSION_PARAMETER_NAME=JSESSIONID -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DjvmRoute=xxx" \
--env HOST_IP_ADDRESS=${IP_ADDRESS} \
...
以上の設定で、ZabbixからTomcatのConnector worker等を参照出来るようになった。