nlighten / tomcat_exporter Goto Github PK
View Code? Open in Web Editor NEWA Prometheus exporter for Apache Tomcat
License: Apache License 2.0
A Prometheus exporter for Apache Tomcat
License: Apache License 2.0
I want use this for container platform.
My tomcat running in docker environment.
Can you guide me how I can use this without rebuilding tomcat application (docker)
May be I can run this as a separate container and collect metrics from tomcat application (docker).
If the metrics.war deployed first the TomcatJdbcPoolExports will be disabled ?
Getting the ClassCastException exception when added the resource in the context.xml
Caused by: java.lang.ClassCastException: class nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor cannot be cast to class org.apache.tomcat.jdbc.pool.JdbcInterceptor
[2020-11-12 02:02:17,227] Artifact iis:war exploded: Artifact is being deployed, please wait...
12-Nov-2020 14:02:26.881 INFO [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/Users/kalpesh/javawork/trunk/iis/ims_tomcat/webapps/manager]
12-Nov-2020 14:02:31.929 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.tomcat.jdbc.pool.ConnectionPool.init Unable to inform interceptor of pool start.
java.lang.ClassCastException: class nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor cannot be cast to class org.apache.tomcat.jdbc.pool.JdbcInterceptor (nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor is in unnamed module of loader java.net.URLClassLoader @6572421; org.apache.tomcat.jdbc.pool.JdbcInterceptor is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @2ff5353f)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:466)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:560)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:244)
at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:96)
at java.naming/javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:330)
at org.apache.naming.NamingContext.lookup(NamingContext.java:857)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:174)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1017)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:557)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:253)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5044)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:456)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:405)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
12-Nov-2020 14:02:31.934 WARNING [RMI TCP Connection(2)-127.0.0.1] org.apache.naming.NamingContext.lookup Unexpected exception resolving reference
java.sql.SQLException
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:473)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:560)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:244)
at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:96)
at java.naming/javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:330)
at org.apache.naming.NamingContext.lookup(NamingContext.java:857)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:174)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1017)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:557)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:253)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5044)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:456)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:405)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)
at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassCastException: class nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor cannot be cast to class org.apache.tomcat.jdbc.pool.JdbcInterceptor (nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor is in unnamed module of loader java.net.URLClassLoader @6572421; org.apache.tomcat.jdbc.pool.JdbcInterceptor is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @2ff5353f)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:466)
... 60 more
Upgrading Tomcat exporter and associated libraries, we got an exceptions :
SEVERE [main] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/usr/local/tomcat/webapps/metrics.war]
[...]
Caused by: java.lang.ClassNotFoundException: io.prometheus.client.servlet.common.exporter.ServletConfigurationException
The issue is made by incompatibilities between newer Prometheus libs versions and older Tomcat versions.
💡 This could be a good idea to put that information in README.md file. 💡
Following combinations have been tested:
Dockerfile used for tests :
FROM tomcat:9.0-jdk17-openjdk-slim
ENV TOMCAT_SIMPLECLIENT_VERSION=0.12.0
ENV TOMCAT_EXPORTER_VERSION=0.0.15
ADD ["https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient-${TOMCAT_SIMPLECLIENT_VERSION}.jar", \
"/usr/local/tomcat/lib/simpleclient-${TOMCAT_SIMPLECLIENT_VERSION}.jar"]
ADD ["https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_common/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar", \
"/usr/local/tomcat/lib/simpleclient_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar"]
ADD ["https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_hotspot/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_hotspot-${TOMCAT_SIMPLECLIENT_VERSION}.jar", \
"/usr/local/tomcat/lib/simpleclient_hotspot-${TOMCAT_SIMPLECLIENT_VERSION}.jar"]
ADD ["https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_servlet/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_servlet-${TOMCAT_SIMPLECLIENT_VERSION}.jar", \
"/usr/local/tomcat/lib/simpleclient_servlet-${TOMCAT_SIMPLECLIENT_VERSION}.jar"]
ADD ["https://search.maven.org/remotecontent?filepath=nl/nlighten/tomcat_exporter_client/${TOMCAT_EXPORTER_VERSION}/tomcat_exporter_client-${TOMCAT_EXPORTER_VERSION}.jar", \
"/usr/local/tomcat/lib/tomcat_exporter_client-${TOMCAT_EXPORTER_VERSION}.jar"]
ADD ["https://search.maven.org/remotecontent?filepath=nl/nlighten/tomcat_exporter_servlet/${TOMCAT_EXPORTER_VERSION}/tomcat_exporter_servlet-${TOMCAT_EXPORTER_VERSION}.war", \
"/usr/local/tomcat/webapps/metrics.war"]
docker build -t mytesttomcatexporter . && docker run -it -p 8080:8080 mytesttomcatexporter
👏 Thank you @hervenicol for the join investigation 👏
Caused by: java.lang.ClassNotFoundException: io.prometheus.cloudwatch.WebServer
[INFO] --- maven-install-plugin:2.4:install (default-install) @ cloudwatch_exporter ---
[INFO] Installing C:\Users\Public\Cloudwatch jar\target\cloudwatch_exporter-0.10.0.jar to C:\Users\David.Carpenter.m2\repository\io\prometheus\cloudwatch\cloudwatch_exporter\0.10.0\cloudwatch_exporter-0.10.0.jar
[INFO] Installing C:\Users\Public\Cloudwatch jar\pom.xml to C:\Users\David.Carpenter.m2\repository\io\prometheus\cloudwatch\cloudwatch_exporter\0.10.0\cloudwatch_exporter-0.10.0.pom
[INFO] Installing C:\Users\Public\Cloudwatch jar\target\cloudwatch_exporter-0.10.0-jar-with-dependencies.jar to C:\Users\David.Carpenter.m2\repository\io\prometheus\cloudwatch\cloudwatch_exporter\0.10.0\cloudwatch_exporter-0.10.0-jar-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.644 s
[INFO] Finished at: 2021-04-07T16:38:39+01:00
[INFO] ------------------------------------------------------------------------
C:\Users\Public\Cloudwatch jar>java -jar target/cloudwatch_exporter-0.10.0-jar-with-dependencies.jar 9106 example.yml
Error: Could not find or load main class io.prometheus.cloudwatch.WebServer
Caused by: java.lang.ClassNotFoundException: io.prometheus.cloudwatch.WebServer
Im a real newby on this and cant figure what im doing wrong...
Hi Richard,
I got the error below, can you help me?
The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet nl.nlighten.prometheus.tomcat.TomcatMetricsServlet threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
root cause
java.lang.NoClassDefFoundError: nl/nlighten/prometheus/tomcat/TomcatGenericExports
nl.nlighten.prometheus.tomcat.TomcatMetricsServlet.init(TomcatMetricsServlet.java:17)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
root cause
java.lang.ClassNotFoundException: nl.nlighten.prometheus.tomcat.TomcatGenericExports
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
nl.nlighten.prometheus.tomcat.TomcatMetricsServlet.init(TomcatMetricsServlet.java:17)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
Can you please add comments or explanation regd the Dimensions of the Metrics which are bit confusing to understand for people new to prometheus
servlet_request_seconds_bucket{"/foo", "GET", "+Inf",} 1.0 <<- what does '+Inf' and especially 1.0 relates to...
Hi,
I have problems on Tomcat version 6.
When I insert your suggest filter tag in [ web.xml ] on Tomcat server and restart service, my tomcat server is unavailable to access. but in newer version such as 7 , 8 it work.!!
how can I do for this case?
thank you.
doing the following causes mvn package
to create a .war that's probably excessive (API jars should be dropped) but is drop-in ready without any other .jars. is this the purpose of the message "all metrics are registered using the same class loader"?
Perhaps an alternate approach is to create an uber-jar with all the deps (and no .war) and add the servlet via the top level web.xml
using <servlet-class>…
diff --git a/exporter/pom.xml b/exporter/pom.xml
index 0d21acd..31451b9 100644
--- a/exporter/pom.xml
+++ b/exporter/pom.xml
@@ -27,19 +27,31 @@
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>${io.prometheus.simpleclient.version}</version>
- <scope>provided</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>${io.prometheus.simpleclient.version}</version>
- <scope>provided</scope>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.prometheus</groupId>
+ <artifactId>simpleclient_servlet</artifactId>
+ <version>${io.prometheus.simpleclient.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.prometheus</groupId>
+ <artifactId>simpleclient_hotspot</artifactId>
+ <version>${io.prometheus.simpleclient.version}</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
<groupId>nl.nlighten</groupId>
<artifactId>tomcat_exporter_client</artifactId>
<version>0.0.9</version>
- <scope>provided</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
I deployed the Prometheus JMX Exporter and it has a delay option. Our applications generally spike on deployment and this option may be useful for filtering out those initial metrics. Does this tomcat exporter provide a similar option, or something that could be added? Thanks
Latest prometheus client library (0.12.0) throws exception trying to register the same gauge more than once. Need to move the registration code outside of the loop.
I guess the readme needs to be adopted.
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_servlet_common</artifactId>
<version>0.12.0</version>
<type>bundle</type>
</dependency>
Is this project still maintained?
I'm halfway through implementing my own and found this while looking into how to get the thread pool metrics from Tomcat.
I'm thinking of continuing with my own implementation using the Prometheus java client 1.x as well as some other features. Not really interested in the DB pools since HikariCP is superior and has it's own Prometheus exporter.
Hello,
I would like to know if you would be open to a contribution to add features from the https://github.com/prometheus/jmx_exporter into the actual exporter ?
What I have in mind:
Cheers,
Fabien
Hello ,
I configured the exporter in my centos 7 , i am able to see details from my browser.
But when i am adding below configuration in promethues, I am getting content deadline exceed error.
I tried to search on internet but didn't come with why i am getting this error, once surprise thing i found that in prometheus its's trying to get connect with https://myip:8080/metrics , while it should need to connect with http. I am attaching the screenshot of error and my configuration, please help me for get rid our from this.
My Prom Configuration :
scrape_configs:
job_name: support_ticket
static_configs:
job_name: java_monitoring
static_configs:
Downloaded jar files of the latest version, moved them to my /opt/tomcat/lib/ folder. Downloaded tomcat_exporter_servlet.war, renamed it to metrics.war, added it to webapps folder that has another application of mine running. http://host:8080/metrics returns 404. Checked my logs and there is nothing significant unlike the 404. How can i resolve this?!!
Hello,
Using the exporter with tomcat 8.5.33 I get the exception:
javax.management.AttributeNotFoundException: No such attribute: MaxActive
When I look at the docs of the jdbc connectionpool it looks like the MaxActive attribute should still be there.
Hi I am integrating Tomcat Exporter on one of my servers. I currently see such an error message.
Log message catalina:
22-Jun-2022 19:53:09.780 WARNING [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '600' did not find a matching property.
22-Jun-2022 19:53:09.783 WARNING [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '600' did not find a matching property.
22-Jun-2022 19:53:09.784 WARNING [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxProcessors' to '600' did not find a matching property.
22-Jun-2022 19:53:09.796 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host} Setting property 'xmlValidation' to 'false' did not find a matching property.
22-Jun-2022 19:53:09.796 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host} Setting property 'xmlNamespaceAware' to 'false' did not find a matching property.
22-Jun-2022 19:53:09.821 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'allowLinking' to 'true' did not find a matching property.
22-Jun-2022 19:53:09.829 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'allowLinking' to 'true' did not find a matching property.
22-Jun-2022 19:53:09.830 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'allowLinking' to 'true' did not find a matching property.
22-Jun-2022 19:53:09.840 WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Server/Service/Engine/Host/Valve} Setting property 'resolveHosts' to 'false' did not find a matching property.
22-Jun-2022 19:53:09.879 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
22-Jun-2022 19:53:09.889 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
22-Jun-2022 19:53:09.892 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8081"]
22-Jun-2022 19:53:09.892 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
22-Jun-2022 19:53:09.893 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8082"]
22-Jun-2022 19:53:09.893 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
22-Jun-2022 19:53:09.893 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 359 ms
22-Jun-2022 19:53:09.904 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
22-Jun-2022 19:53:09.904 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.15
22-Jun-2022 19:53:15.208 INFO [localhost-startStop-3] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
22-Jun-2022 19:53:15.224 INFO [localhost-startStop-2] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
22-Jun-2022 19:53:15.636 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
22-Jun-2022 19:53:16.473 INFO [localhost-startStop-4] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
22-Jun-2022 19:53:30.460 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Jun-2022 19:53:30.474 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8081"]
22-Jun-2022 19:53:30.478 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8082"]
22-Jun-2022 19:53:30.482 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 20588 ms
lib
ls -la
total 7828
drwxrwxr-x 2 release wibapp 4096 Jun 22 19:29 .
drwxrwxr-x 9 release wibapp 4096 Jun 22 15:10 ..
-rwxrwxr-x 1 release wibapp 18109 May 5 2017 annotations-api.jar
-rwxrwxr-x 1 release wibapp 53135 May 5 2017 catalina-ant.jar
-rwxrwxr-x 1 release wibapp 118638 May 5 2017 catalina-ha.jar
-rwxrwxr-x 1 release wibapp 1606304 May 5 2017 catalina.jar
-rwxrwxr-x 1 release wibapp 74734 May 5 2017 catalina-storeconfig.jar
-rwxrwxr-x 1 release wibapp 269231 May 5 2017 catalina-tribes.jar
-rwxrwxr-x 1 release wibapp 2450404 May 5 2017 ecj-4.6.3.jar
-rwxrwxr-x 1 release wibapp 81439 May 5 2017 el-api.jar
-rwxrwxr-x 1 release wibapp 163118 May 5 2017 jasper-el.jar
-rwxrwxr-x 1 release wibapp 588785 May 5 2017 jasper.jar
-rwxrwxr-x 1 release wibapp 26871 May 5 2017 jaspic-api.jar
-rwxrwxr-x 1 release wibapp 61653 May 5 2017 jsp-api.jar
-rwxrwxr-x 1 release wibapp 244064 May 5 2017 servlet-api.jar
-rwxr-xr-x 1 root root 88558 Aug 29 2021 simpleclient-0.12.0.jar
-rwxr-xr-x 1 root root 8007 Aug 29 2021 simpleclient_common-0.12.0.jar
-rwxr-xr-x 1 root root 24093 Aug 29 2021 simpleclient_hotspot-0.12.0.jar
-rwxr-xr-x 1 root root 87904 Aug 29 2021 simpleclient_servlet-0.12.0.jar
-rwxr-xr-x 1 root root 12940 Aug 29 2021 simpleclient_servlet_common-0.12.0.jar
-rwxrwxr-x 1 release wibapp 10557 May 5 2017 tomcat-api.jar
-rwxrwxr-x 1 release wibapp 777109 May 5 2017 tomcat-coyote.jar
-rwxrwxr-x 1 release wibapp 251070 May 5 2017 tomcat-dbcp.jar
-rwxr-xr-x 1 root root 19586 Oct 31 2021 tomcat_exporter_client-0.0.15.jar
-rwxrwxr-x 1 release wibapp 66795 May 5 2017 tomcat-i18n-es.jar
-rwxrwxr-x 1 release wibapp 40719 May 5 2017 tomcat-i18n-fr.jar
-rwxrwxr-x 1 release wibapp 42072 May 5 2017 tomcat-i18n-ja.jar
-rwxrwxr-x 1 release wibapp 144317 May 5 2017 tomcat-jdbc.jar
-rwxrwxr-x 1 release wibapp 33871 May 5 2017 tomcat-jni.jar
-rwxrwxr-x 1 release wibapp 134645 May 5 2017 tomcat-util.jar
-rwxrwxr-x 1 release wibapp 203782 May 5 2017 tomcat-util-scan.jar
-rwxrwxr-x 1 release wibapp 209736 May 5 2017 tomcat-websocket.jar
-rwxrwxr-x 1 release wibapp 36905 May 5 2017 websocket-api.jar
curl
curl http://localhost:8080/metrics/
<!doctype html><title>HTTP Status [404] – [Not Found]</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style>
I am not certainly sure how to resolve this issue... do you have any advices..? It seems like catalina starts up but I do not see any metrics....
Here is the sample -
# HELP tomcat_jdbc_query_seconds JDBC query duration
# TYPE tomcat_jdbc_query_seconds histogram
tomcat_jdbc_query_seconds_bucket{status="error",le="0.01",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="0.02",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="0.05",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="0.1",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="0.5",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="1.0",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="5.0",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="10.0",} 4.0
tomcat_jdbc_query_seconds_bucket{status="error",le="+Inf",} 4.0
tomcat_jdbc_query_seconds_count{status="error",} 4.0
tomcat_jdbc_query_seconds_sum{status="error",} 0.0
tomcat_jdbc_query_seconds_bucket{status="success",le="0.01",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="0.02",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="0.05",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="0.1",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="0.5",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="1.0",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="5.0",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="10.0",} 8342.0
tomcat_jdbc_query_seconds_bucket{status="success",le="+Inf",} 8342.0
tomcat_jdbc_query_seconds_count{status="success",} 8342.0
tomcat_jdbc_query_seconds_sum{status="success",} 0.0
Sample config
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor(logFailed=true,logSlow=true,threshold=1000,buckets=.01|.02|0.05|.1|.5|1|5|10,slowQueryBuckets=1|2.5|5|10|30)"
If I want to restart the /metrics application (not tomcat, just the application), the application fails to start and I see the following exception:
java.lang.IllegalArgumentException: Collector already registered that provides name: tomcat_session_active_total
io.prometheus.client.CollectorRegistry.register(CollectorRegistry.java:54)
io.prometheus.client.Collector.register(Collector.java:139)
io.prometheus.client.Collector.register(Collector.java:132)
nl.nlighten.prometheus.tomcat.TomcatMetricsServlet.init(TomcatMetricsServlet.java:17)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1463)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
Maybe TomcatMetricsServlet could have it's own CollectorRegistry?
Can help with a PR if needed.
Hi Guys,
Someone can tell me the avaiable dashboard for this exporter?
Tks so much.
Hi Richard,
I am getting the below error in tomcat logs while accessing metrics path.
I added all the dependencies in lib folder, still getting the error.
tomcat_exporter doesn't work
Can't understand why?
We use:
Apache Tomcat/8.5.57
java version "1.8.0_261"
files below added to Tomcat8.5\lib
simpleclient_servlet-0.12.0.jar
simpleclient_hotspot-0.12.0.jar
simpleclient_common-0.12.0.jar
simpleclient-0.12.0.jar
tomcat_exporter_client-0.0.14.jar -> renamed to metrics.jar
from log where 'metrics':
23-Sep-2021 10:31:37.785 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [C:\BMC\Tomcat8.5\webapps\metrics.war]
23-Sep-2021 10:31:37.832 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/metrics]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:970)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1840)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: io/prometheus/client/servlet/common/exporter/ServletConfigurationException
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Unknown Source)
at java.lang.Class.getDeclaredFields(Unknown Source)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:110)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:137)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:328)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:782)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5053)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 10 more
Caused by: java.lang.ClassNotFoundException: io.prometheus.client.servlet.common.exporter.ServletConfigurationException
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 23 more
23-Sep-2021 10:31:37.832 SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [C:\BMC\Tomcat8.5\webapps\metrics.war]
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/metrics]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:747)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:970)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1840)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Hi, by analyzing tomcat_exporter-master\client\pom.xml, I found a series of dependency conflicts between the libraries transitively introduced by org.apache.tomcat.embed:tomcat-embed-core:8.5.11 and org.apache.tomcat:tomcat-catalina:8.5.24. As the JVM only load the classes present first on the classpath and shadow the other duplicate ones with the same names. The dependency conflict problem brings high risks of "NoSuchMethodException" or "NoSuchMethodError" issues at runtime. The conflicting details are listed below. Maybe the solution is that upgrading org.apache.tomcat.embed:tomcat-embed-core from 8.5.11 to 8.5.24. Please notice that. Thanks!
===============projectPath->nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT@D:\ws\release2\tomcat_exporter-master\client\pom.xml
1. Risk for jar-pair:org.apache.tomcat:tomcat-util-scan:8.5.24:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:
a) Methods that only exist in org.apache.tomcat:tomcat-util-scan:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile->org.apache.tomcat:tomcat-util-scan:8.5.24::compile]
<org.apache.tomcat.util.descriptor.web.XmlEncodingBase: void setCharset(java.nio.charset.Charset)>
<org.apache.tomcat.util.descriptor.web.XmlEncodingBase: void ()>
<org.apache.tomcat.util.descriptor.web.XmlEncodingBase: java.nio.charset.Charset getCharset()>
<org.apache.tomcat.util.digester.Digester: void replaceSystemProperties()>
<org.apache.tomcat.util.digester.Digester: void setPropertySource(org.apache.tomcat.util.IntrospectionUtils$PropertySource)>
<org.apache.tomcat.util.scan.AbstractInputStreamJar: void populateMrMap()>
<org.apache.tomcat.util.scan.StandardJarScanner: void doScanClassPath(org.apache.tomcat.JarScanType,javax.servlet.ServletContext,org.apache.tomcat.JarScannerCallback,java.util.Set)>
<org.apache.tomcat.util.scan.StandardJarScanner: void processURLs(org.apache.tomcat.JarScanType,org.apache.tomcat.JarScannerCallback,java.util.Set,boolean,java.util.Deque)>
<org.apache.tomcat.util.scan.StandardJarScanner: void addClassPath(java.util.Deque)>
b) Methods that only exist in org.apache.tomcat.embed:tomcat-embed-core:8.5.11:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat.embed:tomcat-embed-core:8.5.11::test]
<org.apache.tomcat.util.descriptor.web.SecurityCollection: void setEncoding(java.lang.String)>
<org.apache.tomcat.util.descriptor.web.SecurityCollection: java.lang.String getEncoding()>
<org.apache.tomcat.util.descriptor.web.WebXml: java.lang.String escapeXml(java.lang.String)>
2. Risk for jar-pair:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:org.apache.tomcat:tomcat-catalina:8.5.24:
a) Methods that only exist in org.apache.tomcat.embed:tomcat-embed-core:8.5.11:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat.embed:tomcat-embed-core:8.5.11::test]
<org.apache.catalina.authenticator.BasicAuthenticator$BasicCredentials: void (org.apache.tomcat.util.buf.ByteChunk)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: java.util.Map access$400(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: void addListener(javax.security.auth.message.config.RegistrationListener)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: void access$000(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl,javax.security.auth.message.config.RegistrationListener)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: boolean access$300(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl,javax.security.auth.message.config.RegistrationListener)>
<org.apache.catalina.connector.InputBuffer: void setConverter()>
<org.apache.catalina.connector.OutputBuffer: void setConverter()>
<org.apache.catalina.connector.Request: boolean isPushSupported()>
<org.apache.catalina.connector.Request: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.connector.Request: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.connector.Request: boolean isSSLAttribute(java.lang.String)>
<org.apache.catalina.connector.RequestFacade: boolean isPushSupported()>
<org.apache.catalina.connector.RequestFacade: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.connector.RequestFacade: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.core.ApplicationContext: javax.servlet.ServletRegistration$Dynamic addServlet(java.lang.String,java.lang.String,javax.servlet.Servlet)>
<org.apache.catalina.core.ApplicationDispatcher: void (org.apache.catalina.Wrapper,java.lang.String,java.lang.String,java.lang.String,java.lang.String,org.apache.catalina.servlet4preview.http.Mapping,java.lang.String)>
<org.apache.catalina.core.ApplicationHttpRequest: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.core.ApplicationHttpRequest: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.core.ApplicationHttpRequest: void setMapping(org.apache.catalina.servlet4preview.http.Mapping)>
<org.apache.catalina.core.ApplicationMapping: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.core.ApplicationPushBuilder: java.lang.String getLastModified()>
<org.apache.catalina.core.ApplicationPushBuilder: boolean push()>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder lastModified(java.lang.String)>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.core.ApplicationPushBuilder lastModified(java.lang.String)>
<org.apache.catalina.core.ApplicationPushBuilder: void (javax.servlet.http.HttpServletRequest)>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder etag(java.lang.String)>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.core.ApplicationPushBuilder conditional(boolean)>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder conditional(boolean)>
<org.apache.catalina.core.ApplicationPushBuilder: java.lang.String decode(java.lang.String,java.lang.String)>
<org.apache.catalina.core.ApplicationPushBuilder: boolean isConditional()>
<org.apache.catalina.core.ApplicationPushBuilder: org.apache.catalina.core.ApplicationPushBuilder etag(java.lang.String)>
<org.apache.catalina.core.ApplicationPushBuilder: java.lang.String getEtag()>
<org.apache.catalina.filters.RemoteIpFilter$XForwardedRequest: org.apache.catalina.core.ApplicationPushBuilder getPushBuilder()>
<org.apache.catalina.manager.HTMLManagerServlet: void ()>
<org.apache.catalina.servlet4preview.http.HttpServletRequest: boolean isPushSupported()>
<org.apache.catalina.servlet4preview.http.HttpServletRequest: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.servlet4preview.http.HttpServletRequest: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper: org.apache.catalina.servlet4preview.http.Mapping getMapping()>
<org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper: boolean isPushSupported()>
<org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.servlet4preview.http.PushBuilder: boolean isConditional()>
<org.apache.catalina.servlet4preview.http.PushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder etag(java.lang.String)>
<org.apache.catalina.servlet4preview.http.PushBuilder: boolean push()>
<org.apache.catalina.servlet4preview.http.PushBuilder: java.lang.String getLastModified()>
<org.apache.catalina.servlet4preview.http.PushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder lastModified(java.lang.String)>
<org.apache.catalina.servlet4preview.http.PushBuilder: java.lang.String getEtag()>
<org.apache.catalina.servlet4preview.http.PushBuilder: org.apache.catalina.servlet4preview.http.PushBuilder conditional(boolean)>
<org.apache.catalina.servlets.CGIServlet$CGIRunner: void access$900(org.apache.catalina.servlets.CGIServlet$CGIRunner,java.io.BufferedReader)>
<org.apache.catalina.servlets.CGIServlet: java.lang.Object access$600()>
<org.apache.catalina.servlets.CGIServlet: java.util.regex.Pattern access$500(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: long access$1100(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$000(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: org.apache.juli.logging.Log access$100()>
<org.apache.catalina.servlets.CGIServlet: boolean access$1000(org.apache.catalina.servlets.CGIServlet,javax.servlet.http.HttpServletResponse,int)>
<org.apache.catalina.servlets.CGIServlet: org.apache.tomcat.util.res.StringManager access$200()>
<org.apache.catalina.servlets.CGIServlet: java.util.Hashtable access$300(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$400(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.util.List access$800(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$700(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.ssi.SSIMediator: void ()>
<org.apache.catalina.valves.RemoteAddrValve: boolean getAddConnectorPort()>
<org.apache.catalina.valves.RemoteAddrValve: void setAddConnectorPort(boolean)>
<org.apache.catalina.valves.RemoteHostValve: void setAddConnectorPort(boolean)>
<org.apache.catalina.valves.RemoteHostValve: boolean getAddConnectorPort()>
<org.apache.catalina.valves.rewrite.RewriteValve: void ()>
b) Methods that only exist in org.apache.tomcat:tomcat-catalina:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile]
<org.apache.catalina.Context: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.Context: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.Context: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.Context: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.Pipeline: void findNonAsyncValves(java.util.Set)>
<org.apache.catalina.authenticator.AuthenticatorBase: javax.security.auth.message.config.AuthConfigProvider findJaspicProvider()>
<org.apache.catalina.authenticator.AuthenticatorBase: javax.security.auth.callback.CallbackHandler createCallbackHandler()>
<org.apache.catalina.authenticator.AuthenticatorBase: java.lang.String getJaspicCallbackHandlerClass()>
<org.apache.catalina.authenticator.AuthenticatorBase: void setJaspicCallbackHandlerClass(java.lang.String)>
<org.apache.catalina.authenticator.BasicAuthenticator$BasicCredentials: void (org.apache.tomcat.util.buf.ByteChunk,java.nio.charset.Charset)>
<org.apache.catalina.authenticator.BasicAuthenticator: void setCharset(java.lang.String)>
<org.apache.catalina.authenticator.BasicAuthenticator: java.lang.String getCharset()>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: void addListener(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationListenerWrapper)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: boolean access$700(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl,javax.security.auth.message.config.RegistrationListener)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: java.util.List access$300(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: void access$000(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl,org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationListenerWrapper)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl: java.util.Map access$800(org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl findRegistrationContextImpl(java.lang.String,java.lang.String)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: void savePersistentProviders(org.apache.catalina.authenticator.jaspic.PersistentProviderRegistrations$Providers,java.util.Map)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: void savePersistentProvider(org.apache.catalina.authenticator.jaspic.PersistentProviderRegistrations$Providers,org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: void findProvider(javax.security.auth.message.config.AuthConfigProvider,java.util.Map,java.util.List)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: void addRegistrationContextImpl(java.lang.String,java.lang.String,java.lang.String,org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl$RegistrationContextImpl)>
<org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl: javax.security.auth.message.config.AuthConfigProvider createAuthConfigProvider(java.lang.String,java.util.Map)>
<org.apache.catalina.authenticator.jaspic.PersistentProviderRegistrations: void writeOptional(java.lang.String,java.lang.String,java.io.Writer)>
<org.apache.catalina.connector.Connector: java.nio.charset.Charset getURICharset()>
<org.apache.catalina.connector.Request: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder(javax.servlet.http.HttpServletRequest)>
<org.apache.catalina.connector.Request: javax.security.auth.Subject newSubject(java.security.Principal)>
<org.apache.catalina.connector.Request: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder()>
<org.apache.catalina.connector.Request: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.connector.Request: java.util.Set getNonAsyncClassNames()>
<org.apache.catalina.connector.Request: java.nio.charset.Charset getCharset()>
<org.apache.catalina.connector.RequestFacade: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.connector.RequestFacade: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder(javax.servlet.http.HttpServletRequest)>
<org.apache.catalina.connector.RequestFacade: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder()>
<org.apache.catalina.core.ApplicationContext: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.ApplicationContext: javax.servlet.ServletRegistration$Dynamic addJspFile(java.lang.String,java.lang.String)>
<org.apache.catalina.core.ApplicationContext: int getSessionTimeout()>
<org.apache.catalina.core.ApplicationContext: javax.servlet.ServletRegistration$Dynamic addServlet(java.lang.String,java.lang.String,javax.servlet.Servlet,java.util.Map)>
<org.apache.catalina.core.ApplicationContext: void setSessionTimeout(int)>
<org.apache.catalina.core.ApplicationContext: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.core.ApplicationContext: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.ApplicationContext: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.core.ApplicationContextFacade: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.core.ApplicationContextFacade: int getSessionTimeout()>
<org.apache.catalina.core.ApplicationContextFacade: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.ApplicationContextFacade: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.core.ApplicationContextFacade: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.ApplicationContextFacade: void setSessionTimeout(int)>
<org.apache.catalina.core.ApplicationContextFacade: javax.servlet.ServletRegistration$Dynamic addJspFile(java.lang.String,java.lang.String)>
<org.apache.catalina.core.ApplicationDispatcher: void (org.apache.catalina.Wrapper,java.lang.String,java.lang.String,java.lang.String,java.lang.String,org.apache.catalina.servlet4preview.http.ServletMapping,java.lang.String)>
<org.apache.catalina.core.ApplicationFilterChain: void findNonAsyncFilters(java.util.Set)>
<org.apache.catalina.core.ApplicationHttpRequest: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.core.ApplicationHttpRequest: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder()>
<org.apache.catalina.core.ApplicationHttpRequest: void setMapping(org.apache.catalina.servlet4preview.http.ServletMapping)>
<org.apache.catalina.core.ApplicationMapping: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.core.ApplicationPushBuilder: java.lang.String decodePercentSequence(java.lang.String,java.nio.charset.Charset)>
<org.apache.catalina.core.ApplicationPushBuilder: void push()>
<org.apache.catalina.core.ApplicationPushBuilder: void (org.apache.catalina.connector.Request,javax.servlet.http.HttpServletRequest)>
<org.apache.catalina.core.DefaultInstanceManager: void backgroundProcess()>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: javax.servlet.ServletRegistration$Dynamic addJspFile(java.lang.String,java.lang.String)>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: int getSessionTimeout()>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: void setSessionTimeout(int)>
<org.apache.catalina.core.StandardContext$NoPluggabilityServletContext: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.StandardContext: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.StandardContext: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.core.StandardContext: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.core.StandardContext: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.core.StandardPipeline: void findNonAsyncValves(java.util.Set)>
<org.apache.catalina.filters.CorsFilter: java.lang.String getInitParameter(javax.servlet.FilterConfig,java.lang.String,java.lang.String)>
<org.apache.catalina.filters.HttpHeaderSecurityFilter: void setHstsPreload(boolean)>
<org.apache.catalina.filters.HttpHeaderSecurityFilter: boolean isHstsPreload()>
<org.apache.catalina.filters.RemoteIpFilter$XForwardedRequest: org.apache.catalina.servlet4preview.http.PushBuilder getPushBuilder()>
<org.apache.catalina.loader.WebappClassLoaderBase: boolean hasLoggingConfig()>
<org.apache.catalina.manager.StatusTransformer: java.lang.String filterXml(java.lang.String)>
<org.apache.catalina.realm.JNDIRealm: void setReadTimeout(java.lang.String)>
<org.apache.catalina.realm.JNDIRealm: java.lang.String getReadTimeout()>
<org.apache.catalina.realm.RealmBase: boolean hasRoleInternal(java.security.Principal,java.lang.String)>
<org.apache.catalina.servlet4preview.http.HttpServletRequest: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder()>
<org.apache.catalina.servlet4preview.http.HttpServletRequest: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper: org.apache.catalina.servlet4preview.http.ServletMapping getServletMapping()>
<org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper: org.apache.catalina.servlet4preview.http.PushBuilder newPushBuilder()>
<org.apache.catalina.servlet4preview.http.PushBuilder: void push()>
<org.apache.catalina.servlets.CGIServlet$CGIRunner: void access$1000(org.apache.catalina.servlets.CGIServlet$CGIRunner,java.io.BufferedReader)>
<org.apache.catalina.servlets.CGIServlet: java.util.regex.Pattern access$600(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: long access$1200(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: boolean access$000(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$100(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.util.Hashtable access$400(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: boolean access$1100(org.apache.catalina.servlets.CGIServlet,javax.servlet.http.HttpServletResponse,int)>
<org.apache.catalina.servlets.CGIServlet: org.apache.tomcat.util.res.StringManager access$300()>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$500(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.util.List access$900(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: java.lang.Object access$700()>
<org.apache.catalina.servlets.CGIServlet: java.lang.String access$800(org.apache.catalina.servlets.CGIServlet)>
<org.apache.catalina.servlets.CGIServlet: org.apache.juli.logging.Log access$200()>
<org.apache.catalina.servlets.DefaultServlet: void copy(java.io.InputStream,javax.servlet.ServletOutputStream)>
<org.apache.catalina.servlets.DefaultServlet: void service(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)>
<org.apache.catalina.servlets.DefaultServlet: void copy(java.io.InputStream,java.io.PrintWriter,java.lang.String)>
<org.apache.catalina.servlets.WebdavServlet: java.lang.String rewriteUrl(java.lang.String)>
<org.apache.catalina.session.JDBCStore: boolean getLocalDataSource()>
<org.apache.catalina.session.JDBCStore: void setLocalDataSource(boolean)>
<org.apache.catalina.startup.FailedContext: void setResponseCharacterEncoding(java.lang.String)>
<org.apache.catalina.startup.FailedContext: java.lang.String getResponseCharacterEncoding()>
<org.apache.catalina.startup.FailedContext: java.lang.String getRequestCharacterEncoding()>
<org.apache.catalina.startup.FailedContext: void setRequestCharacterEncoding(java.lang.String)>
<org.apache.catalina.startup.HostConfig: boolean isDeployThisXML(java.io.File,org.apache.catalina.util.ContextName)>
<org.apache.catalina.util.DOMWriter: void (java.io.Writer)>
<org.apache.catalina.util.ParameterMap: boolean containsValue(java.lang.Object)>
<org.apache.catalina.util.ParameterMap: void checkLocked()>
<org.apache.catalina.util.ParameterMap: java.util.Set entrySet()>
<org.apache.catalina.util.ParameterMap: java.lang.Object get(java.lang.Object)>
<org.apache.catalina.util.ParameterMap: int size()>
<org.apache.catalina.util.ParameterMap: boolean isEmpty()>
<org.apache.catalina.util.ParameterMap: java.util.Collection values()>
<org.apache.catalina.util.ParameterMap: boolean containsKey(java.lang.Object)>
<org.apache.catalina.util.ParameterMap: java.util.Set keySet()>
<org.apache.catalina.util.URLEncoder: java.lang.Object clone()>
<org.apache.catalina.util.URLEncoder: void (java.util.BitSet)>
<org.apache.catalina.util.URLEncoder: void setEncodeSpaceAsPlus(boolean)>
<org.apache.catalina.util.URLEncoder: java.lang.String encode(java.lang.String,java.nio.charset.Charset)>
<org.apache.catalina.util.URLEncoder: void removeSafeCharacter(char)>
<org.apache.catalina.valves.CrawlerSessionManagerValve: java.lang.String getCrawlerIps()>
<org.apache.catalina.valves.CrawlerSessionManagerValve: void setCrawlerIps(java.lang.String)>
<org.apache.catalina.valves.RequestFilterValve: void setAddConnectorPort(boolean)>
<org.apache.catalina.valves.RequestFilterValve: boolean getAddConnectorPort()>
<org.apache.catalina.valves.rewrite.Resolver: java.nio.charset.Charset getUriCharset()>
<org.apache.catalina.valves.rewrite.ResolverImpl: java.nio.charset.Charset getUriCharset()>
<org.apache.catalina.webresources.AbstractArchiveResourceSet: boolean isMultiRelease()>
<org.apache.catalina.webresources.AbstractFileResourceSet: boolean isInvalidWindowsFilename(java.lang.String)>
<org.apache.catalina.webresources.AbstractSingleArchiveResourceSet: boolean isMultiRelease()>
<org.apache.catalina.webresources.JarWarResourceSet: void processArchivesEntriesForMultiRelease()>
<org.apache.catalina.webresources.JarWarResourceSet: boolean isMultiRelease()>
<org.apache.catalina.webresources.StandardRoot: boolean isPackedWarFile()>
<org.apache.catalina.webresources.war.WarURLConnection: long getLastModified()>
3. Risk for jar-pair:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:org.apache.tomcat:tomcat-coyote:8.5.24:
a) Methods that only exist in org.apache.tomcat.embed:tomcat-embed-core:8.5.11:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat.embed:tomcat-embed-core:8.5.11::test]
<org.apache.coyote.AbstractProcessor: void doPush(org.apache.coyote.PushToken)>
<org.apache.coyote.http11.AbstractHttp11JsseProtocol: java.lang.String getSslImplemenationShortName()>
<org.apache.coyote.http11.Http11InputBuffer: void (org.apache.coyote.Request,int)>
<org.apache.coyote.http11.Http11OutputBuffer: void (org.apache.coyote.Response,int)>
<org.apache.coyote.http11.Http11Processor: boolean prepareSendfile(org.apache.coyote.http11.OutputFilter[])>
<org.apache.coyote.http11.Http11Processor: boolean isCompressable()>
<org.apache.coyote.http11.Http11Processor: void (int,org.apache.tomcat.util.net.AbstractEndpoint,int,java.util.Set,int,int,java.util.Map)>
<org.apache.coyote.http11.Http11Processor: boolean breakKeepAliveLoop(org.apache.tomcat.util.net.SocketWrapperBase)>
<org.apache.coyote.http2.HpackDecoder: int getMaxMemorySize()>
<org.apache.coyote.http2.Stream$StreamOutputBuffer: boolean access$002(org.apache.coyote.http2.Stream$StreamOutputBuffer,boolean)>
<org.apache.coyote.http2.Stream: org.apache.juli.logging.Log access$300()>
<org.apache.coyote.http2.Stream: int access$500(org.apache.coyote.http2.Stream,int,boolean)>
<org.apache.coyote.http2.Stream: org.apache.tomcat.util.res.StringManager access$100()>
<org.apache.coyote.http2.Stream: org.apache.coyote.Response access$200(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: org.apache.coyote.Request access$600(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: org.apache.coyote.http2.Http2UpgradeHandler access$400(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: boolean push(org.apache.coyote.Request)>
<org.apache.coyote.http2.StreamProcessor: void doPush(org.apache.coyote.PushToken)>
<org.apache.tomcat.util.http.LegacyCookieProcessor$1: void ()>
<org.apache.tomcat.util.http.LegacyCookieProcessor$1: java.lang.Object initialValue()>
<org.apache.tomcat.util.http.LegacyCookieProcessor$1: java.text.DateFormat initialValue()>
<org.apache.tomcat.util.http.Parameters: java.nio.charset.Charset getCharset(java.lang.String)>
<org.apache.tomcat.util.http.parser.Cookie: void parseCookieRfc2109(org.apache.tomcat.util.http.parser.Cookie$ByteBuffer,org.apache.tomcat.util.http.ServerCookies)>
<org.apache.tomcat.util.net.AbstractJsseEndpoint: javax.net.ssl.SSLEngine createSSLEngine(java.lang.String,java.util.List)>
<org.apache.tomcat.util.net.AprSSLSupport: void (org.apache.tomcat.util.net.SocketWrapperBase,java.lang.String)>
<org.apache.tomcat.util.net.NioEndpoint: void access$500(org.apache.tomcat.util.net.NioEndpoint,org.apache.tomcat.util.net.NioChannel,java.nio.channels.SelectionKey)>
<org.apache.tomcat.util.net.NioEndpoint: java.util.concurrent.CountDownLatch access$400(org.apache.tomcat.util.net.NioEndpoint)>
<org.apache.tomcat.util.net.SecureNio2Channel: java.nio.channels.AsynchronousSocketChannel getIOChannel()>
<org.apache.tomcat.util.net.SecureNioChannel: java.nio.channels.SocketChannel getIOChannel()>
<org.apache.tomcat.util.net.jsse.JSSEUtil: java.security.cert.CertPathParameters getParameters(java.lang.String,java.security.KeyStore)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$700()>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.lang.String access$1100(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: boolean access$600(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: javax.security.cert.X509Certificate[] access$802(org.apache.tomcat.util.net.openssl.OpenSSLEngine,javax.security.cert.X509Certificate[])>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: javax.security.cert.X509Certificate[] access$800(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$502(org.apache.tomcat.util.net.openssl.OpenSSLEngine,java.security.cert.Certificate[])>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: boolean access$900(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.lang.String access$1102(org.apache.tomcat.util.net.openssl.OpenSSLEngine,java.lang.String)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: org.apache.tomcat.util.net.openssl.OpenSSLSessionContext access$400(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: long access$200(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$500(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
b) Methods that only exist in org.apache.tomcat:tomcat-coyote:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile->org.apache.tomcat:tomcat-coyote:8.5.24::compile]
<org.apache.coyote.AbstractProcessor: void doPush(org.apache.coyote.Request)>
<org.apache.coyote.AbstractProtocol: void setConnectionLinger(int)>
<org.apache.coyote.AbstractProtocol: int getConnectionLinger()>
<org.apache.coyote.AbstractProtocol: void setSendReasonPhrase(boolean)>
<org.apache.coyote.AbstractProtocol: int getAcceptCount()>
<org.apache.coyote.AbstractProtocol: boolean getSendReasonPhrase()>
<org.apache.coyote.AbstractProtocol: void setAcceptCount(int)>
<org.apache.coyote.AsyncStateMachine: void asyncMustError()>
<org.apache.coyote.Request: java.nio.charset.Charset getCharset()>
<org.apache.coyote.Request: void setCharset(java.nio.charset.Charset)>
<org.apache.coyote.Response: java.nio.charset.Charset getCharset()>
<org.apache.coyote.ajp.AjpProcessor: void setSendReasonPhrase(boolean)>
<org.apache.coyote.http11.AbstractHttp11JsseProtocol: java.lang.String getSslImplementationShortName()>
<org.apache.coyote.http11.AbstractHttp11Protocol: boolean getSSLDisableCompression()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String[] getCompressibleMimeTypes()>
<org.apache.coyote.http11.AbstractHttp11Protocol: void setAllowHostHeaderMismatch(boolean)>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCACertificateFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSslEnabledProtocols()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCACertificatePath()>
<org.apache.coyote.http11.AbstractHttp11Protocol: boolean getSSLDisableSessionTickets()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCertificateChainFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTruststorePass()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSslProtocol()>
<org.apache.coyote.http11.AbstractHttp11Protocol: int getSessionTimeout()>
<org.apache.coyote.http11.AbstractHttp11Protocol: boolean getAllowHostHeaderMismatch()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getCiphers()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCertificateKeyFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCipherSuite()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeystoreFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: int getTrustMaxCertLength()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTruststoreType()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCARevocationPath()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTruststoreAlgorithm()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getCrlFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTrustManagerClassName()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeystoreProvider()>
<org.apache.coyote.http11.AbstractHttp11Protocol: boolean getRejectIllegalHeaderName()>
<org.apache.coyote.http11.AbstractHttp11Protocol: int getSessionCacheSize()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCertificateFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLVerifyClient()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLHonorCipherOrder()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getAlgorithm()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLProtocol()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getClientAuth()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeystorePass()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTruststoreFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: void setRejectIllegalHeaderName(boolean)>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getCompressibleMimeType()>
<org.apache.coyote.http11.AbstractHttp11Protocol: void setCompressibleMimeType(java.lang.String)>
<org.apache.coyote.http11.AbstractHttp11Protocol: int getSSLVerifyDepth()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeystoreType()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getUseServerCipherSuitesOrder()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeyAlias()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getKeyPass()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLCARevocationFile()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getTruststoreProvider()>
<org.apache.coyote.http11.AbstractHttp11Protocol: java.lang.String getSSLPassword()>
<org.apache.coyote.http11.Http11InputBuffer: void (org.apache.coyote.Request,int,boolean)>
<org.apache.coyote.http11.Http11OutputBuffer: void write(java.lang.String)>
<org.apache.coyote.http11.Http11OutputBuffer: void (org.apache.coyote.Response,int,boolean)>
<org.apache.coyote.http11.Http11Processor: void (int,boolean,boolean,org.apache.tomcat.util.net.AbstractEndpoint,int,java.util.Set,int,int,java.util.Map,boolean)>
<org.apache.coyote.http11.Http11Processor: void prepareSendfile(org.apache.coyote.http11.OutputFilter[])>
<org.apache.coyote.http11.Http11Processor: void setCompressibleMimeTypes(java.lang.String[])>
<org.apache.coyote.http11.Http11Processor: org.apache.tomcat.util.net.SendfileState processSendfile(org.apache.tomcat.util.net.SocketWrapperBase)>
<org.apache.coyote.http11.Http11Processor: boolean isCompressible()>
<org.apache.coyote.http2.ConnectionException: void (java.lang.String,org.apache.coyote.http2.Http2Error,java.lang.Throwable)>
<org.apache.coyote.http2.HeaderSink: void setHeaderException(org.apache.coyote.http2.StreamException)>
<org.apache.coyote.http2.HpackDecoder$HeaderEmitter: void setHeaderException(org.apache.coyote.http2.StreamException)>
<org.apache.coyote.http2.HpackDecoder: int getMaxMemorySizeSoft()>
<org.apache.coyote.http2.Http2Exception: void (java.lang.String,org.apache.coyote.http2.Http2Error,java.lang.Throwable)>
<org.apache.coyote.http2.Http2Protocol: void setInitiatePingDisabled(boolean)>
<org.apache.coyote.http2.Http2UpgradeHandler: void setInitiatePingDisabled(boolean)>
<org.apache.coyote.http2.Stream$StreamInputBuffer: void notifyEof()>
<org.apache.coyote.http2.Stream$StreamInputBuffer: void access$000(org.apache.coyote.http2.Stream$StreamInputBuffer)>
<org.apache.coyote.http2.Stream$StreamOutputBuffer: boolean access$102(org.apache.coyote.http2.Stream$StreamOutputBuffer,boolean)>
<org.apache.coyote.http2.Stream: void setHeaderException(org.apache.coyote.http2.StreamException)>
<org.apache.coyote.http2.Stream: org.apache.coyote.Response access$300(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: org.apache.coyote.Request access$700(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: org.apache.coyote.http2.Http2UpgradeHandler access$500(org.apache.coyote.http2.Stream)>
<org.apache.coyote.http2.Stream: int access$600(org.apache.coyote.http2.Stream,int,boolean)>
<org.apache.coyote.http2.Stream: org.apache.juli.logging.Log access$400()>
<org.apache.coyote.http2.Stream: org.apache.tomcat.util.res.StringManager access$200()>
<org.apache.coyote.http2.Stream: void push(org.apache.coyote.Request)>
<org.apache.coyote.http2.Stream: void receivedData(int)>
<org.apache.coyote.http2.StreamProcessor: void doPush(org.apache.coyote.Request)>
<org.apache.tomcat.util.http.LegacyCookieProcessor$1: void ()>
<org.apache.tomcat.util.http.Parameters: void processParameters(org.apache.tomcat.util.buf.MessageBytes,java.nio.charset.Charset)>
<org.apache.tomcat.util.http.Parameters: java.nio.charset.Charset getCharset(java.lang.String,java.nio.charset.Charset)>
<org.apache.tomcat.util.http.Parameters: void setCharset(java.nio.charset.Charset)>
<org.apache.tomcat.util.http.Parameters: java.nio.charset.Charset getCharset()>
<org.apache.tomcat.util.http.Parameters: void setQueryStringCharset(java.nio.charset.Charset)>
<org.apache.tomcat.util.http.parser.Cookie: void parseCookieRfc2109(org.apache.tomcat.util.http.parser.Cookie$ByteBuffer,org.apache.tomcat.util.http.ServerCookies,int)>
<org.apache.tomcat.util.net.AbstractEndpoint: void reloadSslHostConfigs()>
<org.apache.tomcat.util.net.AbstractEndpoint: int getAcceptCount()>
<org.apache.tomcat.util.net.AbstractEndpoint: void setDomain(java.lang.String)>
<org.apache.tomcat.util.net.AbstractEndpoint: void reloadSslHostConfig(java.lang.String)>
<org.apache.tomcat.util.net.AbstractEndpoint: org.apache.tomcat.util.net.SSLHostConfig removeSslHostConfig(java.lang.String)>
<org.apache.tomcat.util.net.AbstractEndpoint: void setConnectionTimeout(int)>
<org.apache.tomcat.util.net.AbstractEndpoint: void addSslHostConfig(org.apache.tomcat.util.net.SSLHostConfig,boolean)>
<org.apache.tomcat.util.net.AbstractEndpoint: void setAcceptCount(int)>
<org.apache.tomcat.util.net.AbstractEndpoint: void setConnectionLinger(int)>
<org.apache.tomcat.util.net.AbstractEndpoint: int getConnectionLinger()>
<org.apache.tomcat.util.net.AbstractEndpoint: void unregisterJmx(org.apache.tomcat.util.net.SSLHostConfig)>
<org.apache.tomcat.util.net.AbstractEndpoint: java.lang.String getDomain()>
<org.apache.tomcat.util.net.AbstractEndpoint: void registerJmx(org.apache.tomcat.util.net.SSLHostConfig)>
<org.apache.tomcat.util.net.AbstractEndpoint: int getConnectionTimeout()>
<org.apache.tomcat.util.net.AbstractJsseEndpoint: javax.net.ssl.SSLEngine createSSLEngine(java.lang.String,java.util.List,java.util.List)>
<org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper: int getSSLInfoI(int)>
<org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper: byte[] getSSLInfoB(int)>
<org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper: java.lang.String getSSLInfoS(int)>
<org.apache.tomcat.util.net.AprSSLSupport: void (org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper,java.lang.String)>
<org.apache.tomcat.util.net.NioEndpoint: java.util.concurrent.CountDownLatch getStopLatch()>
<org.apache.tomcat.util.net.NioEndpoint: void access$400(org.apache.tomcat.util.net.NioEndpoint,org.apache.tomcat.util.net.NioChannel,java.nio.channels.SelectionKey)>
<org.apache.tomcat.util.net.NioEndpoint: void setStopLatch(java.util.concurrent.CountDownLatch)>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeystoreProvider()>
<org.apache.tomcat.util.net.SSLHostConfig: javax.management.ObjectName getObjectName()>
<org.apache.tomcat.util.net.SSLHostConfig: void setOpenSslConf(org.apache.tomcat.util.net.openssl.OpenSSLConf)>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeystorePassword()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateFile()>
<org.apache.tomcat.util.net.SSLHostConfig: void setRevocationEnabled(boolean)>
<org.apache.tomcat.util.net.SSLHostConfig: org.apache.tomcat.util.net.openssl.OpenSSLConf getOpenSslConf()>
<org.apache.tomcat.util.net.SSLHostConfig: boolean isCertificateVerificationDepthConfigured()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateChainFile()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeystoreFile()>
<org.apache.tomcat.util.net.SSLHostConfig: boolean getRevocationEnabled()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeyAlias()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeyPassword()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getConfigType()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.Long getOpenSslConfContext()>
<org.apache.tomcat.util.net.SSLHostConfig: void setObjectName(javax.management.ObjectName)>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeystoreType()>
<org.apache.tomcat.util.net.SSLHostConfig: java.lang.String getCertificateKeyFile()>
<org.apache.tomcat.util.net.SSLHostConfig: void setOpenSslConfContext(java.lang.Long)>
<org.apache.tomcat.util.net.SSLHostConfigCertificate: void setObjectName(javax.management.ObjectName)>
<org.apache.tomcat.util.net.SSLHostConfigCertificate: javax.management.ObjectName getObjectName()>
<org.apache.tomcat.util.net.SecureNio2Channel: void closeSilently()>
<org.apache.tomcat.util.net.SecureNioChannel: void closeSilently()>
<org.apache.tomcat.util.net.TLSClientHelloExtractor: void readAlpnExtension(java.nio.ByteBuffer,java.util.List)>
<org.apache.tomcat.util.net.TLSClientHelloExtractor: java.util.List getClientRequestedApplicationProtocols()>
<org.apache.tomcat.util.net.jsse.JSSEUtil: java.security.cert.CertPathParameters getParameters(java.lang.String,java.security.KeyStore,boolean)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: boolean access$1100(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: boolean access$200(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: org.apache.tomcat.util.net.openssl.OpenSSLSessionContext access$500(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: javax.security.cert.X509Certificate[] access$902(org.apache.tomcat.util.net.openssl.OpenSSLEngine,javax.security.cert.X509Certificate[])>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.lang.String access$1300(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$600(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.lang.String access$1202(org.apache.tomcat.util.net.openssl.OpenSSLEngine,java.lang.String)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: void (long,java.lang.String,boolean,org.apache.tomcat.util.net.openssl.OpenSSLSessionContext,boolean,boolean)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: long access$400(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: boolean access$700(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$602(org.apache.tomcat.util.net.openssl.OpenSSLEngine,java.security.cert.Certificate[])>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: java.security.cert.Certificate[] access$800()>
<org.apache.tomcat.util.net.openssl.OpenSSLEngine: javax.security.cert.X509Certificate[] access$900(org.apache.tomcat.util.net.openssl.OpenSSLEngine)>
4. Risk for jar-pair:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:org.apache.tomcat:tomcat-juli:8.5.24:
Methods that only exist in org.apache.tomcat:tomcat-juli:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile->org.apache.tomcat:tomcat-juli:8.5.24::compile]
<org.apache.juli.AsyncFileHandler: void (java.lang.String,java.lang.String,java.lang.String,int)>
<org.apache.juli.FileHandler: java.util.Date getMaxDaysOffset()>
<org.apache.juli.FileHandler: void access$200(org.apache.juli.FileHandler,java.lang.String,java.lang.Exception,int)>
<org.apache.juli.FileHandler: java.lang.String obtainDateFromPath(java.nio.file.Path)>
<org.apache.juli.FileHandler: void ()>
<org.apache.juli.FileHandler: java.nio.file.DirectoryStream access$000(org.apache.juli.FileHandler)>
<org.apache.juli.FileHandler: int access$100(org.apache.juli.FileHandler)>
<org.apache.juli.FileHandler: java.nio.file.DirectoryStream streamFilesForDelete()>
<org.apache.juli.FileHandler: java.lang.String access$300(org.apache.juli.FileHandler,java.nio.file.Path)>
<org.apache.juli.FileHandler: void (java.lang.String,java.lang.String,java.lang.String,int)>
<org.apache.juli.FileHandler: void clean()>
<org.apache.juli.WebappProperties: boolean hasLoggingConfig()>
5. Risk for jar-pair:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:org.apache.tomcat:tomcat-jni:8.5.24:
Methods that only exist in org.apache.tomcat:tomcat-jni:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile->org.apache.tomcat:tomcat-jni:8.5.24::compile]
<org.apache.tomcat.jni.SSLContext: boolean addClientCACertificateRaw(long,byte[])>
<org.apache.tomcat.jni.SSLContext: java.lang.String[] getCiphers(long)>
6. Risk for jar-pair:org.apache.tomcat.embed:tomcat-embed-core:8.5.11:org.apache.tomcat:tomcat-util:8.5.24:
a) Methods that only exist in org.apache.tomcat.embed:tomcat-embed-core:8.5.11:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat.embed:tomcat-embed-core:8.5.11::test]
<org.apache.tomcat.util.buf.UDecoder: byte convertHexDigit(byte)>
b) Methods that only exist in org.apache.tomcat:tomcat-util:8.5.24:: [nl.nlighten:tomcat_exporter_client:0.0.7-SNAPSHOT::null->org.apache.tomcat:tomcat-catalina:8.5.24::compile->org.apache.tomcat:tomcat-util:8.5.24::compile]
<org.apache.tomcat.util.ExceptionUtils: void preload()>
<org.apache.tomcat.util.buf.ByteChunk: java.lang.Object clone()>
<org.apache.tomcat.util.buf.CharChunk: java.lang.Object clone()>
<org.apache.tomcat.util.buf.MessageBytes: java.lang.Object clone()>
<org.apache.tomcat.util.buf.UDecoder: java.lang.String URLDecode(java.lang.String,java.nio.charset.Charset,boolean)>
<org.apache.tomcat.util.buf.UDecoder: java.lang.String URLDecode(java.lang.String,java.nio.charset.Charset)>
<org.apache.tomcat.util.buf.UriUtil: java.lang.String getWarSeparator()>
<org.apache.tomcat.util.compat.Jre8Compat: int jarFileRuntimeMajorVersion()>
<org.apache.tomcat.util.compat.Jre9Compat: java.lang.String getApplicationProtocol(javax.net.ssl.SSLEngine)>
<org.apache.tomcat.util.compat.Jre9Compat: java.util.jar.JarFile jarFileNewInstance(java.io.File)>
<org.apache.tomcat.util.compat.Jre9Compat: boolean jarFileIsMultiRelease(java.util.jar.JarFile)>
<org.apache.tomcat.util.compat.Jre9Compat: void disableCachingForJarUrlConnections()>
<org.apache.tomcat.util.compat.Jre9Compat: void addBootModulePath(java.util.Deque)>
<org.apache.tomcat.util.compat.Jre9Compat: void setApplicationProtocols(javax.net.ssl.SSLParameters,java.lang.String[])>
<org.apache.tomcat.util.compat.Jre9Compat: int jarFileRuntimeMajorVersion()>
<org.apache.tomcat.util.compat.JreCompat: void addBootModulePath(java.util.Deque)>
<org.apache.tomcat.util.compat.JreCompat: void disableCachingForJarUrlConnections()>
<org.apache.tomcat.util.compat.JreCompat: java.lang.String getApplicationProtocol(javax.net.ssl.SSLEngine)>
<org.apache.tomcat.util.compat.JreCompat: boolean jarFileIsMultiRelease(java.util.jar.JarFile)>
<org.apache.tomcat.util.compat.JreCompat: java.util.jar.JarFile jarFileNewInstance(java.lang.String)>
<org.apache.tomcat.util.compat.JreCompat: int jarFileRuntimeMajorVersion()>
<org.apache.tomcat.util.compat.JreCompat: java.util.jar.JarFile jarFileNewInstance(java.io.File)>
<org.apache.tomcat.util.compat.JreCompat: void setApplicationProtocols(javax.net.ssl.SSLParameters,java.lang.String[])>
<org.apache.tomcat.util.security.PrivilegedSetTccl: void (java.lang.Thread,java.lang.ClassLoader)>
Boa noite,
Realizei uma mudança no código adicionando o contexto da aplicação no monitoramento do Pool de conexões.
Caso achem interessante adicionar no aplicativo, posso enviar o código para vocês.
Só não consegui acertar os testes, não estou conseguindo simular esse comportamento sem o Tomcat.
Atenciosamente,
Rodrigo Cesar Perlin (Guina).
Dear @team,
I trying to install the tomcat exporter. I installed the tomcat exporter with the latest release.
I found that there is some syntax issue in the output.
Reference:
Below 2 Exporter outputs are standard exporter supported by Prometheus
Node Exporter Output
I found that there is an ',' at the labels in tomcat exporter. Due to this, I am unable to parse the syntax.
I configured my JDBC as follows:
<Resource name="jdbc/open_database_pooled"
auth="Container"
connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
connectionPoolName="open_database_pooled"
defaultAutoCommit="false"
factory="oracle.ucp.jdbc.PoolDataSourceImpl"
global="jdbc/open_database_pooled"
inactiveConnectionTimeout="20"
maxPoolSize="50"
minPoolSize="10"
user="${db.user}"
password="secret"
url="${jdbc.url}"
type="oracle.ucp.jdbc.PoolDataSource"
validateConnectionOnBorrow="true"
sqlForValidateConnection="select 1 from DUAL"
jdbcInterceptors="nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor(logFailed=true,logSlow=true,threshold=1000,buckets=.01|.05|.1|1|10,slowQueryBuckets=1|10|30)"
driverClassName="oracle.jdbc.driver.OracleDriver"
defaultRowPrefetch="100000"/>
But as you said in the code comment, it wont work. You wrote This interceptor will NOT work for any other connection pool (eg DBCP2).
.
Do you have some hints for creating an Oracle JDBC interceptor?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.