0
# Monitoring Integration
1
2
The Druid Spring Boot Starter provides comprehensive monitoring capabilities including web-based console, request statistics, and AOP method monitoring with configurable security and filtering options.
3
4
## Capabilities
5
6
### StatViewServlet Configuration
7
8
Web-based monitoring console that provides real-time database connection pool statistics and SQL execution monitoring.
9
10
```java { .api }
11
/**
12
* Auto-configuration for Druid's web monitoring console
13
* Only activates when explicitly enabled for security reasons
14
*/
15
@ConditionalOnWebApplication
16
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true")
17
public class DruidStatViewServletConfiguration {
18
19
/**
20
* Creates and configures ServletRegistrationBean for StatViewServlet
21
* Applies security settings including IP filtering and authentication
22
* @param properties DruidStatProperties containing servlet configuration
23
* @return Configured ServletRegistrationBean for monitoring console
24
*/
25
@Bean
26
public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties);
27
}
28
```
29
30
**Key Features:**
31
- **Real-time Monitoring**: Live database connection pool metrics and SQL statistics
32
- **Security Controls**: IP-based access control and login authentication
33
- **Customizable URLs**: Configurable servlet mapping patterns
34
- **Reset Functionality**: Optional ability to reset monitoring statistics
35
36
**Configuration Example:**
37
```properties
38
# Enable monitoring console
39
spring.datasource.druid.stat-view-servlet.enabled=true
40
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
41
spring.datasource.druid.stat-view-servlet.login-username=admin
42
spring.datasource.druid.stat-view-servlet.login-password=secure123
43
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,10.0.0.0/8
44
spring.datasource.druid.stat-view-servlet.deny=192.168.0.100
45
spring.datasource.druid.stat-view-servlet.reset-enable=false
46
```
47
48
**Access:** Once configured, access the monitoring console at `http://your-app/druid/index.html`
49
50
### WebStatFilter Configuration
51
52
HTTP request statistics collection filter that monitors web application performance and usage patterns.
53
54
```java { .api }
55
/**
56
* Auto-configuration for web request statistics collection
57
* Only activates when explicitly enabled and in web application context
58
*/
59
@ConditionalOnWebApplication
60
@ConditionalOnProperty(name = "spring.datasource.druid.web-stat-filter.enabled", havingValue = "true")
61
public class DruidWebStatFilterConfiguration {
62
63
/**
64
* Creates and configures FilterRegistrationBean for WebStatFilter
65
* Sets up URL patterns, exclusions, and session tracking options
66
* @param properties DruidStatProperties containing filter configuration
67
* @return Configured FilterRegistrationBean for web request monitoring
68
*/
69
@Bean
70
public FilterRegistrationBean webStatFilterRegistrationBean(DruidStatProperties properties);
71
}
72
```
73
74
**Monitoring Capabilities:**
75
- **Request Statistics**: URL access patterns, response times, and error rates
76
- **Session Tracking**: User session statistics and behavior analysis
77
- **Performance Metrics**: Request duration histograms and throughput metrics
78
- **User Identification**: Principal-based user activity tracking
79
80
**Configuration Example:**
81
```properties
82
# Enable web request monitoring
83
spring.datasource.druid.web-stat-filter.enabled=true
84
spring.datasource.druid.web-stat-filter.url-pattern=/*
85
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.css,*.ico,/druid/*,/static/*
86
spring.datasource.druid.web-stat-filter.session-stat-enable=true
87
spring.datasource.druid.web-stat-filter.session-stat-max-count=2000
88
spring.datasource.druid.web-stat-filter.principal-session-name=user
89
spring.datasource.druid.web-stat-filter.profile-enable=true
90
```
91
92
### AOP Method Monitoring
93
94
Spring AOP integration for monitoring method execution times and call patterns in service and DAO layers.
95
96
```java { .api }
97
/**
98
* Auto-configuration for Spring AOP method monitoring
99
* Only activates when aop-patterns property is configured
100
*/
101
@ConditionalOnProperty("spring.datasource.druid.aop-patterns")
102
public class DruidSpringAopConfiguration {
103
104
/**
105
* Creates DruidStatInterceptor for method execution monitoring
106
* @return Advice implementation for AOP method interception
107
*/
108
@Bean
109
public Advice advice();
110
111
/**
112
* Creates RegexpMethodPointcutAdvisor with configured patterns
113
* @param properties DruidStatProperties containing AOP patterns
114
* @return Advisor that applies monitoring to matching methods
115
*/
116
@Bean
117
public Advisor advisor(DruidStatProperties properties);
118
119
/**
120
* Creates DefaultAdvisorAutoProxyCreator when Spring AOP auto-proxy is disabled
121
* Ensures AOP advisors are applied even when auto-proxy is off
122
* @return Auto-proxy creator for manual AOP configuration
123
*/
124
@Bean
125
@ConditionalOnProperty(name = "spring.aop.auto", havingValue = "false")
126
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator();
127
}
128
```
129
130
**Monitoring Features:**
131
- **Method Execution Times**: Track method call durations and performance bottlenecks
132
- **Call Patterns**: Monitor method invocation frequency and usage patterns
133
- **Error Tracking**: Capture method execution exceptions and failure rates
134
- **Layered Monitoring**: Separate monitoring for service, DAO, and controller layers
135
136
**Configuration Example:**
137
```properties
138
# Enable AOP method monitoring
139
spring.datasource.druid.aop-patterns=com.example.service.*,com.example.dao.*,com.example.controller.*
140
```
141
142
**Usage Example:**
143
```java
144
@Service
145
public class UserService {
146
147
// This method will be monitored due to the AOP pattern
148
public User findById(Long id) {
149
// Method execution time and call count will be tracked
150
return userRepository.findById(id);
151
}
152
}
153
```
154
155
## Monitoring Data Access
156
157
### Programmatic Access
158
159
Access monitoring data programmatically through Druid's management facade:
160
161
```java
162
@RestController
163
public class MonitoringController {
164
165
@GetMapping("/monitoring/datasource")
166
public Object getDataSourceStats() {
167
return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
168
}
169
170
@GetMapping("/monitoring/sql")
171
public Object getSqlStats() {
172
return DruidStatManagerFacade.getInstance().getSqlStatDataList();
173
}
174
175
@GetMapping("/monitoring/web")
176
public Object getWebStats() {
177
return DruidStatManagerFacade.getInstance().getWebAppStatDataList();
178
}
179
}
180
```
181
182
### Monitoring Data Types
183
184
**DataSource Statistics:**
185
- Connection pool metrics (active, idle, wait counts)
186
- Connection creation and destruction rates
187
- Query execution statistics
188
- Error counts and rates
189
190
**SQL Statistics:**
191
- Individual SQL statement performance
192
- Execution counts and average times
193
- Slow SQL identification
194
- Parameter binding statistics
195
196
**Web Statistics:**
197
- URL access patterns and response times
198
- Session statistics and user activity
199
- Request/response size metrics
200
- Error rate analysis
201
202
## Security Configuration
203
204
### StatViewServlet Security
205
206
**IP-based Access Control:**
207
```properties
208
# Allow specific IPs
209
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.1.100
210
211
# Deny specific IPs (takes precedence over allow)
212
spring.datasource.druid.stat-view-servlet.deny=192.168.1.200
213
214
# Allow IP ranges
215
spring.datasource.druid.stat-view-servlet.allow=10.0.0.0/8,172.16.0.0/12
216
```
217
218
**Authentication:**
219
```properties
220
# Required credentials for console access
221
spring.datasource.druid.stat-view-servlet.login-username=admin
222
spring.datasource.druid.stat-view-servlet.login-password=${DRUID_ADMIN_PASSWORD}
223
```
224
225
**Reset Protection:**
226
```properties
227
# Disable reset functionality in production
228
spring.datasource.druid.stat-view-servlet.reset-enable=false
229
```
230
231
### WebStatFilter Privacy
232
233
**URL Exclusions:**
234
```properties
235
# Exclude sensitive or unnecessary endpoints
236
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.css,*.ico,/druid/*,/admin/*,/api/internal/*
237
```
238
239
**Session Privacy:**
240
```properties
241
# Limit session tracking scope
242
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
243
spring.datasource.druid.web-stat-filter.principal-session-name=username
244
```
245
246
## Production Considerations
247
248
### Performance Impact
249
250
- **Minimal Overhead**: Druid monitoring has minimal performance impact
251
- **Configurable Depth**: Control monitoring granularity through configuration
252
- **Resource Management**: Automatic cleanup of old statistics data
253
254
### Security Best Practices
255
256
1. **Disable in Development**: Keep StatViewServlet disabled by default
257
2. **Strong Authentication**: Use strong passwords and consider additional authentication layers
258
3. **Network Isolation**: Restrict access to monitoring endpoints via firewall rules
259
4. **HTTPS Only**: Ensure monitoring console is only accessed over HTTPS in production
260
5. **Regular Auditing**: Monitor access logs for unauthorized access attempts
261
262
### Monitoring Configuration Examples
263
264
**Development Environment:**
265
```yaml
266
spring:
267
datasource:
268
druid:
269
stat-view-servlet:
270
enabled: true
271
login-username: dev
272
login-password: dev123
273
allow: 127.0.0.1
274
reset-enable: true
275
web-stat-filter:
276
enabled: true
277
exclusions: "*.js,*.css,*.ico,/druid/*"
278
aop-patterns: com.example.service.*
279
```
280
281
**Production Environment:**
282
```yaml
283
spring:
284
datasource:
285
druid:
286
stat-view-servlet:
287
enabled: true
288
login-username: ${DRUID_USERNAME}
289
login-password: ${DRUID_PASSWORD}
290
allow: ${MONITORING_ALLOWED_IPS}
291
reset-enable: false
292
url-pattern: /internal/druid/*
293
web-stat-filter:
294
enabled: true
295
exclusions: "*.js,*.css,*.ico,/druid/*,/static/*,/actuator/*"
296
session-stat-max-count: 5000
297
aop-patterns: com.example.service.*,com.example.dao.*
298
```