private async Task PutTableAlarm(string alarmName, string tableName, string metricName, string snsTopicArn, double thresholdInUnits, int periodSeconds) { var alarmRequest = new PutMetricAlarmRequest { AlarmName = alarmName, AlarmDescription = AwsConstants.DefaultDescription, MetricName = metricName, Statistic = new Statistic("Sum"), Dimensions = new List <Dimension> { new Dimension { Name = "TableName", Value = tableName } }, EvaluationPeriods = 1, Period = periodSeconds, Threshold = thresholdInUnits, ComparisonOperator = ComparisonOperator.GreaterThanOrEqualToThreshold, Namespace = AwsNamespace.DynamoDb, AlarmActions = new List <string> { snsTopicArn }, OKActions = new List <string> { snsTopicArn } }; await _cloudWatchClient.PutMetricAlarmAsync(alarmRequest); AlarmPutCount++; _logger.Info($"Put table alarm {alarmName} at threshold {thresholdInUnits} and period {periodSeconds}s"); }
public void TestDescribeAlarms() { string metricName = this.GetType().Name + DateTime.Now.Ticks; PutMetricAlarmRequest[] rqs = CreateTwoNewAlarms(metricName); PutMetricAlarmRequest rq1 = rqs[0]; PutMetricAlarmRequest rq2 = rqs[1]; /* * Describe them */ DescribeAlarmsForMetricResult describeResult = Client.DescribeAlarmsForMetric(new DescribeAlarmsForMetricRequest() { Dimensions = rq1.Dimensions, MetricName = metricName, Namespace = rq1.Namespace }); Assert.AreEqual(2, describeResult.MetricAlarms.Count); foreach (MetricAlarm alarm in describeResult.MetricAlarms) { Assert.IsTrue(rq1.AlarmName.Equals(alarm.AlarmName) || rq2.AlarmName.Equals(alarm.AlarmName)); Assert.IsTrue(alarm.ActionsEnabled); } }
private async Task PutQueueLengthAlarm(string alarmName, string queueName, string snsTopicArn, double thresholdInUnits) { var alarmRequest = new PutMetricAlarmRequest { AlarmName = alarmName, AlarmDescription = AwsConstants.DefaultDescription, MetricName = AwsMetrics.MessagesVisible, Statistic = new Statistic("Sum"), Dimensions = new List <Dimension> { new Dimension { Name = "QueueName", Value = queueName } }, EvaluationPeriods = 1, Period = AwsConstants.FiveMinutesInSeconds, Threshold = thresholdInUnits, ComparisonOperator = ComparisonOperator.GreaterThanOrEqualToThreshold, Namespace = AwsNamespace.Sqs, AlarmActions = new List <string> { snsTopicArn }, OKActions = new List <string> { snsTopicArn } }; await _cloudWatchClient.PutMetricAlarmAsync(alarmRequest); AlarmPutCount++; _logger.Info($"Put queue length alarm {alarmName} at threshold {thresholdInUnits}"); }
/** * Creates two alarms on the metric name given and returns the two requests * as an array. */ private PutMetricAlarmRequest[] CreateTwoNewAlarms(String metricName) { PutMetricAlarmRequest[] rqs = new PutMetricAlarmRequest[2]; /* * Put two metric alarms */ rqs[0] = new PutMetricAlarmRequest() { ActionsEnabled = true, AlarmDescription = "Some alarm description", AlarmName = ALARM_BASENAME + metricName, ComparisonOperator = "GreaterThanThreshold", Dimensions = new List <Dimension> { new Dimension { Name = "InstanceType", Value = "m1.small" } }, EvaluationPeriods = 1, MetricName = metricName, Namespace = "AWS/EC2", Period = 60, Statistic = "Average", Threshold = 1.0, Unit = "Count" }; Client.PutMetricAlarm(rqs[0]); rqs[1] = new PutMetricAlarmRequest() { ActionsEnabled = true, AlarmDescription = "Some alarm description 2", AlarmName = "An Alarm Name 2" + metricName, ComparisonOperator = "GreaterThanThreshold", Dimensions = new List <Dimension> { new Dimension { Name = "InstanceType", Value = "m1.small" } }, EvaluationPeriods = 1, MetricName = metricName, Namespace = "AWS/EC2", Period = 60, Statistic = "Average", Threshold = 2.0, Unit = "Count" }; Client.PutMetricAlarm(rqs[1]); return(rqs); }
public static void CWPutMetricAlarm() { #region CWPutMetricAlarm var client = new AmazonCloudWatchClient(); var dimension = new Dimension { Name = "Desktop Machine Metrics", Value = "Virtual Desktop Machine Usage" }; var request = new PutMetricAlarmRequest { ActionsEnabled = true, AlarmActions = new List <string>() { "arn:aws:sns:us-east-1:80398EXAMPLE:CodingTestResults" }, AlarmDescription = "Too many instances offline", AlarmName = "Offline Instances", ComparisonOperator = ComparisonOperator.GreaterThanOrEqualToThreshold, Dimensions = new List <Dimension>() { dimension }, EvaluationPeriods = 1, MetricName = "Desktop Machines Offline", Namespace = "Example.com Custom Metrics", Period = (int)TimeSpan.FromMinutes(5).TotalSeconds, Statistic = new Statistic("Maximum"), Threshold = 5, Unit = StandardUnit.Count }; client.PutMetricAlarm(request); #endregion }
private static bool IsForIndex(PutMetricAlarmRequest r, string indexName) { return(r.Dimensions.Count(x => x.Name == "GlobalSecondaryIndexName" && x.Value == indexName) == 1); }
private static bool IsForTable(PutMetricAlarmRequest r, string tableName) { return(r.Dimensions.Count(x => x.Name == "TableName" && x.Value == tableName) == 1); }
public void TestDisableEnableAlarms() { String metricName = this.GetType().Name + DateTime.Now.Ticks; PutMetricAlarmRequest[] rqs = CreateTwoNewAlarms(metricName); PutMetricAlarmRequest rq1 = rqs[0]; PutMetricAlarmRequest rq2 = rqs[1]; /* * Disable */ DisableAlarmActionsRequest disable = new DisableAlarmActionsRequest() { AlarmNames = new List <string> { rq1.AlarmName, rq2.AlarmName } }; Client.DisableAlarmActions(disable); DescribeAlarmsForMetricResult describeResult = Client.DescribeAlarmsForMetric(new DescribeAlarmsForMetricRequest() { Dimensions = rq1.Dimensions, MetricName = metricName, Namespace = rq1.Namespace }); Assert.AreEqual(2, describeResult.MetricAlarms.Count); foreach (MetricAlarm alarm in describeResult.MetricAlarms) { Assert.IsTrue(rq1.AlarmName.Equals(alarm.AlarmName) || rq2.AlarmName.Equals(alarm.AlarmName)); Assert.IsFalse(alarm.ActionsEnabled); } /* * Enable */ EnableAlarmActionsRequest enable = new EnableAlarmActionsRequest() { AlarmNames = new List <string> { rq1.AlarmName, rq2.AlarmName } }; Client.EnableAlarmActions(enable); describeResult = Client.DescribeAlarmsForMetric(new DescribeAlarmsForMetricRequest() { Dimensions = rq1.Dimensions, MetricName = metricName, Namespace = rq1.Namespace }); Assert.AreEqual(2, describeResult.MetricAlarms.Count); foreach (MetricAlarm alarm in describeResult.MetricAlarms) { Assert.IsTrue(rq1.AlarmName.Equals(alarm.AlarmName) || rq2.AlarmName.Equals(alarm.AlarmName)); Assert.IsTrue(alarm.ActionsEnabled); } }
public void TestSetAlarmStateAndHistory() { String metricName = this.GetType().Name + DateTime.Now.Ticks; PutMetricAlarmRequest[] rqs = CreateTwoNewAlarms(metricName); PutMetricAlarmRequest rq1 = rqs[0]; PutMetricAlarmRequest rq2 = rqs[1]; /* * Set the state */ SetAlarmStateRequest setAlarmStateRequest = new SetAlarmStateRequest() { AlarmName = rq1.AlarmName, StateValue = "ALARM", StateReason = "manual" }; Client.SetAlarmState(setAlarmStateRequest); setAlarmStateRequest = new SetAlarmStateRequest() { AlarmName = rq2.AlarmName, StateValue = "ALARM", StateReason = "manual" }; Client.SetAlarmState(setAlarmStateRequest); DescribeAlarmsForMetricResult describeResult = Client .DescribeAlarmsForMetric( new DescribeAlarmsForMetricRequest() { Dimensions = rq1.Dimensions, MetricName = metricName, Namespace = rq1.Namespace }); Assert.AreEqual(2, describeResult.MetricAlarms.Count); foreach (MetricAlarm alarm in describeResult.MetricAlarms) { Assert.IsTrue(rq1.AlarmName.Equals(alarm.AlarmName) || rq2.AlarmName.Equals(alarm.AlarmName)); Assert.IsTrue("ALARM".Equals(alarm.StateValue) || "INSUFFICIENT_DATA".Equals(alarm.StateValue)); if ("ALARM".Equals(alarm.StateValue)) { Assert.AreEqual(setAlarmStateRequest.StateReason, alarm.StateReason); } } /* * Get the history */ DescribeAlarmHistoryRequest alarmHistoryRequest = new DescribeAlarmHistoryRequest() { AlarmName = rq1.AlarmName, HistoryItemType = "StateUpdate" }; DescribeAlarmHistoryResult historyResult = Client.DescribeAlarmHistory(alarmHistoryRequest); Assert.IsTrue(historyResult.AlarmHistoryItems.Count > 0); }
public static void Configure() { //Amazon Credentials string accessKey = ConfigurationManager.AppSettings["AWSAccessKeyId"]; string secretKey = ConfigurationManager.AppSettings["AWSSecretKey"]; string launchConfigurationName = "ScheduledServicesLaunchConfiguration"; string autoScalingGroupName = "ScheduledServiceASG"; string scaleOutPolicyName = "ScheduledServicesScaleOutSQSPolicy"; string scaleInPolicyName = "ScheduledServicesScaleInSQSPolicy"; string scaleOutARN = ""; string scaleInARN = ""; string queueName = "ScheduledServicesSQS"; string queueURL = ""; string amiID = "AMI_ID"; string instanceType = "INSTANCE_TYPE"; AmazonAutoScalingClient autoScaleClient = new AmazonAutoScalingClient(accessKey, secretKey, RegionEndpoint.USWest2); AmazonSQSClient sqsClient = new AmazonSQSClient(accessKey, secretKey, RegionEndpoint.USWest2); Console.WriteLine("¡¡¡CONFIGURATION INITIALIZED!!!"); Console.WriteLine(""); Console.WriteLine("--------- SQS ---------"); Console.WriteLine(""); Console.WriteLine("Creating the simple queue service item"); Console.WriteLine(""); //Get or create the sqs instance CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); CreateQueueResponse createQueueResponse = sqsClient.CreateQueue(createQueueRequest); queueURL = createQueueResponse.QueueUrl; Console.WriteLine("Created the simple queue service item with name: " + queueName + " and url: " + queueURL); Console.WriteLine(""); Console.WriteLine("--------- EC2 ---------"); Console.WriteLine(""); //If not exists any launch configuration with this name, creates DescribeLaunchConfigurationsRequest describeLaunchConfigurationsRequest = new DescribeLaunchConfigurationsRequest(); describeLaunchConfigurationsRequest.LaunchConfigurationNames = new List <string>() { launchConfigurationName }; DescribeLaunchConfigurationsResponse describeLaunchConfigurationsResponse = autoScaleClient.DescribeLaunchConfigurations(describeLaunchConfigurationsRequest); Console.WriteLine("Creating the launch configuration"); Console.WriteLine(""); if (describeLaunchConfigurationsResponse.LaunchConfigurations.Count == 0) { //Create Launch Configuration Request CreateLaunchConfigurationRequest launchConfigurationRequest = new CreateLaunchConfigurationRequest(); launchConfigurationRequest.LaunchConfigurationName = launchConfigurationName; launchConfigurationRequest.ImageId = amiID; launchConfigurationRequest.InstanceType = instanceType; //Create Launch Configuration Response CreateLaunchConfigurationResponse launchConfigurationResponse = autoScaleClient.CreateLaunchConfiguration(launchConfigurationRequest); Console.WriteLine("Created the launch configuration with name: " + launchConfigurationName); Console.WriteLine(""); } else { Console.WriteLine("Founded the launch configuration with name: " + launchConfigurationName); Console.WriteLine(""); } Console.WriteLine("Creating the autoscaling group"); Console.WriteLine(""); DescribeAutoScalingGroupsRequest describeAutoScalingGroupsRequest = new DescribeAutoScalingGroupsRequest(); describeAutoScalingGroupsRequest.AutoScalingGroupNames = new List <string>() { autoScalingGroupName }; DescribeAutoScalingGroupsResponse describeAutoScalingGroupsResponse = autoScaleClient.DescribeAutoScalingGroups(describeAutoScalingGroupsRequest); if (describeAutoScalingGroupsResponse.AutoScalingGroups.Count == 0) { //Create Auto Scaling Group Request CreateAutoScalingGroupRequest autoScalingGroupRequest = new CreateAutoScalingGroupRequest(); autoScalingGroupRequest.AutoScalingGroupName = autoScalingGroupName; autoScalingGroupRequest.MinSize = 1; autoScalingGroupRequest.MaxSize = 3; autoScalingGroupRequest.DesiredCapacity = 1; autoScalingGroupRequest.AvailabilityZones = new List <string>() { "us-west-2a", "us-west-2b", "us-west-2c" }; autoScalingGroupRequest.LaunchConfigurationName = launchConfigurationName; //Create Auto Scaling Group Response autoScaleClient.CreateAutoScalingGroup(autoScalingGroupRequest); Console.WriteLine("Created the autoscaling group with name: " + autoScalingGroupName); Console.WriteLine(""); } else { Console.WriteLine("Founded the autoscaling group with name: " + autoScalingGroupName); Console.WriteLine(""); } Console.WriteLine("Creating the scale out policy"); Console.WriteLine(""); //Policies //Creating scaling out policy for the SQS PutScalingPolicyRequest scalingOutPolicyRequest = new PutScalingPolicyRequest(); scalingOutPolicyRequest.PolicyName = scaleOutPolicyName; scalingOutPolicyRequest.AutoScalingGroupName = autoScalingGroupName; scalingOutPolicyRequest.ScalingAdjustment = -1; scalingOutPolicyRequest.AdjustmentType = "ChangeInCapacity"; PutScalingPolicyResponse scalingOutPolicyResponse = autoScaleClient.PutScalingPolicy(scalingOutPolicyRequest); scaleOutARN = scalingOutPolicyResponse.PolicyARN; Console.WriteLine("Created the scale out policy with arn: " + scaleOutARN); Console.WriteLine(""); Console.WriteLine("Creating the scale in policy"); Console.WriteLine(""); //Creating scaling in policy for the SQS PutScalingPolicyRequest scalingInPolicyRequest = new PutScalingPolicyRequest(); scalingInPolicyRequest.PolicyName = scaleInPolicyName; scalingInPolicyRequest.AutoScalingGroupName = autoScalingGroupName; scalingInPolicyRequest.ScalingAdjustment = 1; scalingInPolicyRequest.AdjustmentType = "ChangeInCapacity"; PutScalingPolicyResponse scalingInPolicyResponse = autoScaleClient.PutScalingPolicy(scalingInPolicyRequest); scaleInARN = scalingInPolicyResponse.PolicyARN; Console.WriteLine("Created the scale in policy with arn: " + scaleInARN); Console.WriteLine(""); AmazonCloudWatchClient cloudWatchClient = new AmazonCloudWatchClient(accessKey, secretKey, RegionEndpoint.USWest2); Console.WriteLine("--------- CLOUD WATCH ---------"); Console.WriteLine(""); Console.WriteLine("Creating the scale in policy"); Console.WriteLine(""); //Scale In PutMetricAlarmRequest metricAlarmScaleInRequest = new PutMetricAlarmRequest(); metricAlarmScaleInRequest.AlarmName = "ScheduledServicesScaleInMetric"; metricAlarmScaleInRequest.MetricName = "ApproximateNumberOfMessagesVisible"; metricAlarmScaleInRequest.Namespace = "AWS/SQS"; metricAlarmScaleInRequest.Period = 300; metricAlarmScaleInRequest.Threshold = 3; metricAlarmScaleInRequest.ComparisonOperator = ComparisonOperator.GreaterThanOrEqualToThreshold; metricAlarmScaleInRequest.Statistic = new Statistic("Average"); Dimension dimensionScaleIn = new Dimension(); dimensionScaleIn.Name = "QueueName"; dimensionScaleIn.Value = queueName; metricAlarmScaleInRequest.Dimensions.Add(dimensionScaleIn); metricAlarmScaleInRequest.EvaluationPeriods = 2; metricAlarmScaleInRequest.AlarmActions.Add(scaleInARN); cloudWatchClient.PutMetricAlarm(metricAlarmScaleInRequest); Console.WriteLine("Created the scale in policy with name: ScheduledServicesScaleInMetric"); Console.WriteLine(""); Console.WriteLine("Creating the scale out policy"); Console.WriteLine(""); //Scale Out PutMetricAlarmRequest metricAlarmScaleOutRequest = new PutMetricAlarmRequest(); metricAlarmScaleOutRequest.AlarmName = "ScheduledServicesScaleOutMetric"; metricAlarmScaleOutRequest.MetricName = "ApproximateNumberOfMessagesVisible"; metricAlarmScaleOutRequest.Namespace = "AWS/SQS"; metricAlarmScaleOutRequest.Period = 300; metricAlarmScaleOutRequest.Threshold = 3; metricAlarmScaleOutRequest.ComparisonOperator = ComparisonOperator.LessThanThreshold; metricAlarmScaleOutRequest.Statistic = new Statistic("Average"); Dimension dimensionScaleOut = new Dimension(); dimensionScaleOut.Name = "QueueName"; dimensionScaleOut.Value = queueName; metricAlarmScaleOutRequest.Dimensions.Add(dimensionScaleOut); metricAlarmScaleOutRequest.EvaluationPeriods = 2; metricAlarmScaleOutRequest.AlarmActions.Add(scaleOutARN); cloudWatchClient.PutMetricAlarm(metricAlarmScaleOutRequest); Console.WriteLine("Created the scale out policy with name: ScheduledServicesScaleOutMetric"); Console.WriteLine(""); Console.WriteLine("¡¡¡CONFIGURATION FINISHED!!!"); }