Search for AWS adds no ingest volume and no license usage, and the app itself charges nothing per request. What a search can cost is the AWS API behind it. This page says which commands touch a billed API, how the app and its dashboards keep those calls deliberate, and what the app uses on the search head.
What AWS bills
| Command | AWS API | What AWS charges |
|---|---|---|
| awscost | Cost Explorer GetCostAndUsage | About $0.01 per request |
| awslogs query= | CloudWatch Logs Insights | Per GB of log data scanned |
| awslogs filter= | CloudWatch FilterLogEvents | Standard API usage; not billed per GB scanned |
| awsmetrics (a time series) | CloudWatch GetMetricData | Per metric requested, always charged |
| awsmetrics list=true | CloudWatch ListMetrics | Per request, not per metric; counted in the CloudWatch free tier’s monthly API requests |
| awsmetrics alarms=true, | awsmetrics alarms=true history=true | CloudWatch DescribeAlarms, DescribeAlarmHistory | No per-request charge: not among the API requests CloudWatch bills |
| awsathena | Athena | Per TB of data scanned, plus S3 for results |
| awsget, | awscloudtrail, | awstag, | awsglue | Cloud Control, CloudTrail LookupEvents, Resource Groups Tagging, Glue | No per-request charge beyond standard API usage |
Check AWS’s current pricing pages for the exact rates in your region.
How the app keeps calls deliberate
- Cost Explorer waits for you. The Cost & Usage dashboard is submit-gated: nothing runs until you press Submit, so opening the page costs nothing. The one other place that calls it is the Overview’s Spend tab, which runs one query per account (this month and last, by day) when you open that tab, not when the Overview loads. Every other dashboard links to Cost & Usage rather than embedding cost panels.
| awscostruns once per account regardless ofregion=, so a fan-out cannot multiply it, and its results are cached for an hour. - Metrics live on detail dashboards, with a few exceptions. The fleet dashboards (every RDS instance, every queue) show inventory and posture from Cloud Control, and the per-resource CloudWatch panels live on the detail dashboard you open by clicking a row, so metric calls happen for the resource you asked about. The exceptions are the dashboards whose point is the whole fleet: Lambda, whose Fleet Health tab runs six fleet-wide metric queries when the dashboard opens and whose Saturation & Cost tab runs one more; EKS, which runs one; the Overview’s Needs attention tab, four (Lambda errors, the REST and HTTP API 5XX counts, and certificate days to expiry); Edge & certificates, one on its Certificates tab, four on CloudFront, and two on Health checks; EventBridge, three per tab; and SES, six account-level metrics. Almost all of them are Metrics Insights queries - one request each, however many functions, rules, or distributions there are.
- Log tails use
FilterLogEvents. The Log Tail dashboard and the Logs tab on detail dashboards read raw events newest first, capped per fetch, through the API that is not billed per GB scanned. Logs Insights is billed per GB scanned, and it runs in three places: the Logs Insights dashboard you open on purpose, the Lambda detail dashboard, and the Lambda fleet’s Saturation & Cost tab, which scans every/aws/lambda/*group over the selected window when you open that tab. Keep that window short on an account with busy functions. - Nothing runs on a hidden tab. A dashboard tab’s searches dispatch the first time you open the tab, not when the page loads.
- Duplicates come from the cache. Panels on one dashboard that need the same data share one call, and the on-disk cache absorbs the rest - a dashboard refresh within the freshness window is answered from it and costs nothing. The exception is an account on the instance role, which is not cached: every refresh of its panels calls AWS. See Concepts - caching.
Search head footprint
Each search runs the bundled binary, calls AWS, streams results, and exits. The work is transient and tied to the search’s dispatch directory, which Splunk cleans up afterward. There is no always-on process and no background polling of AWS. Two scheduled inputs run every five minutes: the cache sweep, and a health check that posts Splunk messages for license problems and for stored credentials AWS refused on a recent search, and makes no AWS call of its own.
The on-disk cache lives under $SPLUNK_HOME/var/run/os_aws_search/cache on the search head. It holds recent responses with short TTLs, is swept every five minutes, and stays small. Credentials are never cached.
Querying at scale
A few habits keep large queries fast and cheap:
- Scope tightly. Name the
account=andregion=you mean; a fan-out over every account and region runs the command once per pair, and each run makes as many API calls as its results take: one per page, plus one per resource withdetail=true. - Cap broad listings with
limit=. It bounds the rows| awsgetemits, and it boundsdetail=true, which is one extraGetResourcecall per resource. - Use
detail=trueonly when you need it. Many Cloud Control types list only an identifier;detail=truefetches each resource’s full state. Ask for it when a panel needs those fields, not by default. - Tune fan-out with
concurrency=. It caps how many account and region pairs are queried at once (default 8, ceiling 64). The Setup page’s Settings tab changes the default for every search. - Mind the window.
start=andend=bound what CloudTrail, CloudWatch, and Logs Insights scan; a narrower window is both faster and, for Logs Insights, cheaper.| awsathenatakes no window: what Athena scans is decided by the SQL, so bound it there with predicates on the table’s partition columns. - Let the cache work. Add
cache=0only when you need the answer as of this second, for example in a scheduled alert that must not miss a change.