Viewer AppDynamics Installation
Sommaire
Votre avis
Nobody voted on this yet
|
|
Déploiement
Le viewer est installé dans le répertoire /var/opt/AppDynamics/viewer
, il faut donc créer ce répertoire.
sudo mkdir /var/opt/AppDynamics/viewer
Le fichier zip LiteViewer.zip
est copié dans ce répertoire et décompressé:
sudo unzip LiteViewer.zip Archive: LiteViewer.zip creating: WEB-INF/ creating: WEB-INF/lib/ creating: data/ creating: logs/ inflating: WEB-INF/lib/controller-api.jar inflating: adlite-viewer.jar inflating: configuration.xml inflating: log4j.xml inflating: readme.txt
Configuration du logger
Avant toute première exécution, l'analyse du fichier log4j.xml permet d'identifier l'emplacement d'écriture de la log. Ce fichier se trouve directement dans le répertoire d'installation.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/liteviewer.log"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<logger name="com.appdynamics">
<level value="info"/>
<appender-ref ref="FileAppender"/>
</logger>
<logger name="com.singularity">
<level value="info"/>
<appender-ref ref="FileAppender"/>
</logger>
<logger name="org">
<level value="error"/>
<appender-ref ref="FileAppender"/>
</logger>
<root>
<priority value="error"/>
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="FileAppender"/>
</root>
</log4j:configuration>
Afin de rester dans les "normes" Linux, l'emplacement de la log est modifié pour pointer sur un répertoire dans /var/log
. Afin d'accéder rapidement à ces logs, celles ci sont isolées dans un sous répertoire AppDynamics/viewer
.
sudo mkdir /var/log/AppDynamics sudo mkdir /var/log/AppDynamics/viewer
Puis l'emplacement de la log est modifié dans le fichier log4j.xml ainsi:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/var/log/AppDynamics/viewer/liteviewer.log"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<logger name="com.appdynamics">
<level value="info"/>
<appender-ref ref="FileAppender"/>
</logger>
<logger name="com.singularity">
<level value="info"/>
<appender-ref ref="FileAppender"/>
</logger>
<logger name="org">
<level value="error"/>
<appender-ref ref="FileAppender"/>
</logger>
<root>
<priority value="error"/>
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="FileAppender"/>
</root>
</log4j:configuration>
Avec cette configuration, les messages apparaissent en double dans le fichier de log.
15:36:16,651 INFO [main] AgentHandlerServlet - ***************************************************************** 15:36:16,651 INFO [main] AgentHandlerServlet - ***************************************************************** 15:36:16,652 INFO [main] AgentHandlerServlet - Starting ....AppDynamics Lite Viewer 0.91 Beta Build Date 2011-02-01 12:11:15 15:36:16,652 INFO [main] AgentHandlerServlet - Starting ....AppDynamics Lite Viewer 0.91 Beta Build Date 2011-02-01 12:11:15 15:36:16,749 INFO [main] FileStore - Configuration File [/var/opt/AppDynamics/viewer/configuration.xml] 15:36:16,749 INFO [main] FileStore - Configuration File [/var/opt/AppDynamics/viewer/configuration.xml] 15:36:17,041 INFO [main] DirectoryResolver - Deleting directory [/var/opt/AppDynamics/viewer/data] 15:36:17,041 INFO [main] DirectoryResolver - Deleting directory [/var/opt/AppDynamics/viewer/data] 15:36:17,044 INFO [main] FileStoreManager - Initialized Data Directory [/var/opt/AppDynamics/viewer/data] 15:36:17,044 INFO [main] FileStoreManager - Initialized Data Directory [/var/opt/AppDynamics/viewer/data] 15:36:17,051 INFO [main] FileStoreManager - Data File /var/opt/AppDynamics/viewer/data/data.ser_1310650577044 created at Thu Jul 14 15:36:17 CEST 2011 15:36:17,051 INFO [main] FileStoreManager - Data File /var/opt/AppDynamics/viewer/data/data.ser_1310650577044 created at Thu Jul 14 15:36:17 CEST 2011
Cela est du à une erreur dans le fichier de configuration de log4j dans lequel les appender sont définis pour chaque les packages mais également dans la balise root
. Pour éviter l'affichage en double, il suffit de commenter la configuration du appender sur les packages.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/var/log/AppDynamics/viewer/liteviewer.log"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1} - %m%n"/>
</layout>
</appender>
<logger name="com.appdynamics">
<level value="info"/>
<!-- <appender-ref ref="FileAppender"/> -->
</logger>
<logger name="com.singularity">
<level value="info"/>
<!-- <appender-ref ref="FileAppender"/> -->
</logger>
<logger name="org">
<level value="error"/>
<!-- <appender-ref ref="FileAppender"/> -->
</logger>
<root>
<priority value="error"/>
<appender-ref ref="ConsoleAppender"/>
<!-- <appender-ref ref="FileAppender"/> -->
</root>
</log4j:configuration>
Configuration Tomcat
Une fois installé, il faut référencer l'agent pour auditer un serveur Tomcat. Ceci s'effectue par modification du script de lancement. Dans la documentation officielle, un test est réalisé sur l'argument d'appel du script catalina.sh
, et la modification est réalisée directement dans celui ci.
Il est préférable d'effectuer les modifications dans le fichier setenv.sh
, au niveau du répertoire /var/lib/tomcat6/bin
dans le cadre de cette installation, comme décrit ici, pour apporter des modifications aux variables d'environnement. Pour une installation sous Ubuntu, l'arrêt du serveur Tomcat ne s'effectue pas par appel du script shutdown.sh
. Donc il est pas nécessaire de tester la valeur de l'argument fourni au script catalina.sh
En conclusion, le script setenv.sh
est modifié pour y ajouter la ligne suivante:
export JAVA_OPTS="$JAVA_OPTS -javaagent:/var/opt/AppDynamics/agent/javaagent.jar"
Si le script shutdown.sh
était appelé pour réaliser l'arrêt de Tomcat, il faudrait avoir accès à l'argument de lancement depuis le fichier setenv.sh
. La première modification concernerait alors le script catalina.sh
en changeant les lignes:
if [ -r "$CATALINA_BASE"/bin/setenv.sh ]; then
. "$CATALINA_BASE"/bin/setenv.sh
elif [ -r "$CATALINA_HOME"/bin/setenv.sh ]; then
. "$CATALINA_HOME"/bin/setenv.sh
fi
Par
if [ -r "$CATALINA_BASE"/bin/setenv.sh ]; then
. "$CATALINA_BASE"/bin/setenv.sh $1
elif [ -r "$CATALINA_HOME"/bin/setenv.sh ]; then
. "$CATALINA_HOME"/bin/setenv.sh $1
fi
La modification dans le script setenv.sh
serait alors plus proche de celle décrite dans la documentation officielle:
if ["$1" = "start" -o "$1" = "run"]; then
export JAVA_OPTS="$JAVA_OPTS -javaagent:agent_install_dir/javaagent.jar"
fi
Première exécution
Lors de la première exécution, une erreur est remontée dans la sortie de Tomcat, fichier /var/log/tomcat/catalina.out
.
Agent Logging Directory [/var/opt/AppDynamics/agent/logs/etienne-server]
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.NullPointerException
at com.singularity.util.org.apache.log4j.NewFileOnJVMStartupRollingFileAppender.rollOverInit(NewFileOnJVMStartupRollingFileAppender.java:104)
at com.singularity.util.org.apache.log4j.NewFileOnJVMStartupRollingFileAppender.activateOptions(NewFileOnJVMStartupRollingFileAppender.java:66)
at com.singularity.util.org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:367)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:302)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:165)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:179)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:558)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:457)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1046)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:898)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:774)
at com.singularity.util.org.apache.log4j.xml.XMLWatchdog.doOnChange(DOMConfigurator.java:1181)
at com.singularity.util.org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:89)
at com.singularity.util.org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:58)
at com.singularity.util.org.apache.log4j.xml.XMLWatchdog.<init>(DOMConfigurator.java:1172)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:749)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:732)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.b(JavaAgent.java:264)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.initialize(JavaAgent.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.singularity.ee.agent.appagent.AgentEntryPoint.premain(AgentEntryPoint.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
log4j:ERROR Could not parse file [/var/opt/AppDynamics/agent/conf/logging/log4j.xml].
java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:166)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:179)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:558)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:457)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1046)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:898)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:774)
at com.singularity.util.org.apache.log4j.xml.XMLWatchdog.doOnChange(DOMConfigurator.java:1181)
at com.singularity.util.org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:89)
at com.singularity.util.org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:58)
at com.singularity.util.org.apache.log4j.xml.XMLWatchdog.<init>(DOMConfigurator.java:1172)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:749)
at com.singularity.util.org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:732)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.b(JavaAgent.java:264)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.initialize(JavaAgent.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.singularity.ee.agent.appagent.AgentEntryPoint.premain(AgentEntryPoint.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
Could not start Java Agent,java.lang.RuntimeException: File [/var/opt/AppDynamics/agent/logs/etienne-server] does not exist ,Please check log files
java.lang.RuntimeException: File [/var/opt/AppDynamics/agent/logs/etienne-server] does not exist
at com.singularity.ee.util.n.a(n.java:605)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.b(JavaAgent.java:267)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.initialize(JavaAgent.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.singularity.ee.agent.appagent.AgentEntryPoint.premain(AgentEntryPoint.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
[ERROR]: JavAgent - Could Not Start Java AgentException java.lang.RuntimeException: File [/var/opt/AppDynamics/agent/logs/etienne-server] does not exist
java.lang.RuntimeException: File [/var/opt/AppDynamics/agent/logs/etienne-server] does not exist
at com.singularity.ee.util.n.a(n.java:605)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.b(JavaAgent.java:267)
at com.singularity.ee.agent.appagent.kernel.JavaAgent.initialize(JavaAgent.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.singularity.ee.agent.appagent.AgentEntryPoint.premain(AgentEntryPoint.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
Le message est suffisamment explicite, il faut créer le répertoire de log pour le serveur audité. Dans l'exemple ci dessus, l'agent est installé sur le serveur etienne-server
, d'où l'emplacement /var/opt/AppDynamics/agent/logs/etienne-server
.
sudo mkdir /var/opt/AppDynamics/agent/logs/etienne-server
Lors de l'exécution, un fichier ByteCodeTransformer.YYYY_MM_DD__HH_MI_SS.X.log
est créé dans ce nouveau répertoire. Cependant, comme pour les logs, il est préférable que celui ci soit déposer dans l'arborescence /var/log
, pour un environnement Linux.
Ceci est réalisable en ne créant pas physiquement le répertoire, mais en effectuant un lien symbolique. Dans le cadre de cet article, le lien etienne-server
va pointer sur l'emplacement /var/log/AppDynamics/agent
. Les propriétaires du lien sont également modifiés pour être conforme à la sécurité mise en place à la page suivante.
sudo ln -s /var/log/AppDynamics/agent /var/opt/AppDynamics/agent/logs/etienne-server sudo chown -h tomcat6:USER /var/opt/AppDynamics/agent/logs/etienne-server
Voir aussi
Documentation officielle: http://litedocs.appdynamics.com/tomcat.htm