📈 MetricsSelect CloudWatch Metrics in the Sawmills source picker to ingest CloudWatch metrics delivered to Amazon S3. The collector polls an Amazon SQS queue for object notifications, downloads the objects, and decodes their CloudWatch Metric Streams JSON records into metrics.
The collector makes outbound requests using its own AWS identity, such as an IAM role for a Kubernetes service account (IRSA). This source needs no inbound endpoint, listener port, or shared access key. The pipeline must include a destination that accepts metrics.For AWS resources, IAM policies, and verification steps, see How to send CloudWatch metrics via S3.
AWS Region of the bucket and queue, for example us-west-2. It must match the Region in the queue URL.
S3 Bucket
Yes
Bucket name, for example example-cloudwatch-metrics. Use the name without s3:// or a path.
SQS Queue URL
Yes
Full queue URL, for example https://sqs.us-west-2.amazonaws.com/123456789012/example-cloudwatch-metrics. Use the URL, not the queue ARN.
Key Prefix
No
Literal beginning of the object key, for example cwmetrics/. Empty means no prefix filter. This is not a wildcard or an S3 URI.
The encoding is fixed to CloudWatch Metric Streams JSON (cwmetrics); there is no format selector. Logs, traces, OTLP files, and arbitrary JSON are not supported by this source.The equivalent source configuration data is:
region: us-west-2s3_bucket: example-cloudwatch-metricssqs_queue_url: https://sqs.us-west-2.amazonaws.com/123456789012/example-cloudwatch-metricsencoding: cwmetricss3_prefix: cwmetrics/ # Optional; omit for no prefix filter.
Objects outside the configured bucket or prefix are skipped, and their SQS
notifications are deleted once all records in the message are processed or
skipped. A wrong bucket or prefix can silently lose metrics even while the
queue drains. Prefixes are literal: cwmetrics/ and /cwmetrics/ match
different keys. Correcting the source later does not replay deleted
notifications.
Use a dedicated queue for this source. An unrelated consumer, or another source with a different bucket or prefix, can consume and delete notifications before the intended source receives them.
Grant the AWS role used by the collector pods running this source:
s3:GetObject on the bucket’s metric objects, scoped to the configured prefix when possible.
sqs:ReceiveMessage and sqs:DeleteMessage on the notification queue.
S3 also needs permission to publish notifications to the queue. See the setup guide for the queue policy, collector policy, and encryption considerations.
Use Sawmills Collector v1.1120.0 or later for the behavior below and its drop counters.The receiver accepts native S3 object notifications, either directly or inside an SNS notification. EventBridge message bodies are not supported. A notification is deleted only when all its records have been processed or skipped; a retryable failure retains the whole message.
Condition
Behavior
Metrics accepted by the next pipeline component
Marks the object as processed.
Object outside the configured bucket or prefix
Skips the object.
Invalid SQS JSON
Deletes the message; reason invalid_json.
JSON that is not an S3 or SNS notification, including EventBridge
Deletes the message; reason not_s3_notification.
Invalid SNS payload or no embedded S3 event
Deletes the message; reason invalid_sns_message.
No matching decoder, decompression failure, or decoding failure
Skips the object; reason unsupported_format, decompress_failed, or decode_failed.
S3 download failure, other than NoSuchKey, or an error returned by the next pipeline component
Keeps the entire message for retry after the SQS visibility timeout, including records already processed or skipped.
Object no longer exists (NoSuchKey)
Treats the record as done.
Monitor these collector counters, grouped by their reason label:
otelcol_receiver_awss3_sqs_messages_dropped: unreadable or unsupported notifications.
otelcol_receiver_awss3_objects_dropped: unsupported object formats, decompression failures, and decoding failures.
Both counters increase only after SQS message deletion succeeds. Bucket and prefix mismatches are not included in these counters, so verify actual metrics arrival as well as queue consumption. See Monitor the Collector with Prometheus.Retries can process an object again. Even for successfully decoded objects, queue deletion only confirms that the next pipeline component accepted the data; it is not a guarantee that a remote destination has stored it. Check destination health and collector export errors as part of verification.
The receiver never deletes S3 objects. Set an S3 lifecycle rule on the metrics prefix to expire objects according to your retention policy. Allow enough time for queue backlog, outages, and retries before expiration. An object that expires before the collector downloads it cannot be ingested from its notification.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Sawmills","colors":{"primary":"#554bda","light":"#6459f4","dark":"#554bda"},"logo":{"light":"https://mintcdn.com/sawmills/dbnzD4d7oG61-QQl/logo/light.svg?fit=max\u0026auto=format\u0026n=dbnzD4d7oG61-QQl\u0026q=85\u0026s=a2ede563c243ed0d109008082cf2f363","dark":"https://mintcdn.com/sawmills/dbnzD4d7oG61-QQl/logo/dark.svg?fit=max\u0026auto=format\u0026n=dbnzD4d7oG61-QQl\u0026q=85\u0026s=5fab1358ead4da1876b417c2b5f17977"},"favicon":"https://mintcdn.com/sawmills/F46sh3cTrweQEfKi/favicon.png?fit=max\u0026auto=format\u0026n=F46sh3cTrweQEfKi\u0026q=85\u0026s=d37a758fda3d757063a68048491f05c2","background":{"decoration":"gradient"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Home site","icon":"house","href":"https://www.sawmills.ai/"},{"anchor":"System Status","icon":"gear","href":"https://sawmills.statuspage.io/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sawmills","hasAudioNarration":false,"actualSubdomain":"sawmills","customDomains":["docs.sawmills.ai"],"gitSource":{"type":"github","owner":"sawmills","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ac3cbe2137bb479121be5a8","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Documentation","count":101},{"language":"default","tag":"Pipelines","count":35},{"language":"default","tag":"Processors","count":23},{"language":"default","tag":"Destinations","count":16},{"language":"default","tag":"Sources","count":16},{"language":"default","tag":"Collectors","count":11},{"language":"default","tag":"Administration","count":10},{"language":"default","tag":"Sawmills Agent","count":10},{"language":"default","tag":"How To Guides","count":8},{"language":"default","tag":"Integrations","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@font-face{font-family:'Calsans';src:url('https://cdn.prod.website-files.com/6634ff6de7fe7ca1a1995215/6647d1f5cb72020b70e63d80_CalSans-SemiBold.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}h1,h2,h3,h4,h5{font-family:'Calsans';letter-spacing:normal!important}"}],"page":{"pagePath":"docs/source-cloudwatch-s3","slug":"/docs/source-cloudwatch-s3","pageMetadata":{"title":"CloudWatch Metrics (S3/SQS) Source","description":"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector's AWS identity.","sidebarTitle":"CloudWatch Metrics (S3/SQS)","href":"/docs/source-cloudwatch-s3"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector’s AWS identity.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`supported-data-types`,children:`Supported Data Types`}),`\n`,_jsxs(_components.p,{children:[`📈 `,_jsx(_components.strong,{children:`Metrics`})]}),`\n`,_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`CloudWatch Metrics`}),` in the Sawmills source picker to ingest CloudWatch metrics delivered to Amazon S3. The collector polls an Amazon SQS queue for object notifications, downloads the objects, and decodes their CloudWatch Metric Streams JSON records into metrics.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CloudWatch Metric Stream (JSON)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` → Amazon Data Firehose (Direct PUT, S3 destination, uncompressed)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` → S3 object creation notification → SQS`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` → Sawmills Collector → pipeline → metrics destinations`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The collector makes outbound requests using its own AWS identity, such as an IAM role for a Kubernetes service account (IRSA). This source needs no inbound endpoint, listener port, or shared access key. The pipeline must include a `,_jsx(_components.a,{href:`/docs/pipeline-destinations`,children:`destination that accepts metrics`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For AWS resources, IAM policies, and verification steps, see `,_jsx(_components.a,{href:`/docs/send-metrics-via-cloudwatch-s3`,children:`How to send CloudWatch metrics via S3`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Name`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Name`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Unique source name within Sawmills.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Region`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`AWS Region of the bucket and queue, for example `,_jsx(_components.code,{children:`us-west-2`}),`. It must match the Region in the queue URL.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`S3 Bucket`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Bucket name, for example `,_jsx(_components.code,{children:`example-cloudwatch-metrics`}),`. Use the name without `,_jsx(_components.code,{children:`s3://`}),` or a path.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`SQS Queue URL`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Full queue URL, for example `,_jsx(_components.code,{children:`https://sqs.us-west-2.amazonaws.com/123456789012/example-cloudwatch-metrics`}),`. Use the URL, not the queue ARN.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Key Prefix`}),_jsx(_components.td,{style:{textAlign:`left`},children:`No`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Literal beginning of the object key, for example `,_jsx(_components.code,{children:`cwmetrics/`}),`. Empty means no prefix filter. This is not a wildcard or an S3 URI.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The encoding is fixed to `,_jsx(_components.strong,{children:`CloudWatch Metric Streams JSON`}),` (`,_jsx(_components.code,{children:`cwmetrics`}),`); there is no format selector. Logs, traces, OTLP files, and arbitrary JSON are not supported by this source.`]}),`\n`,_jsx(_components.p,{children:`The equivalent source configuration data is:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`region`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`us-west-2`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`s3_bucket`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example-cloudwatch-metrics`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`sqs_queue_url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://sqs.us-west-2.amazonaws.com/123456789012/example-cloudwatch-metrics`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`encoding`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`cwmetrics`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`s3_prefix`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`cwmetrics/`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Optional; omit for no prefix filter.`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Objects outside the configured bucket or prefix are skipped, and their SQS\nnotifications are deleted once all records in the message are processed or\nskipped. A wrong bucket or prefix can silently lose metrics even while the\nqueue drains. Prefixes are literal: `,_jsx(_components.code,{children:`cwmetrics/`}),` and `,_jsx(_components.code,{children:`/cwmetrics/`}),` match\ndifferent keys. Correcting the source later does not replay deleted\nnotifications.`]})}),`\n`,_jsx(_components.p,{children:`Use a dedicated queue for this source. An unrelated consumer, or another source with a different bucket or prefix, can consume and delete notifications before the intended source receives them.`}),`\n`,_jsx(Heading,{level:`2`,id:`aws-permissions`,children:`AWS permissions`}),`\n`,_jsx(_components.p,{children:`Grant the AWS role used by the collector pods running this source:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`s3:GetObject`}),` on the bucket’s metric objects, scoped to the configured prefix when possible.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sqs:ReceiveMessage`}),` and `,_jsx(_components.code,{children:`sqs:DeleteMessage`}),` on the notification queue.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`S3 also needs permission to publish notifications to the queue. See the `,_jsx(_components.a,{href:`/docs/send-metrics-via-cloudwatch-s3#step-2-allow-s3-to-notify-sqs`,children:`setup guide`}),` for the queue policy, collector policy, and encryption considerations.`]}),`\n`,_jsx(Heading,{level:`2`,id:`processing-retries-and-dropped-data`,children:`Processing, retries, and dropped data`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.strong,{children:`Sawmills Collector v1.1120.0 or later`}),` for the behavior below and its drop counters.`]}),`\n`,_jsx(_components.p,{children:`The receiver accepts native S3 object notifications, either directly or inside an SNS notification. EventBridge message bodies are not supported. A notification is deleted only when all its records have been processed or skipped; a retryable failure retains the whole message.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Condition`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Metrics accepted by the next pipeline component`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Marks the object as processed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Object outside the configured bucket or prefix`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Skips the object.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Invalid SQS JSON`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Deletes the message; reason `,_jsx(_components.code,{children:`invalid_json`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`JSON that is not an S3 or SNS notification, including EventBridge`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Deletes the message; reason `,_jsx(_components.code,{children:`not_s3_notification`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Invalid SNS payload or no embedded S3 event`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Deletes the message; reason `,_jsx(_components.code,{children:`invalid_sns_message`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`No matching decoder, decompression failure, or decoding failure`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Skips the object; reason `,_jsx(_components.code,{children:`unsupported_format`}),`, `,_jsx(_components.code,{children:`decompress_failed`}),`, or `,_jsx(_components.code,{children:`decode_failed`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[`S3 download failure, other than `,_jsx(_components.code,{children:`NoSuchKey`}),`, or an error returned by the next pipeline component`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Keeps the entire message for retry after the SQS visibility timeout, including records already processed or skipped.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[`Object no longer exists (`,_jsx(_components.code,{children:`NoSuchKey`}),`)`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Treats the record as done.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Monitor these collector counters, grouped by their `,_jsx(_components.code,{children:`reason`}),` label:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`otelcol_receiver_awss3_sqs_messages_dropped`}),`: unreadable or unsupported notifications.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`otelcol_receiver_awss3_objects_dropped`}),`: unsupported object formats, decompression failures, and decoding failures.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Both counters increase only after SQS message deletion succeeds. Bucket and prefix mismatches are not included in these counters, so verify actual metrics arrival as well as queue consumption. See `,_jsx(_components.a,{href:`/docs/guide-how-to-monitor-with-prometheus`,children:`Monitor the Collector with Prometheus`}),`.`]}),`\n`,_jsx(_components.p,{children:`Retries can process an object again. Even for successfully decoded objects, queue deletion only confirms that the next pipeline component accepted the data; it is not a guarantee that a remote destination has stored it. Check destination health and collector export errors as part of verification.`}),`\n`,_jsx(Heading,{level:`2`,id:`s3-object-retention`,children:`S3 object retention`}),`\n`,_jsxs(_components.p,{children:[`The receiver `,_jsx(_components.strong,{children:`never deletes S3 objects`}),`. Set an S3 lifecycle rule on the metrics prefix to expire objects according to your retention policy. Allow enough time for queue backlog, outages, and retries before expiration. An object that expires before the collector downloads it cannot be ingested from its notification.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"CloudWatch Metrics (S3/SQS) Source","description":"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector's AWS identity.","sidebarTitle":"CloudWatch Metrics (S3/SQS)","href":"/docs/source-cloudwatch-s3"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Supported Data Types","slug":"supported-data-types","depth":2,"children":[]},{"title":"Configuration","slug":"configuration","depth":2,"children":[]},{"title":"AWS permissions","slug":"aws-permissions","depth":2,"children":[]},{"title":"Processing, retries, and dropped data","slug":"processing-retries-and-dropped-data","depth":2,"children":[]},{"title":"S3 object retention","slug":"s3-object-retention","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/sawmills/1c94b83e43b351cc/.trunk/configs/svgo.config.js"],"subdomain":"sawmills","siteName":"Sawmills","title":"CloudWatch Metrics (S3/SQS) Source - Sawmills","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-24T17:37:54.425Z","originalFileLocation":"docs/source-cloudwatch-s3.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector\u0026#x27;s AWS identity.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Sawmills\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"CloudWatch Metrics (S3/SQS) Source - Sawmills\">\u003cmeta data-mint-head property=\"og:description\" content=\"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector\u0026#x27;s AWS identity.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Sawmills\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.sawmills.ai/docs/source-cloudwatch-s3\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sawmills.mintlify.site/_mintlify/api/og/v2?division=Sources\u0026amp;title=CloudWatch+Metrics+%28S3%2FSQS%29+Source\u0026amp;description=Receive+CloudWatch+Metric+Streams+JSON+from+S3+through+SQS+notifications%2C+using+the+Sawmills+Collector%27s+AWS+identity.\u0026amp;theme=74b56c8e107c12aea787b54d\u0026amp;signature=548d8df5fab172f289030c7710813fc0f0282500eefb80e4eb0ca749103c4925\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"CloudWatch Metrics (S3/SQS) Source - Sawmills\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector\u0026#x27;s AWS identity.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sawmills.mintlify.site/_mintlify/api/og/v2?division=Sources\u0026amp;title=CloudWatch+Metrics+%28S3%2FSQS%29+Source\u0026amp;description=Receive+CloudWatch+Metric+Streams+JSON+from+S3+through+SQS+notifications%2C+using+the+Sawmills+Collector%27s+AWS+identity.\u0026amp;theme=74b56c8e107c12aea787b54d\u0026amp;signature=548d8df5fab172f289030c7710813fc0f0282500eefb80e4eb0ca749103c4925\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/sawmills/JI_aMfA-Sf6KPJp1/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Sawmills\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#554bda\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.sawmills.ai/docs/source-cloudwatch-s3\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/source-cloudwatch-s3.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.sawmills.ai/#organization\",\"name\":\"Sawmills\",\"url\":\"https://docs.sawmills.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sawmills/dbnzD4d7oG61-QQl/logo/light.svg?fit=max\u0026auto=format\u0026n=dbnzD4d7oG61-QQl\u0026q=85\u0026s=a2ede563c243ed0d109008082cf2f363\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.sawmills.ai#website\",\"name\":\"Sawmills\",\"url\":\"https://docs.sawmills.ai\",\"publisher\":{\"@id\":\"https://docs.sawmills.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3#webpage\",\"url\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3\",\"name\":\"CloudWatch Metrics (S3/SQS) Source\",\"description\":\"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector's AWS identity.\",\"dateModified\":\"2026-09-24T17:37:54.425Z\",\"isPartOf\":{\"@id\":\"https://docs.sawmills.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Pipelines\",\"item\":\"https://docs.sawmills.ai/docs/pipeline-management\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sources\",\"item\":\"https://docs.sawmills.ai/docs/pipeline-sources\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"CloudWatch Metrics (S3/SQS) Source\",\"item\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3#article\",\"headline\":\"CloudWatch Metrics (S3/SQS) Source\",\"name\":\"CloudWatch Metrics (S3/SQS) Source\",\"description\":\"Receive CloudWatch Metric Streams JSON from S3 through SQS notifications, using the Sawmills Collector's AWS identity.\",\"url\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sawmills.ai/docs/source-cloudwatch-s3#webpage\"},\"dateModified\":\"2026-09-24T17:37:54.425Z\",\"publisher\":{\"@id\":\"https://docs.sawmills.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.sawmills.ai#website\"}}]}\u003c/script>","siteName":"Sawmills","nav":{"global":{"anchors":[{"anchor":"Home site","icon":"house","href":"https://www.sawmills.ai/"},{"anchor":"System Status","icon":"gear","href":"https://sawmills.statuspage.io/"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Overview","pages":[{"title":"Getting Started with Sawmills","mode":"wide","sidebarTitle":"Getting Started","href":"/docs/getting-started"},{"title":"Installation Guide","sidebarTitle":"Installation Guide","href":"/docs/install-guide"}]},{"group":"Sawmills Agent","pages":[{"title":"Sawmills Agent","mode":"wide","sidebarTitle":"Overview","href":"/docs/sawmills-agent-overview"},{"title":"Conversations","sidebarTitle":"Conversations","href":"/docs/sawmills-agent-conversations"},{"title":"Collaboration","sidebarTitle":"Collaboration","href":"/docs/sawmills-agent-collaboration"},{"title":"Memory","sidebarTitle":"Memory","href":"/docs/sawmills-agent-memory"},{"title":"Skills","sidebarTitle":"Skills","href":"/docs/sawmills-agent-skills"},{"title":"Tasks","sidebarTitle":"Tasks","href":"/docs/sawmills-agent-tasks"},{"title":"Notifications","sidebarTitle":"Notifications","href":"/docs/sawmills-agent-notifications"},{"title":"Roles and Access","sidebarTitle":"Roles and Access","href":"/docs/sawmills-agent-roles"},{"title":"Use Sawmills Agent in Slack","sidebarTitle":"Slack","href":"/docs/sawmills-agent-slack"},{"title":"Instrumentation Reviewer","sidebarTitle":"Instrumentation Reviewer","href":"/docs/sawmills-agent-instrumentation-reviewer"}]},{"group":"Collectors","pages":[{"group":"Overview \u0026 Management","pages":[{"title":"Collector Management","sidebarTitle":"Collector Management","href":"/docs/collector-management"}]},{"group":"Install \u0026 Setup","pages":[{"title":"Installation Guide","sidebarTitle":"Installation Guide","href":"/docs/install-guide"},{"title":"Manual Collector Deployment","sidebarTitle":"Manual Deployment","href":"/docs/manual-collector-deployment"},{"title":"Collector Customization","sidebarTitle":"Collector Customization","href":"/docs/collector-customization"}]},{"group":"Operations","pages":[{"title":"Capacity Planning","sidebarTitle":"Capacity Planning","href":"/docs/installation/capacity-planning"},{"group":"Autoscaling","pages":[{"title":"KEDA External Scaler","href":"/docs/keda-scaler"},{"title":"Autoscale Sawmills Collector with KEDA","sidebarTitle":"Autoscale with KEDA","href":"/docs/guide-how-to-setup-keda"},{"title":"Load Balancer Setup","href":"/docs/load-balancer-setup"}]}]},{"title":"Monitor Sawmills with Prometheus","sidebarTitle":"Monitor","href":"/docs/guide-how-to-monitor-with-prometheus"},{"group":"Networking \u0026 Reliability","pages":[{"title":"Setup fallback endpoint","sidebarTitle":"Setup Fallback Endpoint","href":"/docs/setup-fallback-endpoint-for-sources"},{"title":"Configure Outbound Proxy for Remote Operator and Collector","sidebarTitle":"Outbound Proxy Configuration","href":"/docs/outbound-proxy"}]}]},{"group":"Pipelines","pages":[{"title":"Pipeline Management","sidebarTitle":"Pipeline Management","href":"/docs/pipeline-management"},{"title":"Building Pipelines","mode":"wide","sidebarTitle":"Building a Pipeline","href":"/docs/build-pipelines"},{"title":"Manage an Existing Pipeline","sidebarTitle":"Manage an Existing Pipeline","href":"/docs/pipeline-manage"},{"group":"Sources","pages":[{"title":"Sawmills Pipeline Sources","description":"Browse all supported Sawmills pipeline sources including Datadog, OTLP, Elasticsearch, Fluent Forward, Splunk HEC, Syslog, Prometheus, and more.","sidebarTitle":"Pipeline Sources","href":"/docs/pipeline-sources"},{"title":"CloudWatch Metrics (S3/SQS) Source","sidebarTitle":"CloudWatch Metrics (S3/SQS)","href":"/docs/source-cloudwatch-s3"},{"title":"CloudWatch Metric Streams (Firehose) Source","description":"Configure the CloudWatch Metric Streams source in Sawmills to receive AWS CloudWatch metrics pushed through Amazon Data Firehose over an HTTP endpoint.","href":"/docs/source-cloudwatch-firehose"},{"title":"Datadog Source","href":"/docs/source-datadog"},{"title":"Elasticsearch Source","sidebarTitle":"Elasticsearch Source","href":"/docs/source-elasticsearch"},{"title":"Fluent Forward","href":"/docs/source-fluent-forward"},{"title":"Grafana Loki Source","href":"/docs/source-grafana-loki"},{"group":"New Relic","pages":[{"title":"New Relic Source","href":"/docs/source-new-relic"},{"title":"How to send data from a New Relic Java app","sidebarTitle":"New Relic Java App","href":"/docs/guide-send-data-from-newrelic-java-app"},{"title":"How to send data from a New Relic Python app","sidebarTitle":"New Relic Python App","href":"/docs/guide-send-data-from-newrelic-python-app"},{"title":"Route the New Relic Infrastructure agent through Sawmills","sidebarTitle":"Infrastructure Agent","href":"/docs/guide-send-data-from-newrelic-infrastructure-agent"}]},{"title":"OTLP Source","href":"/docs/source-otlp"},{"title":"Prometheus Source","href":"/docs/source-prometheus"},{"title":"TCP Logs Source","href":"/docs/source-tcplog"},{"title":"Splunk HEC Source","href":"/docs/source-splunk-hec"},{"title":"Syslog Source","href":"/docs/source-syslog"}]},{"group":"Destinations","pages":[{"title":"Sawmills Pipeline Destinations","sidebarTitle":"Pipeline Destinations","href":"/docs/pipeline-destinations"},{"title":"AWS S3 Destination","href":"/docs/destination-aws-s3"},{"title":"Coralogix Destination","href":"/docs/destination-coralogix"},{"title":"Datadog Destination","href":"/docs/destination-datadog"},{"title":"Debug (/dev/null) Destination","href":"/docs/destination-debug"},{"title":"Elasticsearch Destination","href":"/docs/destination-elasticsearch"},{"title":"Grafana Loki Destination","href":"/docs/destination-grafana-loki"},{"title":"New Relic Destination","href":"/docs/destination-new-relic"},{"title":"OTLP Destination","href":"/docs/destination-otlp"},{"title":"Logz.io Destination","href":"/docs/destination-logzio"},{"title":"Snowflake Destination","href":"/docs/destination-snowflake"},{"title":"Splunk HEC Destination","href":"/docs/destination-splunk-hec"},{"title":"Prometheus Destination","href":"/docs/destination-prometheus"},{"title":"S3 Tables Destination","href":"/docs/destination-s3-tables"},{"title":"Google Cloud Storage Destination","href":"/docs/destination-google-cloud-storage"},{"title":"Sumo Logic Destination","href":"/docs/destination-sumologic"}]}]},{"group":"Processors","pages":[{"title":"Processor Management","sidebarTitle":"Processor Management","href":"/docs/processor-management"},{"title":"Create a Processor","sidebarTitle":"Create a Processor","href":"/docs/building-processor"},{"title":"Processor Reordering","sidebarTitle":"Reordering Processors","href":"/docs/processor-reordering"},{"group":"Processors","pages":[{"title":"Sawmills Processors Types","sidebarTitle":"Processors Types","href":"/docs/processors"},{"title":"Aggregation Processor","sidebarTitle":"Aggregation Processor","href":"/docs/processor-aggregation"},{"title":"Filter Processor","sidebarTitle":"Filter Processor","href":"/docs/processor-filter"},{"title":"Mask Sensitive Data/PII Processor","sidebarTitle":"Mask Fields Processor","href":"/docs/processor-mask"},{"title":"Drop Attributes Processor","sidebarTitle":"Drop Attributes Processor","href":"/docs/processor-drop-attribute"},{"title":"Drop Metric Datapoints Processor","sidebarTitle":"Drop Metric Datapoints Processor","href":"/docs/processor-drop-metric-datapoints"},{"title":"Aggregate Metric Labels Processor","sidebarTitle":"Aggregate Metric Labels Processor","href":"/docs/processor-label-aggregation"},{"title":"Modify Attribute Processor","sidebarTitle":"Modify Attribute Processor","href":"/docs/processor-modify-attribute"},{"title":"Parse Log Processor","sidebarTitle":"Parse Log Processor","href":"/docs/processor-parse-logs"},{"title":"Lookup Processor","sidebarTitle":"Lookup Processor","href":"/docs/processor-lookup"}]}]},{"group":"Live Logs","pages":[{"title":"Live Tail","sidebarTitle":"Live Tail","href":"/docs/live-tail"}]},{"group":"Data Insights","pages":[{"title":"Insights","sidebarTitle":"Insights","href":"/docs/insights"},{"title":"Ownership Groups","sidebarTitle":"Ownership Groups","href":"/docs/ownership-groups"}]},{"group":"Analytics Dashboard","pages":[{"title":"Analytics Dashboard","sidebarTitle":"Dashboard","href":"/docs/dashboard"}]},{"group":"How To Guides","pages":[{"title":"How to send data to the Sawmills collector?","sidebarTitle":"Sending Data To The Sawmills Collector","href":"/docs/send-data-to-collector"},{"title":"How to send data from Datadog agent","sidebarTitle":"Datadog Agent Configuration","href":"/docs/send-data-from-datadog-agent"},{"title":"How to send CloudWatch metrics via S3","sidebarTitle":"CloudWatch Metrics via S3","href":"/docs/send-metrics-via-cloudwatch-s3"},{"title":"How to send CloudWatch metrics via Firehose","sidebarTitle":"CloudWatch Metrics via Firehose","href":"/docs/send-metrics-via-cloudwatch-firehose"},{"title":"How to send logs from Vector","sidebarTitle":"Vector Log Configuration","href":"/docs/send-logs-from-vector"},{"title":"How to send logs to VictoriaLogs","sidebarTitle":"Sending Logs To VictoriaLogs","href":"/docs/guide-send-logs-to-victorialogs"},{"title":"How to rehydrate logs to Splunk from S3","sidebarTitle":"Rehydrate Logs To Splunk From S3","href":"/docs/guide-rehydrate-logs-to-splunk-from-s3"},{"title":"How to rehydrate logs to OpenSearch from S3","sidebarTitle":"Rehydrate Logs To OpenSearch From S3","href":"/docs/guide-rehydrate-logs-to-opensearch-from-s3"}]},{"group":"Integrations","pages":[{"title":"Enable GitHub Integration","sidebarTitle":"Enable GitHub Integration","href":"/docs/github-integration"},{"title":"Enable GitLab Integration","sidebarTitle":"Enable GitLab Integration","href":"/docs/gitlab-integration"},{"title":"Enable Datadog Integration","sidebarTitle":"Enable Datadog Integration","href":"/docs/datadog-integration"},{"title":"Enable New Relic Integration","sidebarTitle":"Enable New Relic Integration","href":"/docs/newrelic-integration"},{"title":"Enable Slack Integration","sidebarTitle":"Enable Slack Integration","href":"/docs/slack-integration"},{"title":"Mills Slack installation and demo","href":"/docs/mills-slack-demo"},{"title":"Enable Webhook Integration","sidebarTitle":"Enable Webhook Integration","href":"/docs/webhook-integration"}]},{"group":"CLI","pages":[{"title":"Sawmills CLI","sidebarTitle":"CLI","mode":"wide","href":"/docs/sawmills-cli"}]},{"group":"MCP","pages":[{"title":"Sawmills MCP","sidebarTitle":"MCP","mode":"wide","href":"/docs/sawmills-mcp"}]},{"group":"Administration","pages":[{"group":"User Management","pages":[{"title":"User Management","sidebarTitle":"User Management","href":"/docs/user-management"},{"title":"Configure Invitation Method","sidebarTitle":"Invitation Method","href":"/docs/configure-invitation-method"},{"title":"Invite Users","sidebarTitle":"Invite Users","href":"/docs/user-invite"}]},{"group":"SSO \u0026 Identity Providers","pages":[{"title":"SAML","href":"/docs/saml"},{"title":"OKTA Workforce","href":"/docs/okta-workforce"}]},{"group":"Authentication","pages":[{"title":"API Keys","sidebarTitle":"API Keys","href":"/docs/api-keys"},{"title":"Obtaining Tokens","sidebarTitle":"Tokens","href":"/docs/tokens"},{"title":"Authentication Quick Reference","sidebarTitle":"Quick Reference","href":"/docs/authentication-quick-reference"}]},{"group":"Security","pages":[{"title":"Vulnerability Disclosure","href":"/docs/vulnerability-disclosure"}]},{"group":"Platform","pages":[{"title":"Network Requirements","href":"/docs/network-requirments"}]}]}]},{"tab":"Change Log","pages":[{"title":"Change Log","href":"/changelog/changelog"}]}]},"basePath":"","title":"CloudWatch Metrics (S3/SQS) Source - Sawmills","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":[],"chunks":[]}