Differences

This shows you the differences between two versions of the page.

Link to this comparison view

unix:collectd_tomcat [2010/10/04 15:04]
gast0n created
unix:collectd_tomcat [2010/10/04 15:15] (current)
gast0n
Line 3: Line 3:
 [[http://​www.collectd.org|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'. [[http://​www.collectd.org|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.+Et la, j'ai pas trouvé de doc toute faite bien précise ​de bout en bout, d'ou ce blurb.
  
 ===== Tomcat ===== ===== Tomcat =====
 Ici, debian lenny/​tomcat 5.5 classique. Ici, debian lenny/​tomcat 5.5 classique.
 ==== jmx ==== ==== jmx ====
-Déja, faut dire a tomcat qu'on va utiliser un machin nommé jmx pour regarder les indicateurs(tm). Donc, dans /​etc/​default/​tomcat5.5 on ajoute tout ca a JAVA_OPTS.+Déja, faut dire a tomcat qu'on va utiliser un machin nommé jmx pour regarder les indicateurs(tm). Donc, dans ''​/​etc/​default/​tomcat5.5'' ​on ajoute tout ca a JAVA_OPTS.
 <​code>​ <​code>​
-JAVA_OPTS="​-Dcom.sun.management.jmxremote  +JAVA_OPTS="​-Dcom.sun.management.jmxremote ​\ 
-     ​-Dcom.sun.management.jmxremote.port=7091 +     ​-Dcom.sun.management.jmxremote.port=7091 ​\ 
-     ​-Dcom.sun.management.jmxremote.authenticate=false+     ​-Dcom.sun.management.jmxremote.authenticate=false ​\
      ​-Dcom.sun.management.jmxremote.ssl=false"​      ​-Dcom.sun.management.jmxremote.ssl=false"​
 </​code>​ </​code>​
Line 19: Line 19:
 $java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:​7091 $java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:​7091
 $java -jar cmdline-jmxclient-0.10.3.jar - localhost:​7091 $java -jar cmdline-jmxclient-0.10.3.jar - localhost:​7091
 +</​code>​
 +
 +Maintenant, on """​sécurise"""​ un peu tout ca via un peu de user/​pass/​auth sur jmx:
 +<​code>​
 +#JAVA_OPTS dans /​etc/​default/​tomcat5.5
 +....
 +        -Dcom.sun.management.jmxremote.authenticate=true \
 +        -Dcom.sun.management.jmxremote.access.file=../​conf/​jmxremote.access \
 +        -Dcom.sun.management.jmxremote.password.file=../​conf/​jmxremote.password \
 +        -Dcom.sun.management.jmxremote.ssl=false \
 +....
 +#cat /​var/​lib/​tomcat5.5/​conf/​jmxremote.access ​
 +monitorUser readonly
 +#cat /​var/​lib/​tomcat5.5/​conf/​jmxremote.password ​
 +monitorUser ZOMGPASSWORD!
 +#chmod 600 /​var/​lib/​tomcat5.5/​conf/​jmxremote.*
 +#chown tomcat55 /​var/​lib/​tomcat5.5/​conf/​jmxremote.*
 +#/​etc/​init.d/​tomcat5.5 restart
 +</​code>​
 +Et on reteste:
 +<​code>​
 +#java -jar jmxterm-1.0-alpha-4-uber.jar -u monitorUser -p ZOMGPASSWORD! -l localhost:​7091
 </​code>​ </​code>​
  
Line 36: Line 58:
 Ainsi, plus d'​insultes telles que: Ainsi, plus d'​insultes telles que:
 <​code>​ <​code>​
-collectd[30053]:​ GenericJMXConfMBean:​ queryNames failed: java.security.AccessControlException:​ access denied (java +collectd[30053]:​ GenericJMXConfMBean:​ queryNames failed: java.security.AccessControlException:​ access denied (javax.management.MBeanPermission -#-[-] queryNames)
-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[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[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)
Line 43: Line 64:
 ===== Collectd ==== ===== Collectd ====
  
-Coté collectd, on se basera sur l'​[[http://​collectd.org/​wiki/​index.php/​Plugin:​GenericJMX|excellente doc]] du site de collectd, avec cet [[http://​collectd.org/​wiki/​index.php/​Plugin:​GenericJMX/​Config|exemple de conf]] (aussi dispo dans /​usr/​share/​doc/​collectd-core/​examples/​GenericJMX.conf)+Coté collectd, on se basera sur l'​[[http://​collectd.org/​wiki/​index.php/​Plugin:​GenericJMX|excellente doc]] du site de collectd, avec cet [[http://​collectd.org/​wiki/​index.php/​Plugin:​GenericJMX/​Config|exemple de conf]] (aussi dispo dans'' ​/​usr/​share/​doc/​collectd-core/​examples/​GenericJMX.conf''​) 
 + 
 +Donc les modifs importantes du ''/​etc/​collectd/​collectd.conf''​ sont: 
 +<​code>​ 
 + 
 +LoadPlugin java 
 +<Plugin "​java">​ 
 +#  JVMArg "​-verbose:​jni"​ 
 +  JVMArg "​-Djava.class.path=/​usr/​share/​collectd/​java/"​ 
 +  LoadPlugin "​org.collectd.java.GenericJMX"​ 
 +... 
 +plein de definitions de MBeans auquel on bite rien 
 +... 
 + 
 +    #####################​ 
 +    # Connection blocks # 
 +    #####################​ 
 +    <​Connection>​ 
 +      ServiceURL "​service:​jmx:​rmi:///​jndi/​rmi://​tomcat_host:​7091/​jmxrmi"​ 
 +      User "​monitorUser"​ 
 +      Password "​ZOMGPASSWORD!"​ 
 +      Host "​nom-pour-host-collectd"​ 
 +      Collect "​classes"​ 
 +      Collect "​compilation"​ 
 +      Collect "​garbage_collector"​ 
 +      Collect "​memory"​ 
 +      Collect "​memory_pool"​ 
 +      Collect "​catalina/​global_request_processor"​ 
 +      Collect "​catalina/​detailed_request_processor"​ 
 +      Collect "​catalina/​thread_pool"​ 
 +    </​Connection>​ 
 +  </​Plugin>​ 
 +</​Plugin>​ 
 +</​code>​ 
 +ne pas oublier le classpath pointant vers ''/​usr/​share/​collectd/​java''​ pour éviter le message d'​erreur suivant : 
 +<​code>​ 
 +cjni_init_native:​ Cannot find API class `org/​collectd/​api/​Collectd'​. 
 +</​code>​ 
 + 
 +Ah, et éventuellement,​ ne pas oublier ''​aptitude install openjdk-6-jre-headless''​ pour éviter l'​erreur cryptique suivante (java.so dépend de libjvm.so) : 
 +<​code>​ 
 +lt_dlopen (/​usr/​lib/​collectd/​java.so) failed: file not found 
 +</​code>​ 
 + 
 +Enfin, vous pouvez maintenant faire un peu de recursive loling en monitorant collectd via collectd, vu qu'il charge une jvm et bouffe du coup allégrement 1.7Gigowatt de RAM. 
 + 
 + 
 +JAVA, TU PUES~!@!#
unix/collectd_tomcat.txt · Last modified: 2010/10/04 15:15 by gast0n