---
title: Querying Metrics from Prometheus
description: This task shows you how to query for Istio Metrics using Prometheus.
weight: 30
keywords: [telemetry,metrics]
aliases:
    - /docs/tasks/telemetry/querying-metrics/
    - /docs/tasks/telemetry/metrics/querying-metrics/
---

This task shows you how to query for Istio Metrics using Prometheus. As part of
this task, you will use the web-based interface for querying metric values.

The [Bookinfo](/docs/examples/bookinfo/) sample application is used as
the example application throughout this task.

## Before you begin

[Install Istio](/docs/setup/) in your cluster and deploy an
application.

## Querying Istio metrics

1.  Verify that the `prometheus` service is running in your cluster.

    In Kubernetes environments, execute the following command:

    {{< text bash >}}
    $ kubectl -n istio-system get svc prometheus
    NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    prometheus   10.59.241.54   <none>        9090/TCP   2m
    {{< /text >}}

1.  Send traffic to the mesh.

    For the Bookinfo sample, visit `http://$GATEWAY_URL/productpage` in your web
    browser or issue the following command:

    {{< text bash >}}
    $ curl http://$GATEWAY_URL/productpage
    {{< /text >}}

    {{< tip >}}
    `$GATEWAY_URL` is the value set in the [Bookinfo](/docs/examples/bookinfo/) example.
    {{< /tip >}}

1.  Open the Prometheus UI.

    In Kubernetes environments, execute the following command:

    {{< text bash >}}
    $ istioctl dashboard prometheus
    {{< /text >}}

    Click **Graph** in Prometheus.

1.  Execute a Prometheus query.

    In the "Expression" input box at the top of the web page, enter the text:
    `istio_requests_total`. Then, click the **Execute** button.

The results will be similar to:

{{< image link="./prometheus_query_result.png" caption="Prometheus Query Result" >}}

Other queries to try:

-   Total count of all requests to the `productpage` service:

    {{< text plain >}}
    istio_requests_total{destination_service="productpage.default.svc.cluster.local"}
    {{< /text >}}

- Total count of all requests to `v3` of the `reviews` service:

    {{< text plain >}}
    istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}
    {{< /text >}}

    This query returns the current total count of all requests to the v3 of the `reviews` service.

-   Rate of requests over the past 5 minutes to all instances of the `productpage` service:

    {{< text plain >}}
    rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])
    {{< /text >}}

### About the Prometheus add-on

Mixer comes with a built-in [Prometheus](https://prometheus.io) adapter that
exposes an endpoint serving generated metric values. The Prometheus add-on is a
Prometheus server that comes preconfigured to scrape Mixer endpoints to collect
the exposed metrics. It provides a mechanism for persistent storage and querying
of Istio metrics.

The configured Prometheus add-on scrapes the following endpoints:

1. `istio-telemetry.istio-system:42422`: The `istio-mesh` job returns all Mixer-generated metrics.
1. `istio-telemetry.istio-system:15014`: The `istio-telemetry` job returns all Mixer-specific metrics. Use this endpoint to monitor Mixer itself.
1. `istio-proxy:15090`: The `envoy-stats` job returns raw stats generated by Envoy. Prometheus is configured to look for pods with the `envoy-prom` endpoint exposed. The add-on configuration filters out a large number of envoy metrics during collection in an attempt to limit the scale of data by the add-on processes.
1. `istio-pilot.istio-system:15014`: The `pilot` job returns the Pilot-generated metrics.
1. `istio-galley.istio-system:15014`: The `galley` job returns the Galley-generated metrics.
1. `istio-policy.istio-system:15014`: The `istio-policy` job returns all policy-related metrics.
1. `istio-citadel.istio-system:15014`: The `istio-citadel` job returns all Citadel-generated metrics.

For more on querying Prometheus, please read their [querying
docs](https://prometheus.io/docs/querying/basics/).

## Cleanup

-   Remove any `istioctl` processes that may still be running using control-C or:

    {{< text bash >}}
    $ killall istioctl
    {{< /text >}}

-   If you are not planning to explore any follow-on tasks, refer to the
    [Bookinfo cleanup](/docs/examples/bookinfo/#cleanup) instructions
    to shutdown the application.
