CloudWatch Logs
Configures an AWS CloudWatch Logs input from which to read events to transform into typed TenXObjects.
Instances of this module define a connection to an AWS CloudWatch Logs service from which to retrieve log messages, as well as the querying logic used such as chronological direction, start values, time ranges, and page size of each API request sent.
Cloudwatch Logs inputs commonly run within scheduled jobs (e.g., k8s CronJob) to retrieve a recent sample amount of events (e.g., 200MB in the last 10min) to transform into TenXObjects as part of the Cloud Reporter app.
Configuration
To configure the AWS Cloudwatch Logs input module, Edit these settings.
Below is the default configuration from: cloudwatchLogs/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJpbmNsdWRlIiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAidGVueCIgOiB7CiAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICB9LAogICAgImNsb3Vkd2F0Y2hMb2dzIiA6IHsKICAgICAgInR5cGUiIDogImFycmF5IiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgIm5hbWUiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2dpY2FsIG5hbWUgZm9yIHRoaXMgQVdTIENsb3VkV2F0Y2ggTG9ncyBpbnB1dFxuXG5TZXRzIGEgbG9naWNhbCBuYW1lIChlLmcuLCAnbXlDbG91ZFdhdGNoTG9ncycpIGZvciB0aGlzIGlucHV0LiBUaGUgW2lucHV0TmFtZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhCYXNlT2JqZWN0K2lucHV0TmFtZSkgZmllbGQgIHJldHVybnMgdGhpcyB2YWx1ZSBhdCBydW4gdGltZSB0byBhbGxvdyBmb3IgaWRlbnRpZnlpbmcgYW5kIG9wZXJhdGluZyBvbiBpbnN0YW5jZXMgb3JpZ2luYXRpbmcgZnJvbSB0aGlzIGlucHV0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZW5hYmxlZCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlNldHMgd2hldGhlciB0aGlzIGlucHV0IGlzIGVuYWJsZWRcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGEgJ2Nsb3Vkd2F0Y2hMb2dzTmFtZScgc3RhcnR1cCBhcmd1bWVudCB2YWx1ZSBpcyB0cnV0aHksIHVzZTogYGBgIHlhbWwgY2xvdWR3YXRjaExvZ3NFbmFibGVkOiAkPVRlblhFbnYuZ2V0KFwiY2xvdWR3YXRjaExvZ3NOYW1lXCIpIGBgYCBUbyBsZWFybiBtb3JlIHNlZSBbVGVuWEVudi5nZXRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YRW52LmdldCkuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfSwKICAgICAgICAgICJwcmludFByb2dyZXNzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2V0cyB3aGV0aGVyIHRoaXMgaW5wdXQgcHJpbnRzIHRocm91Z2hwdXQgc3RhdHMgdG8gdGhlIGNvbnNvbGVcblxuU2V0cyB3aGV0aGVyIHRoaXMgaW5wdXQgcHJpbnRzIHRocm91Z2hwdXQgc3RhdHMgdG8gdGhlIGNvbnNvbGUgZm9yIHRlc3RpbmcgYW4gaW50ZWdyYXRpb24gdG8gYSByZW1vdGUgZW5kcG9pbnQuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgICAgfSwKICAgICAgICAgICJhd3NSZWdpb24iIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBV1MgcmVnaW9uXG5cblNldHMgdGhlIEFXUyByZWdpb24gKGUuZy4sICd1cy1lYXN0LTEnKSBob3N0aW5nIHRoZSB0YXJnZXQgQ2xvdWRXYXRjaCBsb2dzIHN0cmVhbS4gICBUbyBsZWFybiBtb3JlIHNlZSBbQVdTIFJlZ2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1yZWdpb25zLWF2YWlsYWJpbGl0eS16b25lcy5odG1sKSIKICAgICAgICAgIH0sCiAgICAgICAgICAiYXdzQWNjZXNzS2V5SUQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBV1MgYXV0aGVudGljYXRpb24gYWNjZXNzIGtleSBJRFxuXG5TZXRzIHRoZSBBV1MgYWNjZXNzIGtleSAoZS5nLiwgJ0FLSUFJT1NGT0ROTjdFWEFNUExFJykgdXNlZCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0IHNpZ25pbmcgcHJvY2Vzcy4gICoqSWYgbm90IHNwZWNpZmllZCoqLCB0aGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZmFsbHMgYmFjayB0byB0aGUgW0FXUyBkZWZhdWx0IGNyZWRlbnRpYWwgcHJvdmlkZXIgY2hhaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZGstZm9yLWphdmEvbGF0ZXN0L2RldmVsb3Blci1ndWlkZS9jcmVkZW50aWFscy1jaGFpbi5odG1sKSwgd2hpY2ggY2hlY2tzIChpbiBvcmRlcik6ICAxLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKGBBV1NfQUNDRVNTX0tFWV9JRGAsIGBBV1NfU0VDUkVUX0FDQ0VTU19LRVlgKSAyLiBKYXZhIHN5c3RlbSBwcm9wZXJ0aWVzIDMuIFdlYiBpZGVudGl0eSB0b2tlbiAoZm9yIEVLUykgNC4gU2hhcmVkIGNyZWRlbnRpYWxzIGZpbGUgKGB+Ly5hd3MvY3JlZGVudGlhbHNgKSA1LiBFQ1MgY29udGFpbmVyIGNyZWRlbnRpYWxzIDYuIEVDMiBpbnN0YW5jZSBwcm9maWxlIGNyZWRlbnRpYWxzICBUbyBsZWFybiBtb3JlIHNlZSBbQVdTIGFjY2VzcyBrZXlzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvaWRfY3JlZGVudGlhbHNfYWNjZXNzLWtleXMuaHRtbCkiCiAgICAgICAgICB9LAogICAgICAgICAgImF3c1NlY3JldEtleSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkFXUyBhdXRoZW50aWNhdGlvbiBzZWNyZXQga2V5XG5cblNldHMgdGhlIEFXUyBhY2Nlc3Mgc2VjcmV0IGtleSAoZS5nLiAnd0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWScpIHVzZWQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdCBzaWduaW5nIHByb2Nlc3MuICAqKklmIG5vdCBzcGVjaWZpZWQqKiwgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGZhbGxzIGJhY2sgdG8gdGhlIFtBV1MgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyIGNoYWluXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2RrLWZvci1qYXZhL2xhdGVzdC9kZXZlbG9wZXItZ3VpZGUvY3JlZGVudGlhbHMtY2hhaW4uaHRtbCkuIFRoaXMgYWxsb3dzIHVzaW5nIGNyZWRlbnRpYWxzIGZyb20gYH4vLmF3cy9jcmVkZW50aWFsc2AsIElBTSByb2xlcywgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGhvdXQgZXhwbGljaXQgY29uZmlndXJhdGlvbi4gIFRvIGxlYXJuIG1vcmUgc2VlIFtBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hd3Mtc2VjLWNyZWQtdHlwZXMuaHRtbCkiCiAgICAgICAgICB9LAogICAgICAgICAgImdyb3VwTmFtZSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkFXUyBDbG91ZFdhdGNoIExvZ3MgR3JvdXAgbmFtZVxuXG5Vc2VkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgJ0dldExvZ0V2ZW50cycgQVdTIHJlcXVlc3QgdG8gc3BlY2lmeSB0aGUgbG9nIGdyb3VwIG5hbWUgKGUuZy4sICdteS1sb2ctZ3JvdXAnKS4gICBUbyBsZWFybiBtb3JlIHNlZSBbbG9nR3JvdXBOYW1lXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaExvZ3MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0TG9nRXZlbnRzLmh0bWwjQ1dMLUdldExvZ0V2ZW50cy1yZXF1ZXN0LWxvZ0dyb3VwTmFtZSkiCiAgICAgICAgICB9LAogICAgICAgICAgInN0cmVhbU5hbWUiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBV1MgQ2xvdWRXYXRjaCBMb2dzIFN0cmVhbSBuYW1lXG5cblVzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBBV1MgJ0FHZXRMb2dFdmVudHMnIHJlcXVlc3QgdG8gc3BlY2lmeSB0aGUgbG9nIHN0cmVhbSBuYW1lIChlLmcuLCAnbXktbG9nLXN0cmVhbScpLiAgVG8gbGVhcm4gbW9yZSBzZWUgW2xvZ1N0cmVhbU5hbWVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoTG9ncy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRMb2dFdmVudHMuaHRtbCNDV0wtR2V0TG9nRXZlbnRzLXJlcXVlc3QtbG9nU3RyZWFtTmFtZSkiCiAgICAgICAgICB9LAogICAgICAgICAgImxpbWl0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOdW1iZXIgb2YgZXZlbnRzIHRvIHJlYWQgcGVyIGJhdGNoIGZyb20gdGhlIEFXUyBDbG91ZFdhdGNoIExvZ3Mgc2VydmljZVxuXG5TZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHJldHJpZXZlIHdpdGggZWFjaCBwYWdlIG9mIHJlc3VsdHMuIFRvIGxlYXJuIG1vcmUgc2VlOiBbcmVxdWVzdCBsaW1pdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2hMb2dzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldExvZ0V2ZW50cy5odG1sI0NXTC1HZXRMb2dFdmVudHMtcmVxdWVzdC1saW1pdCkgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNTAwKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6IDUwMAogICAgICAgICAgfSwKICAgICAgICAgICJuZXh0VG9rZW4iIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgdG9rZW4gZm9yIHRoZSBuZXh0IHNldCBvZiBpdGVtcyB0byByZXR1cm4gKHJlY2VpdmVkIHRoaXMgdG9rZW4gZnJvbSBhIHByZXZpb3VzIGNhbGwpXG5cblNldHMgdGhlIHRva2VuIGZyb20gd2hpY2ggdGhlIHJlcXVlc3RlZCByZXN1bHQgcGFnZSBpcyB0byBzdGFydC4gVGhpcyB2YWx1ZSBpcyByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byB0aGUgQVdTICdHZXRMb2dFdmVudHMnIGNvbW1hbmQuIFRvIGxlYXJuIG1vcmUgc2VlOiBbbmV4dFRva2VuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaExvZ3MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0TG9nRXZlbnRzLmh0bWwjQ1dMLUdldExvZ0V2ZW50cy1yZXF1ZXN0LW5leHRUb2tlbikiCiAgICAgICAgICB9LAogICAgICAgICAgInN0YXJ0RnJvbUhlYWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJZiB0cnVlLCByZXR1cm4gdGhlIGVhcmxpZXN0IGxvZyBldmVudHMgZmlyc3QuIElmIGZhbHNlLCByZXR1cm4gdGhlIG1vc3QgcmVjZW50IGxvZyBldmVudHMgZmlyc3QuXG5cbkNvbnRyb2xzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNlYXJjaCAob2xkIDwtPiBuZXcgZXZlbnRzKS4gQnkgZGVmYXVsdCwgdGhlIHNlYXJjaCBzdGFydHMgZnJvbSB0aGUgbW9zdCByZWNlbnQgZXZlbnRzLiBUbyBsZWFybiBtb3JlIHNlZTogW3N0YXJ0RnJvbUhlYWRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoTG9ncy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRMb2dFdmVudHMuaHRtbCNDV0wtR2V0TG9nRXZlbnRzLXJlcXVlc3Qtc3RhcnRGcm9tSGVhZCkgKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgICB9LAogICAgICAgICAgInN0YXJ0VGltZSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGhlIHN0YXJ0IG9mIHRoZSB0aW1lIHJhbmdlLCBleHByZXNzZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgSmFuIDEsIDE5NzAgMDA6MDA6MDAgVVRDLlxuXG5TZXRzIHRoZSBzdGFydCBvZiB0aGUgdGltZSByYW5nZSwgZXhwcmVzc2VkIGFzIG1pbGxpc2Vjb25kcyBhZnRlciBKYW4gMSwgMTk3MCAwMDowMDowMCBVVEMuIEV2ZW50cyB3aXRoIGEgdGltZXN0YW1wIGVxdWFsIHRvIHRoaXMgdGltZSBvciBsYXRlciB0aGFuIHRoaXMgdGltZSBhcmUgaW5jbHVkZWQuIEV2ZW50cyB3aXRoIGEgdGltZXN0YW1wIGVhcmxpZXIgdGhhbiB0aGlzIHRpbWUgYXJlIGV4Y2x1ZGVkOiBUbyBsZWFybiBtb3JlIHNlZTogW3N0YXJ0VGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2hMb2dzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldExvZ0V2ZW50cy5odG1sI0NXTC1HZXRMb2dFdmVudHMtcmVxdWVzdC1zdGFydFRpbWUpIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImVuZFRpbWUiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRoZSBlbmQgb2YgdGhlIHRpbWUgcmFuZ2UsIGV4cHJlc3NlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhZnRlciBKYW4gMSwgMTk3MCAwMDowMDowMCBVVENcblxuU2V0cyB0aGUgZW5kIG9mIHRoZSB0aW1lIHJhbmdlLCBleHByZXNzZWQgYXMgbWlsbGlzZWNvbmRzIGFmdGVyIEphbiAxLCAxOTcwIDAwOjAwOjAwIFVUQy4gRXZlbnRzIHdpdGggYSB0aW1lc3RhbXAgZXF1YWwgdG8gb3IgbGF0ZXIgdGhhbiB0aGlzIHRpbWUgYXJlIG5vdCBpbmNsdWRlZDogVG8gbGVhcm4gbW9yZSBzZWU6IFtlbmRUaW1lXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaExvZ3MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0TG9nRXZlbnRzLmh0bWwjQ1dMLUdldExvZ0V2ZW50cy1yZXF1ZXN0LWVuZFRpbWUpIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgInJldHJ5VGltZW91dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSB0aW1lb3V0IHBlcmlvZCAoaW4gbWlsbGlzZWNvbmRzKSB0byB3YWl0IGZvciBxdWVyeWluZyBvZiBuZXcgZGF0YVxuXG5Vc2VkIGJ5IFtjbG91ZHdhdGNoTG9ncy1pbnB1dC5qc10oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvbW9kdWxlcy9ibG9iL21haW4vcGlwZWxpbmVzL3J1bi9tb2R1bGVzL2lucHV0L2FuYWx5emVyL2Nsb3Vkd2F0Y2hMb2dzL2Nsb3Vkd2F0Y2hMb2dzLWlucHV0LmpzKSB0byBkZXRlcm1pbmUgaG93IGxvbmcgdG8gd2FpdCB0byBpbnZva2UgdGhlICdHZXRMb2dFdmVudHMnIEFQSSBhZ2FpbiB0byBxdWVyeSBmb3IgbmV3IGRhdGEuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDIwMDAwKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6IDIwMDAwCiAgICAgICAgICB9LAogICAgICAgICAgInRvdGFsQnl0ZXNMaW1pdCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4aW11bSB0b3RhbCBieXRlcyB0byByZWFkIGZyb20gaW5wdXQgYmVmb3JlIGNsb3NpbmdcblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgYSB0YXJnZXQgcGlwZWxpbmUgaW5wdXQgd2lsbCByZWFkIGludG8gdGhlIHBpcGVsaW5lLiBUaGlzIHZhbHVlIGxpbWl0cyB0aGUgdm9sdW1lIG9mIGV2ZW50cyB0byByZWFkIGZyb20gYSBsb2NhbC9yZW1vdGUgc291cmNlIChlLmcuLCBsb2cgYW5hbHl6ZXIpLiAgIEZvciBleGFtcGxlOiBgYGAgeWFtbCB0b3RhbEJ5dGVzTGltaXQ6ICQ9cGFyc2VCeXRlcyhcIjFHQlwiKSBgYGAgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxFdmVudHNMaW1pdCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4aW11bSB0b3RhbCBldmVudHMgdG8gcmVhZCBmcm9tIGlucHV0IGJlZm9yZSBjbG9zaW5nXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBhIHRhcmdldCBwaXBlbGluZSBpbnB1dCB3aWxsIHJlYWQgaW50byB0aGUgcGlwZWxpbmUuIFRoaXMgdmFsdWUgbGltaXRzIHRoZSB2b2x1bWUgb2YgZXZlbnRzIHRvIHJlYWQgZnJvbSBhIGxvY2FsL3JlbW90ZSBzb3VyY2UgKGUuZy4sIGxvZyBhbmFseXplcikuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDEwMDAwKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6IDEwMDAwCiAgICAgICAgICB9LAogICAgICAgICAgInRvdGFsRHVyYXRpb24iIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIGR1cmF0aW9uIHRvIGtlZXAgaW5wdXQgb3BlbiBiZWZvcmUgY2xvc2luZ1xuXG5TZXRzIHRoZSBtYXhpbXVtIGR1cmF0aW9uIGEgdGFyZ2V0IHBpcGVsaW5lIGlucHV0IHdpbGwgcmVtYWluIG9wZW4uIFdoZW4gcmVhY2hlZCwgdGhlIGlucHV0IHdpbGwgY2xvc2UgYW5kIG5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlYWQuICBGb3IgZXhhbXBsZTogYGBgIHlhbWwgY2xvdWR3YXRjaExvZ3NUb3RhbER1cmF0aW9uOiAkPXBhcnNlRHVyYXRpb24oXCIxMG1pblwiKSBgYGAgKERlZmF1bHQ6IHBhcnNlRHVyYXRpb24oXCI1bWluXCIpKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6ICJwYXJzZUR1cmF0aW9uKFwiNW1pblwiKSIKICAgICAgICAgIH0sCiAgICAgICAgICAicXVlcnlJbnRlcnZhbCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUXVlcnkgaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgZm9yIGNoZWNraW5nIG5ldyBkYXRhIGZyb20gcmVtb3RlIHNvdXJjZVxuXG5TZXRzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHF1ZXJpZXMgdG8gdGhlIHJlbW90ZSBDbG91ZFdhdGNoIExvZ3MgQVBJLiBUaGlzIGNvbnRyb2xzIGhvdyBmcmVxdWVudGx5IHRoZSBpbnB1dCBwb2xscyBmb3IgbmV3IGxvZyBkYXRhLiAgRm9yIGV4YW1wbGU6IGBgYCB5YW1sIGNsb3Vkd2F0Y2hMb2dzUXVlcnlJbnRlcnZhbDogJD1wYXJzZUR1cmF0aW9uKFwiNXNcIikgYGBgIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDIwMDApIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogMjAwMAogICAgICAgICAgfSwKICAgICAgICAgICJtZXNzYWdlRmllbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJKU09OIGZpZWxkIG5hbWUgdG8gZXh0cmFjdCBmcm9tIENsb3VkV2F0Y2ggbG9nIG1lc3NhZ2VzXG5cblNldHMgdGhlIEpTT04gZmllbGQgbmFtZSB0byBleHRyYWN0IGZyb20gZWFjaCBDbG91ZFdhdGNoIGxvZyBtZXNzYWdlLiBXaGVuIHNldCwgdGhlIGV4dHJhY3RvciB3aWxsIGxvb2sgZm9yIHRoaXMgZmllbGQgaW4gZWFjaCBtZXNzYWdlJ3MgSlNPTiBwYXlsb2FkLiBXaGVuIGVtcHR5LCB0aGUgbWVzc2FnZSBleHRyYWN0aW9uIHN0ZXAgaXMgc2tpcHBlZC4gIEZvciBleGFtcGxlLCB0byBleHRyYWN0IHRoZSAnbG9nJyBmaWVsZCBmcm9tIEt1YmVybmV0ZXMvRG9ja2VyIGxvZ3M6IGBgYCB5YW1sIG1lc3NhZ2VGaWVsZDogbG9nIGBgYCAoRGVmYXVsdDogKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6ICIiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiIDogWwogICAgICAgICAgIm5hbWUiLAogICAgICAgICAgImdyb3VwTmFtZSIsCiAgICAgICAgICAic3RyZWFtTmFtZSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'run' AWS CloudWatch Logs input configuration
# Configure an AWS CloudWatch Logs event input
# To learn more see https://doc.log10x.com/run/input/analyzer/cloudwatchLogs/
# Set the 10x pipeline to 'run'
tenx: run
# =============================== Dependencies ================================
include: run/modules/input/analyzer/cloudwatchLogs
# ============================ CloudWatch Options =============================
# Multiple CloudWatch inputs can be defined below
cloudwatchLogs:
# 'name' sets a unique logical name across all pipeline inputs
- name: CloudwatchLogs
# --------------------------- Connection Options --------------------------
# 'awsAccessKeyID' sets the AWS access key (e.g. 'AKIAIOSFODNN7EXAMPLE')
# To learn more see: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html
awsAccessKeyID: $=TenXEnv.get("AWS_ACCESS_KEY_ID") # (❗ EnvVar REQUIRED)
# 'awsSecretKey' sets the AWS access secret key (e.g. 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY')
# To learn more see: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html
awsSecretKey: $=TenXEnv.get("AWS_SECRET_ACCESS_KEY") # (❗ EnvVar REQUIRED)
# 'groupName' sets the log group name (e.g., 'my-log-group').
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-logGroupName
groupName: "" # (❗ REQUIRED)
# 'streamName' sets the log stream name (e.g., 'my-log-stream').
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-logStreamName
streamName: "" # (❗ REQUIRED)
# 'awsRegion' sets the region hosting the CloudWatch Logs stream
# To learn more see: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
awsRegion: $=TenXEnv.get("AWS_DEFAULT_REGION", "us-east-1")
# ----------------------------- Query Options -----------------------------
# 'limit' sets the number of documents retrieved with each results page.
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-limit
limit: 500
# 'startFromHead' controls the direction of the search (old <-> new events).
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-startFromHead
startFromHead: true
# 'startTime' sets the start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
# The search includes events with a timestamp equal to or later than this value.
# The search excludes events with a timestamp earlier than this value.
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-startTime
startTime: $=now("-240h")
# 'endTime' sets the end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
# The search excludes events with a timestamp equal to or later than this value.
# To learn more see: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html#CWL-GetLogEvents-request-endTime
endTime: $=now()
# --------------------------- Backpressure Options -----------------------
# 'queryInterval' sets the interval between queries to the remote API
queryInterval: $=parseDuration("2s")
# 'totalDuration' sets the max duration to try reading from the the remote input
totalDuration: $=parseDuration("5min")
# 'totalBytesLimit' sets the max total bytes to read from the remote input
totalBytesLimit: $=parseBytes("50MB")
# 'totalEventsLimit' sets the max number of events to read the remote input
totalEventsLimit: 10000
# --------------------------- Ancillary Options ---------------------------
# 'printProgress' controls whether to print a gage to the console
# This option helps debug and test the input
printProgress: $=!TenXEnv.get("quiet")
# 'messageField' sets the JSON field to extract from CloudWatch log messages
# For K8s/Docker logs with 10x encoding, use 'log' to extract the encoded log field
messageField: log
Options
Specify the options below to configure multiple AWS Cloudwatch Logs input:
| Name | Description | Category |
|---|---|---|
| cloudwatchLogsName | Logical name for this AWS CloudWatch Logs input | General |
| cloudwatchLogsEnabled | Sets whether this input is enabled | General |
| cloudwatchLogsPrintProgress | Sets whether this input prints throughput stats to the console | General |
| cloudwatchLogsAwsRegion | AWS region | Authentication |
| cloudwatchLogsAwsAccessKeyID | AWS authentication access key ID | Authentication |
| cloudwatchLogsAwsSecretKey | AWS authentication secret key | Authentication |
| cloudwatchLogsGroupName | AWS CloudWatch Logs Group name | Log group |
| cloudwatchLogsStreamName | AWS CloudWatch Logs Stream name | Log group |
| cloudwatchLogsLimit | Number of events to read per batch from the AWS CloudWatch Logs service | Query |
| cloudwatchLogsNextToken | The token for the next set of items to return (received this token from a previous call) | Query |
| cloudwatchLogsStartFromHead | If true, return the earliest log events first. If false, return the most recent log events first. | Query |
| cloudwatchLogsStartTime | The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. | Query |
| cloudwatchLogsEndTime | The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC | Query |
| cloudwatchLogsRetryTimeout | A timeout period (in milliseconds) to wait for querying of new data | Query |
| cloudwatchLogsTotalBytesLimit | Maximum total bytes to read from input before closing | Backpressure |
| cloudwatchLogsTotalEventsLimit | Maximum total events to read from input before closing | Backpressure |
| cloudwatchLogsTotalDuration | Maximum duration to keep input open before closing | Backpressure |
| cloudwatchLogsQueryInterval | Query interval (in milliseconds) for checking new data from remote source | Backpressure |
| cloudwatchLogsMessageField | JSON field name to extract from CloudWatch log messages | Extraction |
General
cloudwatchLogsName
Logical name for this AWS CloudWatch Logs input.
| Type | Required | Category |
|---|---|---|
| String | ✔ | General |
Sets a logical name (e.g., 'myCloudWatchLogs') for this input. The inputName field returns this value at run time to allow for identifying and operating on instances originating from this input.
cloudwatchLogsEnabled
Sets whether this input is enabled.
| Type | Default | Category |
|---|---|---|
| Boolean | false | General |
Sets whether to open the input stream. To enable this input only when a 'cloudwatchLogsName' startup argument value is truthy, use:
To learn more see TenXEnv.get.
cloudwatchLogsPrintProgress
Sets whether this input prints throughput stats to the console.
| Type | Default | Category |
|---|---|---|
| Boolean | false | General |
Sets whether this input prints throughput stats to the console for testing an integration to a remote endpoint.
Authentication
cloudwatchLogsAwsRegion
AWS region.
| Type | Default | Category |
|---|---|---|
| String | "" | Authentication |
Sets the AWS region (e.g., 'us-east-1') hosting the target CloudWatch logs stream.
To learn more see AWS Regions.
cloudwatchLogsAwsAccessKeyID
AWS authentication access key ID.
| Type | Default | Category |
|---|---|---|
| String | "" | Authentication |
Sets the AWS access key (e.g., 'AKIAIOSFODNN7EXAMPLE') used as part of the request signing process.
If not specified, the system automatically falls back to the AWS default credential provider chain, which checks (in order):
- Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - Java system properties
- Web identity token (for EKS)
- Shared credentials file (
~/.aws/credentials) - ECS container credentials
- EC2 instance profile credentials
To learn more see AWS access keys.
cloudwatchLogsAwsSecretKey
AWS authentication secret key.
| Type | Default | Category |
|---|---|---|
| String | "" | Authentication |
Sets the AWS access secret key (e.g. 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY') used as part of the request signing process.
If not specified, the system automatically falls back to the
AWS default credential provider chain.
This allows using credentials from ~/.aws/credentials, IAM roles, or environment variables
without explicit configuration.
To learn more see AWS security credentials.
Log group
cloudwatchLogsGroupName
AWS CloudWatch Logs Group name.
| Type | Required | Category |
|---|---|---|
| String | ✔ | Log group |
Used within the body of the 'GetLogEvents' AWS request to specify the log group name (e.g., 'my-log-group').
To learn more see logGroupName.
cloudwatchLogsStreamName
AWS CloudWatch Logs Stream name.
| Type | Required | Category |
|---|---|---|
| String | ✔ | Log group |
Used within the body of the AWS 'AGetLogEvents' request to specify the log stream name (e.g., 'my-log-stream').
To learn more see logStreamName.
Query
cloudwatchLogsLimit
Number of events to read per batch from the AWS CloudWatch Logs service.
| Type | Default | Category |
|---|---|---|
| Number | 500 | Query |
Sets the number of documents to retrieve with each page of results. To learn more see: request limit.
cloudwatchLogsNextToken
The token for the next set of items to return (received this token from a previous call).
| Type | Default | Category |
|---|---|---|
| String | "" | Query |
Sets the token from which the requested result page is to start. This value is returned from a previous call to the AWS 'GetLogEvents' command. To learn more see: nextToken.
cloudwatchLogsStartFromHead
If true, return the earliest log events first. If false, return the most recent log events first.
| Type | Default | Category |
|---|---|---|
| Boolean | false | Query |
Controls the direction of the search (old \<-> new events). By default, the search starts from the most recent events. To learn more see: startFromHead.
cloudwatchLogsStartTime
The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
| Type | Default | Category |
|---|---|---|
| Number | 0 | Query |
Sets the start of the time range, expressed as milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a timestamp equal to this time or later than this time are included. Events with a timestamp earlier than this time are excluded: To learn more see: startTime.
cloudwatchLogsEndTime
The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
| Type | Default | Category |
|---|---|---|
| Number | 0 | Query |
Sets the end of the time range, expressed as milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a timestamp equal to or later than this time are not included: To learn more see: endTime.
cloudwatchLogsRetryTimeout
A timeout period (in milliseconds) to wait for querying of new data.
| Type | Default | Category |
|---|---|---|
| Number | 20000 | Query |
Used by cloudwatchLogs-input.js to determine how long to wait to invoke the 'GetLogEvents' API again to query for new data.
Backpressure
cloudwatchLogsTotalBytesLimit
Maximum total bytes to read from input before closing.
| Type | Default | Category |
|---|---|---|
| Number | 50000000 | Backpressure |
sets the maximum number of bytes a target pipeline input will read into the pipeline. This value limits the volume of events to read from a local/remote source (e.g., log analyzer).
For example:
cloudwatchLogsTotalEventsLimit
Maximum total events to read from input before closing.
| Type | Default | Category |
|---|---|---|
| Number | 10000 | Backpressure |
Sets the maximum number of events a target pipeline input will read into the pipeline. This value limits the volume of events to read from a local/remote source (e.g., log analyzer).
cloudwatchLogsTotalDuration
Maximum duration to keep input open before closing.
| Type | Default | Category |
|---|---|---|
| String | parseDuration("5min") | Backpressure |
sets the maximum duration a target pipeline input will remain open. When reached, the input will close and no more data will be read.
For example:
cloudwatchLogsQueryInterval
Query interval (in milliseconds) for checking new data from remote source.
| Type | Default | Category |
|---|---|---|
| Number | 2000 | Backpressure |
sets the interval between queries to the remote CloudWatch Logs API. This controls how frequently the input polls for new log data.
For example:
Extraction
cloudwatchLogsMessageField
JSON field name to extract from CloudWatch log messages.
| Type | Default | Category |
|---|---|---|
| String | Extraction |
sets the JSON field name to extract from each CloudWatch log message. When set, the extractor will look for this field in each message's JSON payload. When empty, the message extraction step is skipped.
For example, to extract the 'log' field from Kubernetes/Docker logs:
This module is defined in cloudwatchLogs/module.yaml.