Class 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:

     
     <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"/>
     
     
    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:
        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", }
     
    • Nested Class Summary

      • Nested classes/interfaces inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

        org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport.StatementProxy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static String FAILED_QUERY_STATUS  
      static String SUCCESS_QUERY_STATUS  
      • Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

        threshold
      • 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
      • Fields inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor

        CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL
    • Method Detail

      • setProperties

        public void setProperties​(Map<String,​org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorProperty> properties)
        Overrides:
        setProperties in class org.apache.tomcat.jdbc.pool.JdbcInterceptor
      • reportQuery

        protected String reportQuery​(String query,
                                     Object[] args,
                                     String name,
                                     long start,
                                     long delta)
        Overrides:
        reportQuery in class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
      • reportSlowQuery

        protected String reportSlowQuery​(String query,
                                         Object[] args,
                                         String name,
                                         long start,
                                         long delta)
        Overrides:
        reportSlowQuery in class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
      • closeInvoked

        public void closeInvoked()
        Specified by:
        closeInvoked in class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
      • prepareStatement

        public void prepareStatement​(String sql,
                                     long time)
        Specified by:
        prepareStatement in class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
      • prepareCall

        public void prepareCall​(String sql,
                                long time)
        Specified by:
        prepareCall in class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
      • poolStarted

        public void poolStarted​(org.apache.tomcat.jdbc.pool.ConnectionPool pool)
        Overrides:
        poolStarted in class org.apache.tomcat.jdbc.pool.JdbcInterceptor
      • poolClosed

        public void poolClosed​(org.apache.tomcat.jdbc.pool.ConnectionPool pool)
        Overrides:
        poolClosed in class org.apache.tomcat.jdbc.pool.JdbcInterceptor
      • reset

        public void reset​(org.apache.tomcat.jdbc.pool.ConnectionPool parent,
                          org.apache.tomcat.jdbc.pool.PooledConnection con)
        Overrides:
        reset in class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor