where
The where command filters the search results. It only returns results that match the specified conditions.
Syntax
The where command has the following syntax:
where <boolean-expression>
Parameters
The where command supports the following parameters.
| Parameter | Required/Optional | Description |
|---|---|---|
<boolean-expression> | Required | The condition used to filter the results. Only rows in which this condition evaluates to true are returned. |
Example 1: Filtering by severity level
The following query finds all log entries with a severity level above INFO (severityNumber > 9), filtering out routine logs to focus on warnings and errors:
source=otellogs
| where severityNumber > 9
| sort severityNumber, `resource.attributes.service.name`
| fields severityText, severityNumber, `resource.attributes.service.name`
The query returns the following results:
| severityText | severityNumber | resource.attributes.service.name |
|---|---|---|
| WARN | 13 | frontend-proxy |
| WARN | 13 | frontend-proxy |
| WARN | 13 | product-catalog |
| WARN | 13 | product-catalog |
| ERROR | 17 | checkout |
| ERROR | 17 | checkout |
| ERROR | 17 | frontend-proxy |
| ERROR | 17 | payment |
| ERROR | 17 | payment |
| ERROR | 17 | product-catalog |
| ERROR | 17 | recommendation |
Example 2: Filtering using combined criteria
The following query narrows down errors to a specific service during an incident investigation, combining severity and service name conditions with AND:
source=otellogs
| where severityNumber >= 17 AND `resource.attributes.service.name` = 'payment'
| fields severityText, severityNumber, `resource.attributes.service.name`
The query returns the following results:
| severityText | severityNumber | resource.attributes.service.name |
|---|---|---|
| ERROR | 17 | payment |
| ERROR | 17 | payment |
Example 3: Filtering with multiple possible values
The following query retrieves all warnings and errors using OR to match either condition:
source=otellogs
| where severityText = 'WARN' or severityText = 'ERROR'
| fields severityText, `resource.attributes.service.name`, body
| head 5
The query returns the following results:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms |
| ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms |
| ERROR | checkout | NullPointerException in CheckoutService.placeOrder at line 142 |
| ERROR | payment | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3 |
| WARN | product-catalog | Connection pool 80% utilized on database replica db-replica-02 |
Example 4: Filtering by text patterns
The LIKE operator enables pattern matching on string fields using wildcards.
Matching with a prefix pattern
The following query uses a percent sign (%) to find all services starting with frontend:
source=otellogs
| where LIKE(`resource.attributes.service.name`, 'frontend%')
| fields severityText, `resource.attributes.service.name`, body
| head 3
Matching with a wildcard pattern
The following query finds all logs from services containing product in their name:
source=otellogs
| where LIKE(`resource.attributes.service.name`, '%product%')
| fields severityText, `resource.attributes.service.name`, body
| head 3
The query returns the following results:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms |
| WARN | product-catalog | Connection pool 80% utilized on database replica db-replica-02 |
| DEBUG | product-catalog | gRPC call /ProductCatalogService/GetProduct completed in 12ms |
Example 5: Filtering by excluding specific values
The following query uses a NOT operator to exclude routine informational and debug logs, focusing on warnings and errors that need attention:
source=otellogs
| where NOT severityText IN ('INFO', 'DEBUG')
| sort severityNumber, `resource.attributes.service.name`
| fields severityText, `resource.attributes.service.name`, body
| head 4
The query returns the following results:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| WARN | frontend-proxy | SSL certificate for api.example.com expires in 14 days |
| WARN | frontend-proxy | Rate limit threshold reached: 450/500 requests per minute for API key ending in …abc789 |
| WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms |
| WARN | product-catalog | Connection pool 80% utilized on database replica db-replica-02 |
Example 6: Filtering using value lists
The following query uses an IN operator to match multiple severity levels at once, retrieving all errors and warnings for incident response:
source=otellogs
| where severityText IN ('ERROR', 'WARN')
| sort severityNumber, `resource.attributes.service.name`
| fields severityText, `resource.attributes.service.name`, body
The query returns the following results:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| WARN | frontend-proxy | SSL certificate for api.example.com expires in 14 days |
| WARN | frontend-proxy | Rate limit threshold reached: 450/500 requests per minute for API key ending in …abc789 |
| WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms |
| WARN | product-catalog | Connection pool 80% utilized on database replica db-replica-02 |
| ERROR | checkout | NullPointerException in CheckoutService.placeOrder at line 142 |
| ERROR | checkout | Kafka producer delivery failed: message too large for topic order-events (max 1048576 bytes) |
| ERROR | frontend-proxy | [2024-02-01T09:20:00.456Z] “POST /api/checkout HTTP/1.1” 503 - 0 30000 checkout-8d4f7b-mk2p9 |
| ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms |
| ERROR | payment | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3 |
| ERROR | product-catalog | Database primary node unreachable: connection refused to db-primary-01:5432 |
| ERROR | recommendation | Failed to process recommendation request: invalid product ID from 203.0.113.50 |
Example 7: Filtering records with missing data
The following query finds logs that have instrumentation scope metadata:
source=otellogs
| where NOT ISNULL(instrumentationScope.name)
| fields severityText, instrumentationScope.name
The query returns the following results:
| severityText | instrumentationScope.name |
|---|---|
| INFO | @opentelemetry/instrumentation-http |
| INFO | Microsoft.Extensions.Hosting |
| WARN | go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc |
| ERROR | @opentelemetry/instrumentation-http |
Example 8: Filtering using grouped conditions
The following query investigates a specific service’s errors by combining severity conditions with a service filter, using parentheses to control evaluation order:
source=otellogs
| where (severityText = 'ERROR' OR severityText = 'WARN') AND `resource.attributes.service.name` = 'payment'
| sort severityNumber
| fields severityText, `resource.attributes.service.name`, body
The query returns the following results:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms |
| ERROR | payment | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3 |