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.
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.
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.
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).
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.
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.
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.
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.
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]
}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-resource | STACKIT-doel | Wat een medewerker nog doet |
|---|---|---|
| aws_cloudwatch_log_group (twee) | STACKIT Logs-instance, één per retentieperiode | Kies het label, maak het schrijftoken en de toegangslijst aan, richt de shipper op het ingest-adres |
| aws_cloudwatch_log_metric_filter | Geen equivalent in Logs; genoemd als niet overgenomen | Bouw opnieuw op als logalertregel of als applicatiemetric |
| aws_cloudwatch_metric_alarm (twee) | Regels in één Observability-alertgroep | Schrijf de PromQL-expressie voor elke regel tegen metrics die in uw instance bestaan |
| aws_sns_topic en e-mailsubscription | Receiver en route in de alertconfiguratie van de Observability-instance | Vul het adres van de ontvanger en de SMTP-relay in; andere subscriptiontypen hebben een eigen receiver nodig |
| CloudWatch-boardresource | Grafana 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.
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
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.