Objetivo
Monitorar os objetos de uma aplicação, como JBoos, Tomcat ou outro baseado em JMX.
Onde encontrar
A partir da versão 5.1 do OpMon o pacote já virá instalado e configurado no diretório /usr/local/opmon/libexec/appserver-monitor/scripts.
Dentro deste diretório existe um arquivo README>/strong> com as instruções sobre como rodar o mesmo.
Principais dependências
O jmxlist.groovy depende de alguns pacotes extras, pacotes estes que serão, a partir da versão 5.1, instalados automaticamente, são eles:
- jdk
Pacote de desenvolvimento do java que contém os binários jconsole e javac, utilizados para teste de conexão e compilação de scripts groovy pela jvm respectivamente.
- groovy
esta dependência é fornecida junto ao pacote do appserver-monitor até a versão 5.0, a partir da 5.1 será um pacote separado
- jboss-client.jar
este é um arquivo que faz parte do JBOSS e fornece as diretivas para conexão
Primeiros passos
Acessar o diretório e exportar a variável de ambiente.
[root@~]# cd /usr/local/opmon/libexec/appserver-monitor/scripts/ [root@scripts]# export CLASSPATH="../daemons/:/usr/local/opmon/libexec/appserver-monitor/daemons/jboss-client.jar"
Para versões 7 ou superior, usar a string de conexão abaixo
[root@scripts]# ./jmxlist.groovy -U service:jmx:remoting-jmx://10.10.31.16:8588
Para versões 7 ou inferior, usar a string de conexão abaixo
[root@scripts]# ./jmxlist.groovy -U service:jmx:rmi:///jndi/rmi://10.10.31.16:8588/jmxrmi
Os contadores
O resultado esperado será uma lista de contadores, conforme o exemplo abaixo.
'''''''''''''''''''''''''''''''''''''''''''''''''''''' start '''''''''''''''''''''''''''''''''''''''''''''''''''''' Catalina:j2eeType=Servlet,name=jsp,WebModule=//localhost/probe,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=Servlet,name=probe,WebModule=//localhost/probe,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=Servlet,name=default,WebModule=//localhost/,J2EEApplication=none,J2EEServer=none Catalina:type=DataSource,path=/probe,host=localhost,class=javax.sql.DataSource,name="jdbc/global/hcpa/usu_iap/OracleDataSource" Catalina:j2eeType=Servlet,name=uptime,WebModule=//localhost/probe,J2EEApplication=none,J2EEServer=none Catalina:type=NamingResources,resourcetype=Context,path=/,host=localhost Catalina:type=NamingResources,resourcetype=Context,path=/iap,host=localhost Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=WebModule,name=//localhost/iap,J2EEApplication=none,J2EEServer=none Catalina:type=Loader,path=/iap,host=localhost java.lang:type=MemoryPool,name=Code Cache Users:type=Role,rolename=probeuser,database=UserDatabase ... '''''''''''''''''''''''''''''''''''''''''''''''''''''' end ''''''''''''''''''''''''''''''''''''''''''''''''''''''
Descobrindo o atributo
Após listados todos contadores, é hora de definir os atributos, para isto, escolhemos um contador específico, neste caso (java.lang:type=ClassLoading) e usamos o comando abaixo para listar as opções.
[root@scripts]# ./jmxlist.groovy -U service:jmx:rmi:///jndi/rmi://10.10.31.16:8588/jmxrmi -q java.lang:type=ClassLoading '''''''''''''''''''''''''''''''''''''''''''''''''''''' start '''''''''''''''''''''''''''''''''''''''''''''''''''''' java.lang:type=ClassLoading LoadedClassCount : 3965 UnloadedClassCount : 0 TotalLoadedClassCount : 3965 Verbose : false '''''''''''''''''''''''''''''''''''''''''''''''''''''' end ''''''''''''''''''''''''''''''''''''''''''''''''''''''
Listando todos os atributos de todos os objetos
[root@scripts]# ./jmxlist.groovy -U service:jmx:rmi:///jndi/rmi://10.10.31.16:8588/jmxrmi -a
Executando a checagem
Agora que temos os contadores, descobrimos o atributo dele, usamos o check_jmx para efetuar a checagem, que posteriormente será colocado no OpMon.
[root@scripts]# ./check_jmx -U service:jmx:rmi:///jndi/rmi://10.10.31.16:8588/jmxrmi -O java.lang:type=ClassLoading -A LoadedClassCount JMX OK - LoadedClassCount = 3965 | 'LoadedClassCount'=3965;;;;
Outras opções
Podemos ainda definir a unidade de medida, alerta e critico, de acordo com as opções abaixo do plugin.
[root@scripts]# ./check_jmx -h Options are: -h Help page, this page. -U JMX URL; for example: "service:jmx:rmi://:/jndi/rmi://:/jmxrmi" -O Object name to be checked, for example, "java.lang:type=Memory" -A Attribute name -K Attribute key; use when attribute is a composite -v verbose -w Warning threshold value/range. Has to correspond to type of object retrieved, but can be a regular expression for String return values. -c Critical threshold value/range. Has to correspond to type of object retrieved, but can be a regular expression for String return values. -o Operation to invoke on MBean after querying value. Useful to reset any statistics or counter. -u Units. One of B, KB, MB, TB, s, us, ms, or c for a continuous counter. --username Username, if JMX access is restricted; for example "monitorRole" --password Password
ATENÇÃO
A partir da versão 7 do Jboss não é possível realizar a checagem a partir do plugin check_jmx, deve-se utilizar o plugin jmx.sh.
[root@scripts]# ./jmx.sh -U service:jmx:remoting-jmx://10.20.10.13:9999 -q java.lang:type=ClassLoading -A LoadedClassCount LoadedClassCount = 17360