Custom metrics not showing up in istio ingress


I have istio 1.13.5 installed in my clusters and a service setup somewhat like this:

AWS LB -> "type 1" gw -> "type 2" gw -> "type 2" apps
               -> "type 1" apps

The “type 1” gateway is a simple nginx with some location entries for the “type 1” apps and a catch all rule to the “type 2” gateway.
All of them are inside the mesh, but without istio ingress (the mesh isn’t fully closed yet).

I’m changing the “type 1” gw for an istio ingress gateway. However, the nginx setup has a number of vhost and location metrics for each route mapped and I’m not being able to recreate this.

AWS LB -> istio ingressgw -> "type 2" gw -> "type 2" apps
               -> "type 1" apps

I’ve set up the envoyfilter as per the documentation in Istioldie 1.13 / Classifying Metrics Based on Request or Response and even was able to see it working using the test setup in Understanding Istio Telemetry v2 – Software Blog .

However, when consulting the ingress’ envoy metrics, the custom dimension does not appear.

My envoyfilter was set up in the root namespace (istio-system) and my ingress is in a separate namespace (istio-ingress). Every other app and the “type 2” gw have their own namespaces. The new object, operationId, does appear in the ingress’ bootstrap configuration.

Am I missing something?

PS: In my test setup, where “type 2” gw is just another nginx returning 200 ok and the path requested, the metrics never appear as istio_requests_total, but only as tcp_bytes_received/tcp_bytes_sent. Any hint on this behavior?

Regarding my “PS:” above, I found that my “type 2” gw service port name was configured as “tcp” instead of “http”. That explains the lack of http metrics.

For anyone else coming to this topic, the solution was to add another filter chain and another attributegen with scope GATEWAY so the object operationId is exposed to the ingress gateway.