AWS → STACKIT · LOGGING EN MONITORING

CloudWatch-logging en -monitoring op STACKIT

CloudWatch bundelt loggroepen, uit logs afgeleide metrics, alarmen en meldingen. Op STACKIT worden dat een Logs-instance, een Observability-instance met alertregels en receivers voor e-mail. StackToIT stelt de instances en de alertgroep op in Terraform en noemt, bestand voor bestand, wat een medewerker nog schrijft: de loglabels, de alertexpressies en de mailrelay.

De migratie in zeven stappen

De volgorde volgt de omgeving die StackToIT voor deze pagina beoordeelde: twee loggroepen, één metric filter, twee alarmen, één SNS-topic met een e-mailsubscription en één CloudWatch-board.

  1. Som op wat de omgeving echt gebruikt

    Lees de loggroepen met hun retentie, de metric filters, de alarmen en de topics erachter. Een metric filter of alarm dat niemand leest, is goedkoper uit te faseren dan opnieuw op te bouwen. Het assessment noemt elke loggroep, elk alarm, elk topic en het board als eigen eenheid; de metric filter en de e-mailsubscription zitten in de eenheden waartoe ze behoren.

  2. Maak de Logs-instances aan

    Loggroepen die hun logs hetzelfde aantal dagen bewaren, delen één Logs-instance. Retentie is een instelling van de instance, niet van een groep, dus de groep van 30 dagen en de groep van 365 dagen kwamen op twee instances terecht.

  3. Kies een labelconventie en een schrijftoken

    STACKIT Logs kent geen object voor loggroepen of streams. De groepsnaam blijft alleen bestaan als label dat uw shipper meestuurt. Maak per instance een schrijftoegangstoken aan en richt de shipper op het ingest-adres van de instance (Loki API of OpenTelemetry).

  4. Bouw uit logs afgeleide metrics opnieuw op

    Een Logs-instance kent geen metric filter. Maak van het filter een logalertregel in Observability, of laat de applicatie de metric zelf publiceren.

  5. Schrijf de alertexpressies

    De alertgroep neemt van elk alarm de naam en de “for”-duur over. De expressie is een verplichte variabele, omdat niet bekend is dat er een CloudWatch-metric in uw Observability-instance bestaat.

  6. Stel receivers in

    De e-mailsubscription van het SNS-topic wordt een receiver en een route in de alertconfiguratie van de Observability-instance. Het adres en de SMTP-relay zijn variabelen die u invult.

  7. Draai beide parallel en faseer daarna uit

    Stuur logs naar beide doelen, vergelijk het alertgedrag bij echte incidenten en schakel de CloudWatch-kant uit na acceptatie.

Loggroepen, een metric filter en twee alarmen

De invoer is voor deze pagina geschreven en op 4 november 2026 door StackToIT beoordeeld. Links: de invoer van de auditloggroep tot en met het latency-alarm. Rechts: blokken van de STACKIT-Terraform die de engine schreef, zonder de reviewcommentaren die in het bestand boven elk blok staan.

Voorbeeldinvoermain.tf
resource "aws_cloudwatch_log_group" "audit" {
  name              = "/acme/audit"
  retention_in_days = 365
}

resource "aws_cloudwatch_log_metric_filter" "errors" {
  name           = "orders-api-errors"
  log_group_name = aws_cloudwatch_log_group.api.name
  pattern        = "ERROR"

  metric_transformation {
    name      = "OrdersApiErrors"
    namespace = "Acme/Orders"
    value     = "1"
  }
}

resource "aws_sns_topic" "oncall" {
  name = "acme-oncall"
}

resource "aws_sns_topic_subscription" "oncall_mail" {
  topic_arn = aws_sns_topic.oncall.arn
  protocol  = "email"
  endpoint  = "oncall@example.com"
}

resource "aws_cloudwatch_metric_alarm" "errors_high" {
  alarm_name          = "orders-api-errors-high"
  namespace           = "Acme/Orders"
  metric_name         = "OrdersApiErrors"
  statistic           = "Sum"
  period              = 300
  evaluation_periods  = 1
  threshold           = 10
  comparison_operator = "GreaterThanThreshold"
  alarm_actions       = [aws_sns_topic.oncall.arn]
}

resource "aws_cloudwatch_metric_alarm" "latency_high" {
  alarm_name          = "orders-alb-latency-high"
  namespace           = "AWS/ApplicationELB"
  metric_name         = "TargetResponseTime"
  statistic           = "Average"
  period              = 60
  evaluation_periods  = 5
  threshold           = 1.5
  comparison_operator = "GreaterThanThreshold"
  alarm_actions       = [aws_sns_topic.oncall.arn]
}
STACKIT-Terraform van StackToITterraform/observability.tf
resource "stackit_logs_instance" "logs_retention_180d" {
  project_id     = var.project_id
  display_name   = "logs-retention-180d"
  retention_days = 180
}

resource "stackit_observability_alertgroup" "migrated" {
  project_id  = var.project_id
  instance_id = stackit_observability_instance.migrated.instance_id
  name        = "migrated-alarms"
  rules = [{
    alert      = "errors-high"
    expression = var.alarm_errors_high_expression
    labels = {
      source_alarm    = "aws_cloudwatch_metric_alarm.errors_high"
      notify_receiver = "sns-oncall"
    }
    annotations = {
      summary = "orders-api-errors-high"
    }
    }, {
    alert      = "latency-high"
    expression = var.alarm_latency_high_expression
    for        = "240s"
    labels = {
      source_alarm    = "aws_cloudwatch_metric_alarm.latency_high"
      notify_receiver = "sns-oncall"
    }
    annotations = {
      summary = "orders-alb-latency-high"
    }
  }]
}
  • 365 dagen worden 180

    De auditgroep bewaart de logs 365 dagen. Een STACKIT Logs-instance bewaart er maximaal 180, dus het concept stelt 180 in en legt een beslissing vast: houd het daarbij, of stream de logs ook naar langetermijnopslag.

  • De “for”-duur wordt afgeleid, de expressie niet

    Het latency-alarm evalueert vijf perioden van een minuut. Het concept hanteert (perioden min één) × periode, dus de regel krijgt for = 240s; het foutalarm, met één periode, krijgt geen for. Metric, vergelijking en drempel worden niet vertaald; ze komen in de variabele die u aanlevert.

  • Labels sturen meldingen

    Elke regel heeft een label notify_receiver dat de route van de Observability-instance koppelt aan de e-mailreceiver.

Wat elke CloudWatch-resource werd

Gelezen uit het assessment en de Terraform van de run. Alle zes eenheden zijn ingedeeld als RECONFIGURE; geen enkele eenheid bleef zonder koppeling.

CloudWatch-resourceSTACKIT-doelWat een medewerker nog doet
aws_cloudwatch_log_group (twee)STACKIT Logs-instance, één per retentieperiodeKies het label, maak het schrijftoken en de toegangslijst aan, richt de shipper op het ingest-adres
aws_cloudwatch_log_metric_filterGeen equivalent in Logs; genoemd als niet overgenomenBouw opnieuw op als logalertregel of als applicatiemetric
aws_cloudwatch_metric_alarm (twee)Regels in één Observability-alertgroepSchrijf de PromQL-expressie voor elke regel tegen metrics die in uw instance bestaan
aws_sns_topic en e-mailsubscriptionReceiver en route in de alertconfiguratie van de Observability-instanceVul het adres van de ontvanger en de SMTP-relay in; andere subscriptiontypen hebben een eigen receiver nodig
CloudWatch-boardresourceGrafana in de Observability-instance (zekerheidsniveau LOW)Bouw de panelen opnieuw op in Grafana; de inhoud van het board wordt niet overgenomen

Zowel de metric filter als de SNS-subscription gaan op in de eenheden waartoe ze behoren. Ze verschijnen niet als aparte eenheden, maar het concept noemt per eenheid wat niet wordt overgenomen.

De Observability-instance met de bijbehorende receiver

De receiver voor de SNS-e-mailsubscription, zoals in hetzelfde bestand geschreven. Het adres van de ontvanger is een variabele: de engine kopieert geen persoonlijk adres uit de bron.

STACKIT-Terraform van StackToITterraform/observability.tf
resource "stackit_observability_instance" "migrated" {
  project_id = var.project_id
  name       = "migrated-observability"
  plan_name  = var.observability_plan_name
  alert_config = {
    receivers = [{
      name = "default"
      }, {
      name = "sns-oncall"
      email_configs = [{
        to            = var.alert_mail_to_oncall_mail
        from          = var.alert_mail_from
        smart_host    = var.alert_mail_smart_host
        send_resolved = false
      }]
    }]
    route = {
      receiver = "default"
      routes = [{
        receiver = "sns-oncall"
        matchers = ["notify_receiver=\"sns-oncall\""]
      }]
    }
  }
}

Beslissingen van uw architecten

  • Retentie langer dan 180 dagen

    Auditlogs ouder dan 180 dagen bestaan alleen als u ze archiveert, bijvoorbeeld in een aparte Object Storage-bucket. De eigen FAQ van STACKIT raadt die cold-storage-aanpak aan voor lange retentie.

  • Labelsleutel voor de groepsnaam

    Het plan kiest geen labelsleutel en configureert geen producer opnieuw. Kies één conventie voor alle logbronnen voordat de eerste regel wordt verstuurd.

  • Alertsemantiek

    CloudWatch evalueert statistiek, periode en datapunten. Een PromQL-regel evalueert anders, dus controleer elke regel aan de hand van een echt incident, niet alleen met een syntaxcontrole.

  • Mailrelay en inloggegevens

    Het concept schrijft geen SMTP-login en genereert geen Logs-toegangstoken, omdat het token een credential is die in de state terechtkomt. Bepaal waar beide worden bewaard.

  • Boards en historie

    Panelen worden handmatig opnieuw opgebouwd. Historische logs en metrics worden door het concept niet gekopieerd; bepaal of iemand ze na de cutover nodig heeft.

  • Percentiel- en anomaliealarmen

    Deze omgeving heeft ze niet. Als de uwe ze wel heeft, controleer dan of Prometheus ze kan uitdrukken voordat u gelijkwaardigheid belooft.

Vragen van operationsteams

Kan ik mijn CloudWatch-agent houden?

Nee. De agent stuurt naar CloudWatch. Op STACKIT verstuurt u logs met een collector die de Loki API of OpenTelemetry spreekt. De Logs-documentatie van STACKIT bevat handleidingen voor Vector, Fluent Bit, de OpenTelemetry Collector en Grafana Alloy.

Worden metric filters overgenomen?

Nee. Een CloudWatch metric filter zet overeenkomende logevents om in een metric en telt alleen events nadat het filter bestaat. STACKIT Logs kent zo'n object niet, dus de run noemt het als niet overgenomen en wijst naar een logalertregel of een applicatiemetric.

Hoe lang kan STACKIT Logs mijn logs bewaren?

De Logs-FAQ van STACKIT meldt dat individuele retentie langer dan 180 dagen niet wordt ondersteund. Voor langere periodes streamt u parallel een kopie naar goedkopere langetermijnopslag.

Verplaatst StackToIT de bestaande loghistorie?

Nee. StackToIT wijzigt niets in een cloud en kopieert geen data. StackToIT stelt de doelen op en schrijft de stappen die uw team uitvoert.

Bronnen

Uw volgende stap: STACKIT.

Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.

Laat uw gegevens achter, onze specialisten nemen contact met u op.

Liever zelf een e-mail sturen? connect@stacktoit.com

Wij gebruiken uw gegevens alleen om dit verzoek te beantwoorden en een mogelijke pilot te bespreken. Privacyverklaring