3.3 How to set up agents by WAS type
Add to $JAVA_HOME/bin path
For all WAS, add the JDK’s $JAVA_HOME/bin to the PATH in the user environment variable or startup script.
export JAVA_HOME="/usr/java/jdk1.8.0_92" export PATH="$JAVA_HOME/bin:$PATH "
JBoss EAP 6.x, 7.x Standalone mode
For JBoss EAP, a setting in JBoss LogManager is required.
This is done by registering the com.opennaru.khan.agent and org.jboss.logmanager packages in jboss.modules.system.pkgs.
-
env.sh (6.x)
export AGENT_OPTS=" -javaagent:/svc/test/khan-agent/khan-agent.jar " #export AGENT_OPTS=" -javaagent:$(getKhanAgentPath :/svc/test/khan-agent) " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent-test11.conf" export JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager" export JBOSS_LOGMANAGER_DIR="$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main" export JBOSS_LOGMANAGER_JAR=`cd "$JBOSS_LOGMANAGER_DIR" && ls -1 *.jar` #export JBOSS_LOGMANAGER_JAR=$(getLogmanagerPath "$JBOSS_HOME") export JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_LOGMANAGER_DIR/$JBOSS_LOGMANAGER_JAR" export JAVA_OPTS=" $JAVA_OPTS -noverify" export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.opennaru.khan.agent,org.github.jamm,org.jboss.logmanager"
-
env.sh (7.x)
export AGENT_OPTS=" -javaagent:/home/icfcgw/khan-agent/khan-agent-5.1.0.jar " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent-icfcgw.conf " export JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager " export JBOSS_LOGMANAGER_DIR="$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main" export JBOSS_LOGMANAGER_JAR=cd "$JBOSS_LOGMANAGER_DIR" && ls -1 *.jar export JBOSS_WILDFLY_COMMON_DIR="$JBOSS_HOME/modules/system/layers/base/org/wildfly/common/main" export JBOSS_WILDFLY_COMMON_JAR=cd "$JBOSS_WILDFLY_COMMON_DIR" && ls -1 *.jar export JAVA_OPTS=" $JAVA_OPTS -noverify" export JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_LOGMANAGER_DIR/$JBOSS_LOGMANAGER_JAR:$JBOSS_WILDFLY_COMMON_DIR/$JBOSS_WILDFLY_COMMON_JAR" export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.opennaru.khan.agent,org.github.jamm,org.jboss.logmanager,org.wildfly.common.net.HostName"
-
getKhanAgentPath, getLogmanagerPath When using function.sh Include (see below)
-
start.sh
export JAVA_OPTS="$AGENT_OPTS $JAVA_OPTS"
-
standalone*.xml
<datasource jndi-name="\{\{ jndi_name }}" pool-name="\{\{ pool_name }}" enabled="true" use-ccm="true" statistics-enabled="true">
JBoss EAP 6.x, 7.x domain mode
When using domain mode, you must set the startup options in the XML file.
-
env.sh
export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.opennaru.khan.agent,org.github.jamm,org.jboss.logmanager" .... export JBOSS_LOGMANAGER_DIR="$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main" export JBOSS_LOGMANAGER_JAR=`cd "$JBOSS_LOGMANAGER_DIR" && ls -1 *.jar` export JAVA_OPTS=" $JAVA_OPTS -DJBOSS_LOGMANAGER=$JBOSS_LOGMANAGER_DIR/$JBOSS_LOGMANAGER_JAR "
-
domain.xml
<System-Properties>.
<!-- IPv4 is not required, but setting it helps prevent unintended use of IPv6 -->
<property name="java.net.preferIPv4Stack" value="true"/>
<property name="java.util.logging.manager" value="org.jboss.logmanager.LogManager" boot-time="true"/> <property name="java.util.logging.manager" value="org.jboss.logmanager.LogManager" boot-time="true"/>
<property name="jboss.modules.system.pkgs" value="org.jboss.byteman,com.opennaru.khan.agent,org.github.jamm,org.jboss.logmanager" boot-time="true"/>
</system-properties>
...
<datasource jndi-name="\{\{ jndi_name }}" pool-name="\{\{ pool_name }}" enabled="true" use-ccm="true" statistics-enabled="true">
...
-
host-slave.xml
<server name="test11" auto-start="true">
<jvm name="default">
<jvm-options>
<option value="-Xbootclasspath/p:$\{JBOSS_LOGMANAGER}"/>
<option value="-javaagent:/svc/test/khan-agent/khan-agent.jar"/>
<option value="-Xloggc:/svc/log/slave/test11/gclog/gc_$\{DATE}.log"/>
<option value="-XX:HeapDumpPath=/svc/log/slave/test11/heapdump"/>
</jvm-options>
</jvm>.
<System-Properties
<property name="jboss.node.name" value="test11"/>
<property name="khan.config.file" value="khan-agent-test11.conf"/>
Wildfly 14 (Java 11)
For Wildfly 14 using Java 11, you will need to set up JBoss LogManager.
Register the com.opennaru.khan.agent and org.jboss.logmanager packages in jboss.modules.system.pkgs. Also, specify the JBoss logging related JAR files using the -Xbootclasspath/a option, and specify the -Dsun.util.logging.disableCallerCheck=true option.
-
env.sh
export AGENT_OPTS=" -javaagent:/svc/test/khan-agent/khan-agent.jar " #export AGENT_OPTS=" -javaagent:$(getKhanAgentPath :/svc/test/khan-agent) " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent-test11.conf" export JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager" export JBOSS_LOGMANAGER_DIR="$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main" export JBOSS_LOGMANAGER_JAR=`cd "$JBOSS_LOGMANAGER_DIR" && ls -1 *.jar` export JBOSS_WILDFLY_COMMON_DIR="$JBOSS_HOME/modules/system/layers/base/org/wildfly/common/main" export JBOSS_WILDFLY_COMMON_JAR=`cd "$JBOSS_WILDFLY_COMMON_DIR" && ls -1 *.jar` export JAVA_OPTS=" -Xbootclasspath/a:$JBOSS_LOGMANAGER_DIR/$JBOSS_LOGMANAGER_JAR:$JBOSS_WILDFLY_COMMON_DIR/$JBOSS_WILDFLY_COMMON_JAR $JAVA_OPTS" export JAVA_OPTS=" $JAVA_OPTS -noverify" export JAVA_OPTS=" -Dsun.util.logging.disableCallerCheck=true $JAVA_OPTS" export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.opennaru.khan.agent,org.github.jamm,org.jboss.logmanager"
-
start.sh
export JAVA_OPTS="$AGENT_OPTS $JAVA_OPTS"
-
STANDALONE*.XML
<datasource jndi-name="\{\{ jndi_name }}" pool-name="\{\{ pool_name }}" enabled="true" use-ccm="true" statistics-enabled="true"> Β
JBoss EAP 5.x
Add the following settings to JAVA_OPTS at startup.
#JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote JAVA_OPTS=%JAVA_OPTS% -Djboss.platform.mbeanserver JAVA_OPTS=%JAVA_OPTS% -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl JAVA_OPTS=" $JAVA_OPTS -javaagent:/svc/test/khan-agent/khan-agent.jar " JAVA_OPTS=" $JAVA_OPTS -Dkhan.config.file=khan-agent-test11.conf" JAVA_OPTS=" $JAVA_OPTS -noverify"
Tomcat
For Tomcat, add the following settings to the catalina.sh file.
-
catalina.sh
export AGENT_OPTS=" -javaagent:/svc/test/khan-agent/khan-agent.jar " # export AGENT_OPTS=" -javaagent:$(getKhanAgentPath :/svc/test/khan-agent) " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent-test11.conf" #export AGENT_OPTS="$AGENT_OPTS -Dcom.sun.management.jmxremote" export JAVA_OPTS="$AGENT_OPTS $JAVA_OPTS -noverify"
-
When using the getKhanAgentPath function, include the function.sh Include (see below).
WebLogic
For WebLogic, add the following settings to the startWebLogic.sh file.
-
startWebLogic.sh
export AGENT_OPTS=" -noverify -javaagent:/svc/test/khan-agent/khan-agent.jar " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent-test11.conf " DOMAIN_HOME="/svc/test/weblogic/wls1211/user_projects/domains/base_domain" JAVA_OPTIONS=" $JAVA_OPTIONS $AGENT_OPTS -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder" export JAVA_OPTIONS
To monitor information about the Data Source in WebLogic, the following settings are required.
Select Domain → Configuration → General → Platform MBean Server Enabled, and select Platform MBean Server Used.


After making the above settings, the following settings will be added to the config.xml.
<jmx <platform-m-bean-server-enabled>true</platform-m-bean-server-enabled> <platform-m-bean-server-used>true</platform-m-bean-server-used> </jmx>
The following options should be added to the startup options
-Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder
JEUS 6
-
JEUSMain.xml
<engine-container>
<name>container1</name>
<id>22</id>
<base-port>22001</base-port>
<command-option>-XX:MaxPermSize=128m -Xms256m -Xmx512m -javaagent:/svc/test/khan-agent/khan-agent.jar -Dkhan.config.file=khan-agent-test11. conf -noverify -Djeus.jmx.usePlatformMBeanServer=true -Djeus.ejb.enable.configDeleteOption=true -Djeus.container.name=example_container1</command-option>
To monitor the data source of JEUS, the number of web sessions, you need to use the -Djeus.jmx.usePlatformMBeanServer=true option.
Also, to monitor the number of web sessions, click "JEUS Manager Resources → Security → SYSTEM_DOMAIN → Policy → 'Create new resource permission'" button in the JEUS Manager console and set it as follows.

jeus 7/8
-
domain.xml
<jvm-config>
<jvm-option>-Xmx1024m -XX:MaxPermSize=128m</jvm-option>
<jvm-option>-javaagent:/svc/test/khan-agent/khan-agent.jar -Dkhan.config.file=khan-agent-test11.conf -noverify -Djeus.jmx.usePlatformMBeanServer=true</jvm-option>
</jvm-config>
To monitor the data source of JEUS and the number of web sessions, you need to use the -Djeus.jmx.usePlatformMBeanServer=true option.
Also, to monitor the number of web sessions, click "Security → Accounts & Policies Management → policies → 'Add' button in the bottom 'Resource Permissions'" in the JEUS admin console and set it as follows.

After setting as above, the below bolded part of jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml file is added.
<resource-permissions>
<context-id>default</context-id>
<resource-permission>
<role>AdministratorsRole</role>
<resource>jeus.*</resource>
<actions>*</actions>
<classname>jeus.security.resource.ResourcePermission</classname>
</resource-permission>
<resource-permission>
<role>jndiUser</role>
<resource>jeus.jndi.*</resource>
<actions>lookup</actions>
<classname>jeus.security.resource.ResourcePermission</classname>
</resource-permission>
<resource-permission>
<resource>jeus.server.*</resource>
<actions>getstats</actions>
<classname>jeus.security.resource.ResourcePermission</classname>
<unchecked/>
</resource-permission>
</resource-permissions>
Jetty 9
-
jetty.sh
export AGENT_OPTS=" -javaagent:/svc/test/khan-agent/khan-agent.jar " export AGENT_OPTS="$AGENT_OPTS -Dkhan.config.file=khan-agent3.conf -noverify" export JAVA_OPTIONS="$AGENT_OPTS $JAVA_OPTIONS"
Resin 4.x
-
conf/resin.properties or resin.xml
jvm_args : -Xmx1024m -XX:MaxPermSize=256m -noverify -javaagent:/svc/test/khan-agent/khan-agent.jar -Dkhan.config.file=khan-agent3.conf
-
conf/cluster-default.xml
<server-default>
<jvm-arg-line>$\{jvm_args}</jvm-arg-line>
<jvm-mode>$\{jvm_mode}</jvm-mode>
Setting up function.sh for agent file versioning
When upgrading the Agent JAR file, it is necessary to ensure that the final version of the file is available the next time WAS is started. The function.sh file is a script to make the final version of the Agent JAR file available.
When configuring javaagent, use the getKhanAgentPath function as shown below.
. ./function.sh export AGENT_OPTS=" -javaagent:$(getKhanAgentPath :/svc/test/khan-agent) "
If you specify the directory of the Agent file in the above way, it loads the last jar file in the current.version text file in that directory.
/svc/test/khan-agent/khan-agent.jar
/svc/test/khan-agent/current.version
-
Contents of the function.sh file.
#!/bin/sh
function getKhanAgentPath() {
local KHAN_AGENT_PATH=$1
for file in $(cat $KHAN_AGENT_PATH/current.version); do
KHAN_AGENT_FILE="$file"
done
echo "$KHAN_AGENT_PATH/$KHAN_AGENT_FILE"
}
function listjars {
FILES=$(ls $1*.jar)
echo ${FILES}
}
function getLogmanagerPath {
JBOSS_HOME=$1
OVERLAYS_PATH="$JBOSS_HOME/modules/system/layers/base"
OVERLAYS_PATH="$JBOSS_HOME/modules/system/layers/base/.overlays"
MODULES_SOURCE_PATHS=("$JBOSS_HOME/modules/system/layers/base" "$JBOSS_HOME")
if [ -f "$OVERLAYS_PATH/.overlays" ]; then
for layer in $(tac $OVERLAYS_PATH/.overlays); do
MODULES_SOURCE_PATHS=("$OVERLAYS_PATH/$layer" $\{MODULES_SOURCE_PATHS[@]})
done
fi
name="org/jboss/logmanager/main/"
for source_dir in "$\{MODULES_SOURCE_PATHS[@]}"; do
if [ -d "$source_dir/$\{name}" ]; then
files="$(listjars $source_dir/$\{name})"
if [ -n "$files" ]; then
echo "$files" | sed -e "s/^[ \t]*//" | sed -e "s| |:|g" | sed -e ":a;N;$!ba;s|\n|:|g"
return
fi
else
files="$(compgen -G "$source_dir/$\{name}*.jar")"
if [ -n "$files" ]; then
echo "$\{files[0]}"
return
fi
fi
done
echo "Could not find any jar for the $name path, aborting"
exit 1
}