Druid Notice为Druid增加了自动告警功能。基于插件形式,只需要打开Druid的stat监控,不需要改变其他任何Druid相关依赖和配置。
编译Druid Notice需要如下资源:
- Latest stable Oracle JDK 7
- Latest stable Apache Maven
下载代码及编译方法
git clone git@github.com:gl2001wl/druid-notice.git
cd druid-notice
mvn -DskipTests=true package
Druid Notice需要和Druid运行在同一个JVM容器内,通过访问Druid内部被设置为static的DruidStatManagerFacade来获得数据库连接池相关监控信息。 同时用户通过配置文件说明需要监控的属性和阈值,触发条件后会通过JMX的MXBean自动发送JMX的AttributeChangeNotification。 用户可自行设置MXBean的Listener通过JMX协议本地或远程获得Notification,来进行相应的告警。
关于Druid,请参考Druid 按照官方文档配置实用Druid并打开stat监控。
在pom文件中增加:
<project>
...
<dependencies>
...
<!-- Druid Notice的主要依赖,JMX Notification的生产者 -->
<dependency>
<groupId>com.jd.druid</groupId>
<artifactId>jmx-producer</artifactId>
<version>${druid.notice.version}</version>
</dependency>
...
</dependencies>
</project>
当前版本为1.0-SNAPSHOT
默认使用classpath下的druidnotice.yaml(关于yaml格式,请参考yamlbeans)。
同时也可以通过JVM启动参数-Ddruid.notice.conf=[yourConfFile.yaml]
来自定义配置文件路径。
<bean id="druidNoticeProducer" class="com.jd.druid.notice.producer.NoticeProducer" init-method="start"/>
如果没有使用spring,在启动时调用上面bean的init-method
即可。
Druid Notice使用yaml语法进行配置文件(默认为druidnotice.yaml)设置,样例如下
period: 10000
msgQueueSize: 5120
monitorItems:
- itemKey: datasource
rules:
- valueName: ErrorCount
compareValue: 1
logic: GREATER
params:
yourParam: dsErrCount
- valueName: NotEmptyWaitCount
compareValue: 20
logic: GREATER
params:
yourParam: dsWaitCount
- itemKey: sql
rules:
- valueName: ErrorCount
compareValue: 1
logic: GREATER
params:
yourParam: sqlErrCount
- valueName: MaxTimespan
compareValue: 100
logic: GREATER
params:
yourParam: sqlMaxTimeSpan
(以上仅为参考,需根据实际情况配置)
-
period
- Optional: true
- Default: 1200000
- About: 每隔多少毫秒(ms)从Druid采集一次监控信息,注意不要设置过于频繁。默认两分钟。
-
msgQueueSize
- Optional: true
- Default: Integer.MAX_VALUE
- About: JMX Notification可以积压的最大消息数量。如果达到最大消息数量,采集线程会wait,直到有空闲队列资源。消费线程在处理完数据后会wait,等待采集线程输入数据,消费线程wait timeout为两分钟,防止队列满后消费和采集线程同时wait。
-
itemKey
- Optional: false
- Default: NONE
- Options: datasource | sql
- About: 目前只支持Druid中数据库连接池和sql两种监控的告警功能,需要分别进行配置。
-
valueName
- Optional: false
- Default: NONE
- About: Druid相应监控资源的具体监控项目,可以在Druid监控中的JSON接口中查看。
-
compareValue
- Optional: false
- Default: NONE
- About: 监控时实际值所要比较的阈值,目前只支持Long类型。
-
logic
- Optional: false
- Default: NONE
- Options: GREATER | LESS | EQUALS
- About: 实际值和阈值进行比较的逻辑,分别为大于、小于和等于。当满足条件后会发送Notification。
-
params
- Optional: true
- Default: NONE
- About: 自定义参数,一般当有扩展Notification Listener时使用,自元素使用Map的key value进行配置
Druid中有些统计值是累加统计的,所以不适合每次采集都重复报警。Druid Notice对于累加统计的值会监控达到阈值的峰值,后续只有当超过峰值后,才会触发告警。 例如采集到ErrorCount为10,那么如果下一次采集到还是10的话不会触发告警,只有当大于10,例如采集到11的时候才会触发一次新的告警。
- datasource
- QueryTimeout
- TransactionQueryTimeout
- LoginTimeout
- NotEmptyWaitCount
- NotEmptyWaitMillis
- LogicConnectCount
- LogicCloseCount
- LogicConnectErrorCount
- PhysicalConnectCount
- PhysicalCloseCount
- PhysicalConnectErrorCount
- ExecuteCount
- ErrorCount
- CommitCount
- RollbackCount
- PSCacheAccessCount
- PSCacheHitCount
- PSCacheMissCount
- StartTransactionCount
- ClobOpenCount
- BlobOpenCount
- sql
- ExecuteCount
- TotalTime
- MaxTimespan
- EffectedRowCount
- FetchRowCount
- ConcurrentMax
- ErrorCount