Schema for rule matchers


#1

istio 1.0.5

I’m trying to write a matching rule for metric emission, that only lets through context.reporter.kind of inbound. I have the following:

match: (context.reporter.kind == "inbound") && (context.protocol == "http" || context.protocol == "grpc")

I know context.reporter.kind is populated from the attribute manifest, but I receive the following log errors:

* internal: no instances sent 2019-01-11T22:41:02.323778Z error api Report failed:1 error occurred:

and the metrics go through. Is there a syntax for complex bool expressions?

Thanks.


#2

Nothing about the match clause looks wrong from a quick glance to me. Can you post the full set of config that you are trying to use (handler, instance, rule)? Also, can you post the initial logs from the istio-telemetry pod in your cluster (there might be earlier error messages about bad instances, etc.)? You might also check prometheus for metrics like mixer_runtime_dispatches_total and mixer_config_instance_configs_total etc.


#3

Thanks @douglas-reid, always appreciate the quick response. This most likely is an issue on my side, there are a lot of oddities with our setup. It’s enough for me to know the above should work, and I’ll take a look at the metrics you provided.


#4

To close this out, the config I posted above does work, and the error is entirely unrelated. For those that come here via google, the ‘internal: no instances sent’ is from istio’s dynamic protobuf handling, where it tries to encode a request which it can’t. In my case it had to do with a dynamic mixer adapter.