Advanced query support for AWS and Azure
Summarize
Summary of Advanced Query Support for AWS and Azure
This guide outlines how to create advanced queries for Service Observability dashboard charts, specifically for AWS and Azure. These queries enable users to extract and visualize metrics effectively, leveraging vendor-specific query languages formatted in JSON.
Show less
Key Features
- JSON Formatting: AWS and Azure queries must be in JSON format, adhering to specific guidelines.
- Direct API Access for AWS: AWS data is accessed using the GetMetricData API, allowing for direct requests or DashboardBody metric widgets.
- Template Variables: Both AWS and Azure queries can utilize template variables for flexibility in querying multiple entities.
- Chart Import: As of version 1.10, users can import charts directly from AWS and Azure, simplifying the integration process.
Key Outcomes
By utilizing advanced queries, ServiceNow customers can:
- Easily visualize metrics from AWS and Azure services in their dashboards.
- Run queries against multiple resources without manual adjustments for each entity.
- Automatically use time picker values from the Service Observability UI for time-based queries.
Customers can expect enhanced insights into their cloud metrics, improving monitoring and decision-making processes within their ServiceNow environment.
Understand how to create advanced queries for Service Observability dashboard charts.
Advanced queries in Service Observability support most vendor-specific query languages. Simply copy a query from the observability chart and paste it into the Advanced query field in Service Observability. However, queries to AWS and Azure must be JSON-formatted and follow the guidelines outlined in this topic.
AWS advanced queries
Data from AWS is accessed using the GetMetricData API. Queries can be either a direct request in JSON format to that API or they can be in the form of a DashboardBody metric widget. For example,
you can use the widget representation for a chart that exists on an AWS CloudWatch dashboard.
Direct GetMetricData request
The following example shows a GetMetricData JSON query for a chart that displays the average CPU Utilization for an ELB instance.
{
"StartTime": 1637061900, // can be replaced with “${START}”
"EndTime": 1637074500, // can be replaced with “${END}”
"MetricDataQueries": [
{
"Expression": "SELECT AVG(CPUUtilization) FROM SCHEMA(\"AWS/EC2\", InstanceId)",
"Id": "q1",
"Period": 300,
"Label": "Cluster CpuUtilization"
},
{
"Id": "m1",
"Label": "Unhealthy Behind Load Balancer",
"MetricStat": {
"Metric": {
"Namespace": "AWS/ApplicationELB",
"MetricName": "UnHealthyHostCount",
"Dimensions": [
{
"Name": "LoadBalancer",
"Value": "app/EC2Co-EcsEl-EXAMPLE69Q/fdd2210e799e4376" // can be replaced with “${ENTITIES}” or “${ENTITIES_ELB}”
}
]
},
"Period": 300,
"Stat": "Average"
}
}
]
}
Copied source for a single object in an AWS CloudWatch dashboard
This example shows the JSON copied directly from a single object in the widgets list of the Source view for a CloudWatch dashboard.
{
"type": "metric",
"x": 9,
"y": 0,
"width": 15,
"height": 5,
"properties": {
"view": "timeseries",
"metrics": [
[ "AWS/ApplicationELB", "RequestCountPerTarget", "TargetGroup", "targetgroup/api-tg/1e3dc9z72fe21ca2", "AvailabilityZone", "us-west-1a" ],
["...", "targetgroup/api-tg-cs/82a1db5f950073e1", ".", "." ]
],
"region": "us-west-1"
}
}
Value field for the LoadBalancer dimension with ${ENTITY_ELB}. The query is run against each ELB instance associated with the selected service in the Service Observability UI. The chart displays a time series for each one.| AWS field | Template variable |
|---|---|
Dimensions[n].Value |
The |
StartTime |
START |
EndTime |
END |
Azure advanced queries
You run an advanced query for an Azure-based chart by copying the source from the Azure UI and pasting it in the Advanced query field.
- In the Azure UI, export and download the dashboard.
- Copy the JSON for a single chart. Charts are located at
properties.lenses[i].parts[j].metadata.settings.content.options.chart. - Paste the JSON into the query field. The JSON must include at least the following:
The``` { “metrics”: [ “name”: string, “resourceMetadata”: { “id”: string } ] } ```idfield must be either an Azure resource ID or a template variable.