cloudemu

Monitoring

Metrics, alarms, and metric queries

Monitoring

Emulates monitoring services: CloudWatch (AWS), Monitor (Azure), CloudMonitoring (GCP).

Provider Mapping

ProviderServiceAccess
AWSCloudWatchaws.CloudWatch
AzureMonitorazure.Monitor
GCPCloud Monitoringgcp.CloudMonitoring

Key Operations

Push Metrics

import mondriver "github.com/stackshy/cloudemu/monitoring/driver"

aws.CloudWatch.PutMetricData(ctx, []mondriver.MetricDatum{
    {
        Namespace:  "App/Web",
        MetricName: "CPUUtilization",
        Value:      72.8,
        Timestamp:  time.Now(),
        Dimensions: map[string]string{"InstanceId": "i-00000001"},
    },
    {
        Namespace:  "App/Web",
        MetricName: "RequestCount",
        Value:      15230,
        Timestamp:  time.Now(),
    },
})

Query Metrics

result, _ := aws.CloudWatch.GetMetricData(ctx, mondriver.GetMetricInput{
    Namespace:  "App/Web",
    MetricName: "CPUUtilization",
    Dimensions: map[string]string{"InstanceId": "i-00000001"},
    StartTime:  time.Now().Add(-5 * time.Minute),
    EndTime:    time.Now(),
    Period:     60,
    Stat:       "Average", // also: "Sum", "Minimum", "Maximum", "SampleCount"
})

fmt.Printf("CPU: %.1f%%\n", result.Values[0])

List Metrics

metrics, _ := aws.CloudWatch.ListMetrics(ctx, "App/Web")
// ["CPUUtilization", "RequestCount"]

Alarms

// Create an alarm
aws.CloudWatch.CreateAlarm(ctx, mondriver.AlarmConfig{
    Name:               "high-cpu",
    Namespace:          "App/Web",
    MetricName:         "CPUUtilization",
    ComparisonOperator: "GreaterThanThreshold",
    Threshold:          80,
    Period:             300,
    EvaluationPeriods:  2,
    Stat:               "Average",
})

// List alarms
alarms, _ := aws.CloudWatch.DescribeAlarms(ctx, nil)

Auto-Metrics

Services like EC2 automatically push metrics to the monitoring service when instances are launched, stopped, or terminated. You can query these exactly as you would in production.

Alarm Evaluation

Alarms automatically evaluate when new metric data is pushed. They transition between OK and ALARM states based on threshold comparison.

On this page