How do I compare a string field as a number in Google Stackdriver Logging advanced queries?

Viewed 754

I tried

jsonPayload.elapsed_ms > 5000

and I'm clearly getting a lexicographical comparison of the character "5" because I only see results that are "6", "7", "8", "9" (see final number per line, after the "200"):

enter image description here

I tried

double(jsonPayload.elapsed_ms)>5000

as well but doesn't seem to be the right syntax.

There's a whole section on conversions here but no examples.

2 Answers

Here's a pretty terrible workaround until someone posts a better answer.

jsonPayload.elapsed_ms=~"[5-9][0-9][0-9][0-9]"

I am from the Cloud Logging team.

Since the jsonPayload.elapsed_ms field is being logged as a string, the range comparison is evaluated lexicographically. Is it possible for you to log the field as a numeric type in the JSON payload?

https://cloud.google.com/logging/docs/view/advanced-queries#values_conversions documents the auto-conversions when evaluating a filter expression. However, it is currently not supported to cast the logged values to a different type at query time.

We plan to add support for this in the query language. Please follow and +1 the following public issue https://issuetracker.google.com/issues/140348005 for updates.

Related