Case Study: Sensedia S/A
Sensedia is a leading integration solutions provider with more than +120 enterprise clients across a range of sectors. Its world-class portfolio includes: an API Management Platform, Adaptive Governance, Events Hub, Service Mesh, Cloud Connectors and Strategic Professional Services teams.
Main Benefits of Using VictoriaMetrics
Challenge
The requirement is that the metrics be stored for 15 days, be scalable and offer high availability of the metrics.
The solution needed to be integrated into Grafana and allow for the use of PromQL when creating/editing dashboards in Grafana to obtain metrics from the Prometheus read_remote API.
The solution also needed to receive data from Prometheus using HTTPS and to request a login and password to write/read the metrics.
Solution
We read the VictoriaMetrics documentation and watched other use cases, including the lecture given by an adidas employee at PromCon 2019. We presented our first impressions to the Cloud Architects team and together we decided to do a Proof of Concept (PoC) in our testing environment.
We analyzed the performance for one month.
The next step was the implementation of the solution in our production environment days before the start of BlackFriday in 2020 which is the period of highest use of the Sensedia API-Platform by customers in the whole year.
We set a record in the generation of metrics with no instability in the monitoring stack.
Why VictoriaMetrics Was Chosen Over Other Solutions
- It is efficient and uses fewer hardware resources compared with other tools
- Installation supported in Docker containers
- Helm chart available for installation in Kubernetes cluster
- Compatible with the Prometheus query syntax so we didn’t need to redo our dashboards in Grafana
- Compatibility with the Prometheus write_remote API
- Support for TLS encryption when writing and reading metrics
- Authentication for writing or reading metrics using the vmauth module
Technical Stats
sum(vm_cache_entries{type="storage/hour_metric_ids"})
sum(rate(vm_rows_inserted_total[5m]))
sum(vm_rows{type=~"storage/.+"})
sum(rate(vm_rows_inserted_total[5m]))
sum(increase(vm_new_timeseries_created_total[24h]))
sum(vm_data_size_bytes{type=~"storage/.+"})
sum(vm_data_size_bytes{type="indexdb"})
sum(vm_data_size_bytes) / sum(vm_rows{type=~"storage/.+"})
sum(rate(vm_http_requests_total{ path=~".*/api/v1/query_range" }[5m]))
sum(rate(vm_http_requests_total{ path=~".*/api/v1/query" }[5m]))
max(vm_request_duration_seconds{ path=~".*/api/v1/query_range" }) by (quantile)
{quantile="0.5"} 0.265
{quantile="0.9"} 0.430
{quantile="0.97"} 0.492
{quantile="0.99"} 0.492
max(vm_request_duration_seconds{ path=~".*/api/v1/query" }) by (quantile)