This is a subtelty of Istio telemetry. Basically, all metrics are reported redundantly both by the source of a request and by the destination, regardless whether it is inbound or outbound. See the reporter
label definition here: https://istio.io/docs/reference/config/policy-and-telemetry/metrics/#labels
Most of the time this information is redundant, that is it will be the same for source
and destination
reporters, but in several cases it will differ, for instance:
- When the request emitter is not part of the service mesh, hence vizualized as
unknown
, there will be no corresponding telemetry for that source
.
- Similarly, if the receiver is
unknown
there will be no corresponding telemetry for that destination
.
- Some Istio features impact this telemetry, for instance when Fault Injection is enabled the corresponding telemetry will be emitted for
source
but not for destination
. Similar things happens whenever a request is canceled from the outbound sidecar, e.g. with circuit breaking or such.
- On the contrary, when mirroring is configured the mirrored requests will be seen for
destination
reporter but not for source
- The
response time
metric differs depending on reporter: on source
reporting it accounts for the whole response time, i.e. server processing time + network roundtrip whereas in destination
reporting it will account only for the server processing time, hence you will see lower values.
That's all I can think about now, but there's probably other exceptions.