Collecting Metrics in Knative

    Grafana dashboards are available for metrics collected directly with Prometheus.

    You can also set up the OpenTelemetry Collector to receive metrics from Knative components and distribute them to other metrics providers that support OpenTelemetry.

    Warning

    You can’t use OpenTelemetry Collector and Prometheus at the same time. The default metrics backend is Prometheus. You will need to remove and metrics.request-metrics-backend-destination keys from the config-observability Configmap to enable Prometheus metrics.

    Prometheus is an open-source tool for collecting, aggregating timeseries metrics and alerting. It can also be used to scrape the OpenTelemetry Collector that is demonstrated below when Prometheus is used.

    Setting up Prometheus

    1. Install the Prometheus Operator by using :

      Caution

      You will need to ensure that the helm chart has following values configured, otherwise the ServiceMonitors/Podmonitors will not work.

      1. kube-state-metrics:
      2. metricLabelsAllowlist:
      3. - deployments=[app.kubernetes.io/name,app.kubernetes.io/component,app.kubernetes.io/instance]
      4. prometheus:
      5. prometheusSpec:
      6. podMonitorSelectorNilUsesHelmValues: false
    2. Apply the ServiceMonitors/PodMonitors to collect metrics from Knative.

      1. kubectl apply -f https://raw.githubusercontent.com/knative-sandbox/monitoring/main/servicemonitor.yaml
    3. If you are using the Grafana Helm Chart with the Dashboard Sidecar enabled, you can load the dashboards by applying the following configmaps.

    By default, the Prometheus instance is only exposed on a private service named prometheus-operated.

    To access the console in your web browser:

    1. Enter the command:

      1. kubectl port-forward -n default svc/prometheus-operated 9090
    2. Access the console in your browser via http://localhost:9090.

    OpenTelemetry is a CNCF observability framework for cloud-native software, which provides a collection of tools, APIs, and SDKs.

    You can use OpenTelemetry to instrument, generate, collect, and export telemetry data. This data includes metrics, logs, and traces, that you can analyze to understand the performance and behavior of Knative components.

    OpenTelemetry allows you to easily export metrics to multiple monitoring services without needing to rebuild or reconfigure the Knative binaries.

    Understanding the collector

    The collector provides a location where various Knative components can push metrics to be retained and collected by a monitoring service.

    Tip

    For more complex deployments, you can automate some of these steps by using the .

    Caution

    The Grafana dashboards at https://github.com/knative-sandbox/monitoring/tree/main/grafana don’t work with metrics scraped from OpenTelemetry Collector.

    1. Create a Deployment, Service, and ConfigMap for the collector by entering the following command:

    2. Update the ConfigMaps in the Knative Serving and Eventing namespaces, by entering the follow command:

      1. kubectl patch --namespace knative-serving configmap/config-observability \
      2. --type merge \
      3. --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.request-metrics-backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}'
      4. kubectl patch --namespace knative-eventing configmap/config-observability \
      5. --type merge \
      6. --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}'

    Verify the collector setup

      1. kubectl port-forward --namespace metrics deployment/otel-collector 8889
    1. Fetch to see the exported metrics.