Package nl.nlighten.prometheus.tomcat
Class TomcatJdbcInterceptor
- java.lang.Object
-
- org.apache.tomcat.jdbc.pool.JdbcInterceptor
-
- org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
-
- org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
- nl.nlighten.prometheus.tomcat.TomcatJdbcInterceptor
-
- All Implemented Interfaces:
InvocationHandler
public class TomcatJdbcInterceptor extends org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
A Tomcat JDBC interceptor that tracks query statistics for applications using the Tomcat jdbc-pool. This interceptor will NOT work for any other connection pool (eg DBCP2). The interceptor will create the following metrics: - A histogram with global query response times - A histogram with per query response times for slow queries (optional) - A gauge with per query error counts (optional)Example usage:
Configuration options are as shown above an have the following meaning: - logFailed: if set to 'true' provide metrics on failed queries - logSlow: if set to 'true' provide metrics on metrics exceeding threshold - threshold: the threshold in ms above which metrics will be provided if logSlow=true - buckets: the buckets separated by a pipe ("|") symbol to be used for the global query response times, defaults to .01|.05|.1|.25|.5|1|2.5|10 - slowQueryBuckets: the buckets separated by a pipe ("|") symbol to be used for the global query response times, defaults to 1|2.5|10|30 NOTE: enabling logFailed and logSlow may lead to a lot of additional metrics., so be careful !!! Example metrics being exported:<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="nl.nlighten.prometheus.TomcatJdbcInterceptor(logFailed=true,logSlow=true,threshold=1000,buckets=.01|.05,|.1|1|10,slowQueryBuckets=1|10|30)" username="root" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mysql"/>tomcat_jdbc_query_seconds_bucket{le="0.005",} 48950.0 ..... tomcat_jdbc_query_seconds_bucket{le="+Inf",} 301.0 tomcat_jdbc_query_seconds_count 353501.0 tomcat_jdbc_query_seconds_sum 331875.0 tomcat_jdbc_slowquery_seconds{query="SELECT 1 from DUAL", }
-
-
Field Summary
Fields Modifier and Type Field Description static StringFAILED_QUERY_STATUSstatic StringSUCCESS_QUERY_STATUS-
Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_QUERY, EXECUTE_TYPES, EXECUTE_UPDATE, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPES
-
-
Constructor Summary
Constructors Constructor Description TomcatJdbcInterceptor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseInvoked()voidpoolClosed(org.apache.tomcat.jdbc.pool.ConnectionPool pool)voidpoolStarted(org.apache.tomcat.jdbc.pool.ConnectionPool pool)voidprepareCall(String sql, long time)voidprepareStatement(String sql, long time)protected StringreportFailedQuery(String query, Object[] args, String name, long start, Throwable t)protected StringreportQuery(String query, Object[] args, String name, long start, long delta)protected StringreportSlowQuery(String query, Object[] args, String name, long start, long delta)voidreset(org.apache.tomcat.jdbc.pool.ConnectionPool parent, org.apache.tomcat.jdbc.pool.PooledConnection con)voidsetProperties(Map<String,org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorProperty> properties)-
Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
createStatement, getThreshold, setThreshold
-
Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
getConstructor, invoke, isExecute, isStatement, process
-
-
-
-
Field Detail
-
SUCCESS_QUERY_STATUS
public static final String SUCCESS_QUERY_STATUS
- See Also:
- Constant Field Values
-
FAILED_QUERY_STATUS
public static final String FAILED_QUERY_STATUS
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
TomcatJdbcInterceptor
public TomcatJdbcInterceptor()
-
-
Method Detail
-
setProperties
public void setProperties(Map<String,org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorProperty> properties)
- Overrides:
setPropertiesin classorg.apache.tomcat.jdbc.pool.JdbcInterceptor
-
reportFailedQuery
protected String reportFailedQuery(String query, Object[] args, String name, long start, Throwable t)
- Overrides:
reportFailedQueryin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
reportQuery
protected String reportQuery(String query, Object[] args, String name, long start, long delta)
- Overrides:
reportQueryin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
reportSlowQuery
protected String reportSlowQuery(String query, Object[] args, String name, long start, long delta)
- Overrides:
reportSlowQueryin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
closeInvoked
public void closeInvoked()
- Specified by:
closeInvokedin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
-
prepareStatement
public void prepareStatement(String sql, long time)
- Specified by:
prepareStatementin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
prepareCall
public void prepareCall(String sql, long time)
- Specified by:
prepareCallin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
poolStarted
public void poolStarted(org.apache.tomcat.jdbc.pool.ConnectionPool pool)
- Overrides:
poolStartedin classorg.apache.tomcat.jdbc.pool.JdbcInterceptor
-
poolClosed
public void poolClosed(org.apache.tomcat.jdbc.pool.ConnectionPool pool)
- Overrides:
poolClosedin classorg.apache.tomcat.jdbc.pool.JdbcInterceptor
-
reset
public void reset(org.apache.tomcat.jdbc.pool.ConnectionPool parent, org.apache.tomcat.jdbc.pool.PooledConnection con)
- Overrides:
resetin classorg.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
-
-