This is an old revision of the document!


Monitorer tomcat/java/bloat avec collectd

collectd c'est le bien, la nouvelle hype du monitoring qui fait des graphes zwip-zwip dissaidor compliant. Malheureusement, des fois les dissaidors ils font de la merde et on se retrouve avec des blo^Whorreu^Wmachi^Wtomcat en prod. Donc il faut un moyen de les monitorer pour pouvoir dire 'zyva tavu toute la ram qu'il bouffe lui'.

Et la, j'ai pas trouvé de doc toute faite bien précise, d'ou ce blurb.

Tomcat

Ici, debian lenny/tomcat 5.5 classique.

jmx

Déja, faut dire a tomcat qu'on va utiliser un machin nommé jmx pour regarder les indicateurs™. Donc, dans /etc/default/tomcat5.5 on ajoute tout ca a JAVA_OPTS.

JAVA_OPTS="-Dcom.sun.management.jmxremote 
     -Dcom.sun.management.jmxremote.port=7091
     -Dcom.sun.management.jmxremote.authenticate=false
     -Dcom.sun.management.jmxremote.ssl=false"

La, bien évidemment, on est sur un serveur en remote, donc pas de X, donc pas d'utilisation de jconsole. Pour faire un test de jmx en cli-only (tel le vrai admin barbu) on pourra recourir a jmxterm ou cmdline-jmxclient.

$java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:7091
$java -jar cmdline-jmxclient-0.10.3.jar - localhost:7091

security manager

Dans les trucs qui hérissent les poils, y'a ce #@!#@!$@! de security manager, auquel il faut dire fonction par fonction ce qu'on autorise. Pour mon cas il faudra:

#cat /etc/tomcat5.5/policy.d/70jmx.policy 

grant principal javax.management.remote.JMXPrincipal "monitor"
{
   permission java.net.SocketPermission "*", "listen,accept,resolve";
   permission javax.management.MBeanPermission "*", "queryNames,getAttribute";
};
#/etc/init.d/tomcat5.5 restart

Ainsi, plus d'insultes telles que:

collectd[30053]: GenericJMXConfMBean: queryNames failed: java.security.AccessControlException: access denied (java
x.management.MBeanPermission -#-[-] queryNames)
collectd[30053]: GenericJMXConfMBean: queryNames failed: java.rmi.ConnectException: Connection refused to host: 10.0.0.4; nested exception is : java.net.ConnectException: Connection refused
collectd[2036]: GenericJMXConfValue.query: getAttribute failed: java.security.AccessControlException: access denied (javax.management.MBeanPermission sun.management.MemoryPoolImpl#Usage[java.lang:name=PS Eden Space,type=MemoryPool] getAttribute)

Collectd

Coté collectd, on se basera sur l'excellente doc du site de collectd, avec cet exemple de conf (aussi dispo dans /usr/share/doc/collectd-core/examples/GenericJMX.conf)

unix/collectd_tomcat.1286204643.txt.gz · Last modified: 2010/10/04 15:04 by gast0n