> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bronto.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Istio service mesh access logs with OpenTelemetry

> Enable Istio service-mesh access logs on Envoy sidecars and forward them to Bronto via the OpenTelemetry Collector to observe traffic between microservices.

Istio's access logs come from the Envoy sidecar in each pod. Enable them with the `Telemetry` API, then collect the sidecar stdout with the same pod-log collector you use for the rest of the cluster.

## Prerequisites

* A Bronto account and API key ([how to create one](/Account-Management/API-Keys#create-a-new-api-key))
* Istio installed with sidecar injection enabled (Istio 1.12+ for the `Telemetry` API)
* A pod-log collector already running — see [Kubernetes](/integrations/kubernetes)

## Enable Istio access logging

Apply a mesh-wide `Telemetry` resource in the `istio-system` namespace using the built-in `envoy` provider, which logs to each sidecar's stdout:

```yaml telemetry.yaml theme={"dark"}
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  accessLogging:
    - providers:
        - name: envoy
```

```bash theme={"dark"}
kubectl apply -f telemetry.yaml
```

To scope logging to a single namespace, apply the resource there instead of `istio-system`.

## Collect with your existing setup

Once access logging is on, sidecars write to stdout — your [Kubernetes DaemonSet](/integrations/kubernetes) already forwards pod logs to Bronto, so no extra collector config is needed. Use the `x-bronto-collection` header to tag the cluster.

## Distributed tracing

The same `Telemetry` API can enable mesh tracing: add a `tracing` provider that points at an OpenTelemetry Collector, which exports spans to Bronto. See [Send Traces to Bronto](/tracing/send-traces).

## What you will see in Bronto

Filter by your collection. Each request log includes the source and destination workload and namespace, method, path, response code, duration, bytes, and Envoy response flags. Bronto's [Custom Parser](/core-features/custom-parser) extracts these fields.

## Troubleshooting

* **No access logs?** Confirm the sidecar is injected (`kubectl get pod <pod> -o jsonpath='{.spec.containers[*].name}'` should list `istio-proxy`) and that the `Telemetry` resource is in `istio-system`.
* **Older Istio (pre-1.12):** the `Telemetry` API isn't available — enable access logs through the mesh config (`accessLogFile: /dev/stdout`) instead.
* For collection issues, see the [Kubernetes](/integrations/kubernetes) page.

## Alternative: Fluent Bit

Collection is handled by your pod-log agent, so if you run the Fluent Bit DaemonSet from the [Kubernetes](/integrations/kubernetes) page, Istio access logs are already included — no Istio-specific Fluent Bit config is required.
