diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets.json new file mode 100644 index 0000000000000..24036f760efde --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.24", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/LogGroupMetricsDefaultTestDeployAssertF61C3BCA.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.assets.json new file mode 100644 index 0000000000000..6a78a3c3be119 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.24", + "files": { + "ad8c4f6a20b1f148d1e63951d027301ce28de807ae5efd3ebe16d88c5986cc5d": { + "source": { + "path": "aws-cdk-log-group-metrics.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "ad8c4f6a20b1f148d1e63951d027301ce28de807ae5efd3ebe16d88c5986cc5d.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.template.json new file mode 100644 index 0000000000000..6f9c5d58e9636 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/aws-cdk-log-group-metrics.template.json @@ -0,0 +1,71 @@ +{ + "Resources": { + "MyLogGroup5C0DAD85": { + "Type": "AWS::Logs::LogGroup", + "Properties": { + "LogGroupName": "my-log-group", + "RetentionInDays": 731 + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "IncomingBytesPerInstanceAlarmFA8EEFDB": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "EvaluationPeriods": 1, + "MetricName": "IncomingBytes", + "Namespace": "AWS/LogGroup", + "Period": 300, + "Statistic": "Average", + "Threshold": 1 + } + }, + "IncomingEventsPerInstanceAlarmA9670D55": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "EvaluationPeriods": 1, + "MetricName": "IncomingLogs", + "Namespace": "AWS/LogGroup", + "Period": 300, + "Statistic": "Average", + "Threshold": 1 + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/cdk.out new file mode 100644 index 0000000000000..4efaa16f29af9 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.24"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/integ.json new file mode 100644 index 0000000000000..5356794be480d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "36.0.24", + "testCases": { + "LogGroupMetrics/DefaultTest": { + "stacks": [ + "aws-cdk-log-group-metrics" + ], + "assertionStack": "LogGroupMetrics/DefaultTest/DeployAssert", + "assertionStackName": "LogGroupMetricsDefaultTestDeployAssertF61C3BCA" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/manifest.json new file mode 100644 index 0000000000000..54653c72a1a35 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/manifest.json @@ -0,0 +1,125 @@ +{ + "version": "36.0.24", + "artifacts": { + "aws-cdk-log-group-metrics.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-cdk-log-group-metrics.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-cdk-log-group-metrics": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-cdk-log-group-metrics.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/ad8c4f6a20b1f148d1e63951d027301ce28de807ae5efd3ebe16d88c5986cc5d.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-cdk-log-group-metrics.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "aws-cdk-log-group-metrics.assets" + ], + "metadata": { + "/aws-cdk-log-group-metrics/MyLogGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyLogGroup5C0DAD85" + } + ], + "/aws-cdk-log-group-metrics/IncomingBytesPerInstanceAlarm/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "IncomingBytesPerInstanceAlarmFA8EEFDB" + } + ], + "/aws-cdk-log-group-metrics/IncomingEventsPerInstanceAlarm/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "IncomingEventsPerInstanceAlarmA9670D55" + } + ], + "/aws-cdk-log-group-metrics/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-log-group-metrics/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-cdk-log-group-metrics" + }, + "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "LogGroupMetricsDefaultTestDeployAssertF61C3BCA": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "LogGroupMetricsDefaultTestDeployAssertF61C3BCA.assets" + ], + "metadata": { + "/LogGroupMetrics/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/LogGroupMetrics/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "LogGroupMetrics/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/tree.json new file mode 100644 index 0000000000000..77bcf3ddb3071 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.js.snapshot/tree.json @@ -0,0 +1,186 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-cdk-log-group-metrics": { + "id": "aws-cdk-log-group-metrics", + "path": "aws-cdk-log-group-metrics", + "children": { + "MyLogGroup": { + "id": "MyLogGroup", + "path": "aws-cdk-log-group-metrics/MyLogGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-group-metrics/MyLogGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Logs::LogGroup", + "aws:cdk:cloudformation:props": { + "logGroupName": "my-log-group", + "retentionInDays": 731 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogGroup", + "version": "0.0.0" + } + }, + "IncomingBytesPerInstanceAlarm": { + "id": "IncomingBytesPerInstanceAlarm", + "path": "aws-cdk-log-group-metrics/IncomingBytesPerInstanceAlarm", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-group-metrics/IncomingBytesPerInstanceAlarm/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudWatch::Alarm", + "aws:cdk:cloudformation:props": { + "comparisonOperator": "GreaterThanOrEqualToThreshold", + "evaluationPeriods": 1, + "metricName": "IncomingBytes", + "namespace": "AWS/LogGroup", + "period": 300, + "statistic": "Average", + "threshold": 1 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.CfnAlarm", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.Alarm", + "version": "0.0.0" + } + }, + "IncomingEventsPerInstanceAlarm": { + "id": "IncomingEventsPerInstanceAlarm", + "path": "aws-cdk-log-group-metrics/IncomingEventsPerInstanceAlarm", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-group-metrics/IncomingEventsPerInstanceAlarm/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudWatch::Alarm", + "aws:cdk:cloudformation:props": { + "comparisonOperator": "GreaterThanOrEqualToThreshold", + "evaluationPeriods": 1, + "metricName": "IncomingLogs", + "namespace": "AWS/LogGroup", + "period": 300, + "statistic": "Average", + "threshold": 1 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.CfnAlarm", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.Alarm", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-log-group-metrics/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-log-group-metrics/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "LogGroupMetrics": { + "id": "LogGroupMetrics", + "path": "LogGroupMetrics", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "LogGroupMetrics/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "LogGroupMetrics/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "LogGroupMetrics/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "LogGroupMetrics/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "LogGroupMetrics/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.ts new file mode 100644 index 0000000000000..89638eef6c80e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-group-metrics.ts @@ -0,0 +1,24 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Stack } from 'aws-cdk-lib'; +import { LogGroup } from 'aws-cdk-lib/aws-logs'; + +const app = new App(); +const stack = new Stack(app, 'aws-cdk-log-group-metrics'); + +const logGroup = new LogGroup(stack, 'MyLogGroup', { + logGroupName: 'my-log-group', +}); + +logGroup.metricIncomingBytes().createAlarm(stack, 'IncomingBytesPerInstanceAlarm', { + threshold: 1, + evaluationPeriods: 1, +}); + +logGroup.metricIncomingLogEvents().createAlarm(stack, 'IncomingEventsPerInstanceAlarm', { + threshold: 1, + evaluationPeriods: 1, +}); + +new IntegTest(app, 'LogGroupMetrics', { + testCases: [stack], +}); \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-events-targets/test/logs/log-group.test.ts b/packages/aws-cdk-lib/aws-events-targets/test/logs/log-group.test.ts index f2670af087148..308b95ad2335f 100644 --- a/packages/aws-cdk-lib/aws-events-targets/test/logs/log-group.test.ts +++ b/packages/aws-cdk-lib/aws-events-targets/test/logs/log-group.test.ts @@ -398,3 +398,40 @@ testDeprecated('specifying retry policy with 0 retryAttempts', () => { ], }); }); + +test('metricIncomingLogEvents', () => { + // GIVEN + const stack = new cdk.Stack(); + const logGroup = new logs.LogGroup(stack, 'MyLogGroup', { + logGroupName: '/aws/events/MyLogGroup', + }); + + expect(stack.resolve(logGroup.metricIncomingLogEvents())).toEqual({ + period: { + amount: 5, + unit: { label: 'minutes', inMillis: 300000, isoLabel: 'M' }, + }, + namespace: 'AWS/LogGroup', + metricNames: 'IncomingLogEvents', + statistics: 'Average', + }); +}); + +test('metricIncomingBytes', () => { + // GIVEN + const stack = new cdk.Stack(); + const logGroup = new logs.LogGroup(stack, 'MyLogGroup', { + logGroupName: '/aws/events/MyLogGroup', + }); + + expect(stack.resolve(logGroup.metricIncomingBytes())).toEqual({ + period: { + amount: 5, + unit: { label: 'minutes', inMillis: 300000, isoLabel: 'M' }, + }, + namespace: 'AWS/LogGroup', + metricNames: 'IncomingBytes', + statistics: 'Average', + }); +}); + diff --git a/packages/aws-cdk-lib/aws-logs/lib/log-group.ts b/packages/aws-cdk-lib/aws-logs/lib/log-group.ts index d1a014ef7cefa..a0791ceb2f84f 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/log-group.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/log-group.ts @@ -84,6 +84,28 @@ export interface ILogGroup extends iam.IResourceWithPolicy { * Public method to get the physical name of this log group */ logGroupPhysicalName(): string; + + // /** + // * Return the given named metric for this Log Group + // * + // * @param metricName The name of the metric + // * @param props Properties for the metric + // */ + // metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Metric for the number of logs ingested + * + * @param props Properties for the metric + */ + metricIncomingLogEvents(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Metric for the number of bytes stored + * + * @param props Properties for the metric + */ + metricIncomingBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric; } /** @@ -245,6 +267,22 @@ abstract class LogGroupBase extends Resource implements ILogGroup { return principal; } + + public metricIncomingLogEvents(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('IncomingLogs', props); + } + + public metricIncomingBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('IncomingBytes', props); + } + + private metric(_metricName: string, _props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return new cloudwatch.Metric({ + namespace: 'AWS/LogGroup', + metricName: _metricName, + ..._props, + }).attachTo(this); + } } /**