高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

pinpoint 监控wildfly

目录
  1. 1. wildfly必须10.0版本以上
    1. 1.1. 为何不支持wildfly10.0以下版本
  2. 2. pinpoint安装部署
    1. 2.1. pinpoint agent安装部署
      1. 2.1.1. wildfly数据源配置

苦苦等待一年的时间,pinpoint-1.8.1-RC1 版本终于支持了对wildfly的监控。


wildfly必须10.0版本以上

由于公司目前在使用wildfly8.0版本,需要升级至10.0以上才可以,最好直接升级到14.0以上。

为何不支持wildfly10.0以下版本

wildfly10.0以下版本启动会报错:

1
2
3
4
5
6
7
8
[INFO ](ectorsExecuteRootHandlerInterceptor) Failed to servlet request event handle.java.lang.NoSuchMethodError: io.undertow.server.HttpServerExchange.getStatusCode()I
at com.navercorp.pinpoint.plugin.undertow.interceptor.ConnectorsExecuteRootHandlerInterceptor.getStatusCode(ConnectorsExecuteRootHandlerInterceptor.java:104)
at com.navercorp.pinpoint.plugin.undertow.interceptor.ConnectorsExecuteRootHandlerInterceptor.after(ConnectorsExecuteRootHandlerInterceptor.java:92)
at com.navercorp.pinpoint.bootstrap.interceptor.ExceptionHandleAroundInterceptor.after(ExceptionHandleAroundInterceptor.java:49)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:203)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

报错原因为io.undertow.server.HttpServerExchange类中没有实现getStatusCode()的方法(https://github.com/undertow-io/undertow/blob/1.0.x/core/src/main/java/io/undertow/server/HttpServerExchange.java)。

io.undertow.server.HttpServerExchange类为undertow服务器源码,对应的jar包放在wildfly下的modules/system/layers/base/io/undertow/core/main目录中。

wildfly8+ 对应 undertow-core-1.0.15.Final.jar
wildfly10+ 对应 undertow-core-1.3.15.Final.jar

io.undertow.server.HttpServerExchange.getStatusCode()方法的实现在undertow-core-1.3.X版本中才加入进来(https://github.com/undertow-io/undertow/branches)。


pinpoint安装部署

1.8.1-RC1版本下载地址:
https://github.com/naver/pinpoint/releases/tag/1.8.1-RC1

pinpoint的安装部署分为三块。

  1. Hbase
  2. pinpoint-collector和pinpoint-web
  3. pinpoint agent

其中1,2两点参照之前的文章即可(APM pinpoint 部署

pinpoint agent的部署跟主流的tomcat、resin服务器有一些区别。

pinpoint agent安装部署

步骤一、 将下载好的pinpoint-agent-1.8.1-RC1.zip包放至机器上,unzip pinpoint-agent-1.8.1-RC1.zip解压出来。

步骤二、修改pinpoint.config, 将profiler.collector.ip=192.168.1.27, 改成collector服务器地址

步骤三、在wildfly服务器 /bin/ 目录下,修改standalone.conf文件,加入以下配置:

1
2
3
4
5
6
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.navercorp.pinpoint.bootstrap,com.navercorp.pinpoint.common,com.navercorp.pinpoint.exception"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/opt/pinpoint/wildfly-10.0.0.Final/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.3.Final.jar"
JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/pinpoint/pinpoint-bootstrap-1.8.1-RC1.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=sffs-test"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=sffs-90"

注意修改成自己的配置。

步骤四、 继续修改standalone.conf文件,加入-Djava.security.auth.login.config=配置。

加入-Djava.security.auth.login.config=后的配置如下:

1
2
3
4
5
6
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -Xloggc:$JBOSS_HOME/standalone/log/verbose.gc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$JBOSS_HOME/standalone/log/ -Djava.security.auth.login.config="
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
else
echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

这里如果不加上以上配置,会报错:

1
2
3
4
5
6
7
8
9
10
Caused by: java.lang.IllegalArgumentException: File jar:file:/opt/pinpoint/wildfly-10.0.0.Final/modules/system/layers/base/org/picketbox/main/picketbox-4.9.4.Final.jar!/auth.confcannot be read.
at com.suning.framework.zookeeper.ZkClient.isZkSaslEnabled(ZkClient.java:840)
at com.suning.framework.zookeeper.ZkClient.<init>(ZkClient.java:108)
at com.suning.framework.zookeeper.ZkClient.<init>(ZkClient.java:77)
at com.suning.framework.scm.client.SCMClientImpl.<init>(SCMClientImpl.java:55)
at com.suning.framework.scm.client.SCMClientFactory.getSCMClient(SCMClientFactory.java:30)
at com.suning.rsf.consumer.ConsumerContextImpl.<init>(ConsumerContextImpl.java:92)
at com.suning.rsf.consumer.ConsumerContextFactory.getConsumerContext(ConsumerContextFactory.java:29)
at com.suning.rsf.consumer.ServiceLocator.<clinit>(ServiceLocator.java:10)
... 31 more

步骤五、 修改/standalone/configuration/standalone.xml文件中的 jboss.bind.address:127.0.0.1替换成jboss.bind.address:0.0.0.0,目的是放开外部访问权限。

1
2
3
<interface name="public">
<inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>

wildfly数据源配置

项目中集成了mysql和db2的数据源,wildfly中需要加载相关的module。

步骤一:com文件夹拷贝到modules目录下。(com文件夹里面包括db2、mysql、oracle、postgresql、sybase的驱动和module.xml配置)

步骤二:在/standalone/configuration/standalone.xml文件中添加datasource和driver。

先将

1
<subsystem xmlns="urn:jboss:domain:datasources:4.0"> 修改成 <subsystem xmlns="urn:jboss:domain:datasources:2.0">

把4.0改成2.0,不改的话我这边wildfly启动会一直报错。

以DB2为例,添加datasource:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<datasource jta="false" jndi-name="java:jboss/Fares2DS" pool-name="Fares2DS" enabled="true" use-ccm="false">
<connection-url>jdbc:db2://10.244.201.206:60006/FAREDB2:currentSchema=FAREUSR;</connection-url>
<driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
<driver>com.db2</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>fareusr</user-name>
<password>GFaUNhRgRIdC</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>

添加driver:

1
2
3
<driver name="com.db2" module="com.db2">
<driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
</driver>

附上其他driver配置:

1
2
3
4
5
6
7
8
9
<driver name="com.mysql" module="com.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>
<driver name="oracle" module="com.oracle">
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>
<driver name="sybase" module="com.sybase">
<driver-class>com.sybase.jdbc4.jdbc.SybDataSource</driver-class>
</driver>

以上配置完成,启动wildfly服务器即可。

启动后,做一些请求测试,相关APM监控已生效。
Alt text

Alt text