Installation
Add the Metlo Spring dependency to your Mavenpom.xml:
For Gradle, add:
Quick Start
Register as filter
The filter will be automatically registered by Spring Boot. For non-Boot applications, register it in
web.xml or using FilterRegistrationBean.Configuration
Constructor Options
TheMetlo class provides multiple constructors for different configuration needs:
Basic Configuration
The URL of your Metlo collector instance
Your Metlo API key for authentication
With Rate Limiting
Maximum requests per second to send to Metlo collector. Use
-1 for unlimited.Advanced Configuration
Number of threads in the executor pool for asynchronous communication
Configuration Examples
Environment-Based Configuration
Use environment variables for production deployments:application.properties:
How It Works
Metlo extendsOncePerRequestFilter to ensure single execution per request:
- Wraps request/response - Uses
ContentCachingRequestWrapperand custom response wrapper - Processes filter chain - Your controllers execute normally
- Captures data - Extracts headers, body, parameters after response completes
- Asynchronous transmission - Sends data using executor service with rate limiting
Captured Data
For each request, Metlo captures: Request:- URL (host, path, query parameters)
- HTTP method
- Headers
- Request body
- Source IP and port
- Status code
- Headers (including Content-Type)
- Response body
- Destination IP and port
- Environment:
production - Source identifier:
java/spring - Request/response timestamp
Full Spring Boot Example
MetloConfig.java
UserController.java
application.properties
Disabling Metlo
You can disable Metlo using theMETLO_ENABLED environment variable:
Rate Limiting
Metlo includes built-in rate limiting to prevent overwhelming the collector:- Default: 10 requests per second
- Configurable: Set via constructor parameter
- Unlimited: Use
-1to disable rate limiting
Troubleshooting
Filter not capturing requests
Filter not capturing requests
Verify that:
- The Metlo bean is defined in a
@Configurationclass - Spring Boot auto-configuration is enabled
- Check application logs for Metlo warnings
- Ensure the collector URL is accessible
Connection refused errors
Connection refused errors
Check that:
- The Metlo collector URL is correct
- Your application can reach the collector (check firewalls)
- The collector service is running
Empty request/response body
Empty request/response body
Metlo uses content caching wrappers. Ensure you’re not reading the request/response stream before Metlo processes it.
High memory usage
High memory usage
Reduce the thread pool size or lower the RPS limit if you’re experiencing memory pressure under high load.
Requirements
- Java >= 8
- Spring Framework >= 4.2.0 (for
ContentCachingRequestWrapper) - Servlet API >= 2.3
Compatibility
Metlo’s Spring integration works with:- Spring Boot 2.x and 3.x
- Spring MVC
- Spring WebFlux (use Spring Reactive integration instead)
- Embedded servers (Tomcat, Jetty, Undertow)
Next Steps
API Discovery
View your discovered Spring APIs
Spring Reactive
Use Metlo with reactive Spring applications