# Work with Istio

Instructions for transport Istio's metrics to the SkyWalking OAP server.

## Prerequisites

Istio should be installed in the Kubernetes cluster. Follow [Istio getting start](https://istio.io/docs/setup/getting-started/)
to finish it.

## Deploy SkyWalking backend

Follow the [deploying backend in Kubernetes](../backend/backend-k8s.md) to install the OAP server in the kubernetes cluster.
Refer to [OpenTelemetry receiver](../backend/backend-receivers.md#OpenTelemetry-receiver) to ingest metrics.
`otel-receiver` defaults to be inactive. Set env var `SW_OTEL_RECEIVER` to `default` to enable it.


## Deploy OpenTelemetry collector
OpenTelemetry collector is the location Istio telemetry sends metrics, then processing and sending them to SkyWalking
backend.

Following the [Getting Started](https://opentelemetry.io/docs/collector/getting-started/) to deploy this collector. There 
are several components available in the collector, and they could be combined for different scenarios.
 For the sake of brevity, we use the Prometheus receiver to retrieve metrics from Istio control and data plane, 
 then send them to SkyWalking by OpenCensus exporter.

#### Prometheus receiver
Refer to [Prometheus Receiver](https://github.com/open-telemetry/opentelemetry-collector/blob/master/receiver/prometheusreceiver/README.md)
 to set up this receiver. you could find more configuration details in [Prometheus Integration of Istio](https://istio.io/latest/docs/ops/integrations/prometheus/#configuration)
 to figure out how to direct Prometheus receiver to query Istio metrics.
 
SkyWalking supports receiving multi-cluster metrics in a single OAP cluster. A `cluster` label should be appended to every metric
fetched by this receiver even there's only a single cluster needed to be collected.
You could leverage `relabel` to add it like below:

```
relabel_configs:
- source_labels: []
  target_label: cluster
  replacement: <cluster name>
```

or opt to [Resource Processor](https://github.com/open-telemetry/opentelemetry-collector/blob/master/processor/resourceprocessor/README.md):

```
processors:
  resource:
    attributes:
    - key: cluster
      value: "<cluster name>"
      action: upsert
```

Notice, if you try the sample of istio Prometheus Kubernetes configuration, 
the issues described [here](https://github.com/open-telemetry/opentelemetry-collector/issues/2163) might block you. 
Try to use the solution indicated in this issue if it's not fixed.

#### OpenCensus exporter
Follow [OpenCensus exporter configuration](https://github.com/open-telemetry/opentelemetry-collector/blob/master/exporter/opencensusexporter/README.md)
to set up a connection between OpenTelemetry collector and OAP cluster. `endpoint` is the address of OAP gRPC service.

## Observe Istio

Open Istio Dashboard in SkyWaling UI by clicking `Dashboard` -> `Istio`, then you're able to view charts and diagrams
generated by Istio metrics. You also could view them by `swctl` and set up alarm rules based on them.


NOTICE, if you want metrics of Istio managed services, including topology among them, we recommend you to consider our [ALS solution](../envoy/als_setting.md)
