custom client option
Add CustomClient option to PushOptions
Problem
When pushing metrics to a VictoriaMetrics Instance that requires mutual TLS authentication with client certificates, the current implementation doesn't allow customizing the HTTP client used for requests. This creates a dilemma:
- Modify the global HTTP DefaultTransport (affecting all HTTP clients in the application)
- Create a custom metrics pusher implementation
Solution
Add a CustomClient field to the PushOptions struct that allows specifying a custom HTTP client. This enables users to configure TLS settings specifically for metrics pushing without affecting other parts of the application.
Why Not Use vmauth or Traefik?
While vmauth and Traefik are excellent solutions for many scenarios, there are specific use cases where a custom client approach provides significant advantages:
-
Cross-cloud deployments: When the metrics client is in one cloud provider and the VictoriaMetrics server is in another, setting up an additional proxy layer introduces unnecessary complexity and potential points of failure.
-
Network complexity: Cross-cloud communications typically traverse public internet, making embedded TLS configuration simpler and more secure than exposing and securing additional proxy services.
-
Operational simplicity: For many users, configuring the client directly eliminates the need to deploy, manage, and secure additional infrastructure components.
This implementation provides flexibility for users to choose the approach that best fits their specific infrastructure and security requirements.
Use Case
This is particularly useful in multi-cloud environments where metrics need to be pushed between services in different clouds requiring mutual TLS authentication. For example:
- Pushing metrics from services in one cloud provider to a VictoriaMetrics instance in another cloud
- Using client certificates for authentication between environments
- Configuring specific timeouts or connection parameters for metrics pushing
Changes
- Added
CustomClient *http.Clientfield toPushOptionsstruct - Modified
newPushContextto use the provided client or create a default one - Added tests to verify the custom client is used correctly with TLS configuration
The implementation maintains backward compatibility with all existing code.
Fixes #88