Skip to main content
This guide sets up a self-managed Prometheus to collect Vantage 3.0 self-hosted metrics in any environment. On AKS, where Azure Monitor Workspace and Azure Managed Grafana are available, see Azure Managed Monitoring for a managed-service deployment of the same pattern.
The examples use kube-prometheus-stack, but the approach is generic and applies to any Prometheus deployment. For the mesh-specific constraints, see Monitoring Overview.

How Vantage exposes metrics

Vantage application pods are instrumented with OpenTelemetry SDKs and expose Prometheus-format metrics on /metrics-text at container port 8080. Services that expose this endpoint carry the label abbyy.platform.metrics.text.endpoint: "1" and map a service port (typically 80) to the container port with the port name http. Prometheus discovers and scrapes these services via a ServiceMonitor; no separate OpenTelemetry Collector is required for metrics collection. For the full concept and service-mesh constraints, see Monitoring Overview.

Prerequisites

  • A running Vantage installation (operator and workloads deployed).
  • Helm 3.
  • kubectl access to the cluster.
  • When KEDA is enabled, a Prometheus instance reachable as prometheus-operated.observability.svc.cluster.local:9090.

Configure Prometheus

If you plan to ingest OTLP metrics (see OTLP ingestion), enable the otlp-write-receiver feature and pass the --web.enable-otlp-receiver argument to the Prometheus instance. Add the Helm repo:
Create a values file (observability-values.yaml):
Install:
Verify the pods come up:
You should see Prometheus, Grafana, the operator, kube-state-metrics, and node-exporter pods running. Node-exporter runs as a DaemonSet; pending pods are normal if nodes are still scaling.

Configure Prometheus to scrape Vantage

The vantage-selfhosted chart can create the requisite ServiceMonitor objects to monitor Vantage:
See the chart documentation for more options. The observability key is top-level and must not be nested under vantage.

Linkerd mTLS

With Linkerd’s default permissive policy, Prometheus can normally scrape the Linkerd-proxied Vantage endpoints over plaintext. Install Prometheus in the observability namespace, enable the Vantage ServiceMonitor, and confirm every Vantage target is UP. If a strict Linkerd authorization policy blocks the scrape, use one of these approaches:
  1. Enable Linkerd injection for the observability namespace so Prometheus participates in the mesh.
  2. Configure observability.prometheus.serviceMonitor.scheme: https and a tlsConfig that references the client certificates made available to Prometheus by your Linkerd configuration.
Do not enable KEDA until Prometheus returns current values for the Vantage metrics used by the ScaledObject resources. See Autoscaling with KEDA for the inspection queries and readiness checks.

Istio mTLS

When Vantage is placed in an Istio mesh using STRICT mTLS (the default when ingress.enabled is true and ingress.type is istio), Prometheus and the ServiceMonitor must be configured to scrape endpoints over mTLS, because Prometheus uses pod IPs directly rather than the service name. Configure the Prometheus pod(s) with the following annotations:
and the following volume and volumeMount (names and paths are customizable; the examples below use these):
With kube-prometheus-stack, this can be done with the following values:
Alternatively, see the official Istio docs. Next, install the vantage-selfhosted chart so the ServiceMonitor(s) are configured to use these certificates:

Verify metrics are flowing

Port-forward to the Prometheus UI:
Check that Vantage targets are discovered and healthy:
Query for a Vantage application metric:
A non-zero result confirms metrics are being scraped. You can also browse targets at http://localhost:9090/targets to see individual scrape status.

Access Grafana

Open http://localhost:3000. Default credentials are admin / the password set in the values file. Prometheus is pre-configured as a data source.

Available metrics

Vantage applications expose process, HTTP client/server, and ABBYY platform metrics through the OpenTelemetry SDK, all labeled with service, pod, namespace, and otel_scope_name. See Available metrics for the full catalog.

OTLP ingestion

OTLP ingestion is push-based and independent of the scrape-based ServiceMonitor flow above. Use it only for services that push OpenTelemetry metrics rather than exposing a scrape endpoint.
When Prometheus is configured with the OTLP receiver enabled (--web.enable-otlp-receiver), any service that pushes OTLP metrics via HTTP can send them to: