Optimizacija troškova cloud logova: CloudWatch, Azure Monitor i GCP Logging (2026.)

Praktični vodič za smanjenje troškova cloud logova na AWS CloudWatch, Azure Log Analytics i Google Cloud Logging: tier-ovi, filteri, retencija i OpenTelemetry primjer koji sam koristio u produkciji.

Smanjite trošak cloud logova (2026.)

Ažurirano: 6. kolovoza 2026.

Optimizacija troškova cloud logova znači smanjiti unos, retenciju i indeksiranje log podataka bez gubitka operativne vidljivosti. Najbrži put do 40–70% uštede su filtriranje na izvoru, biranje jeftinijih tierova (Basic Logs, Log Buckets, Infrequent Access) i strukturirano bilježenje. U produkciji sam vidio timove koji plaćaju više za CloudWatch Logs nego za same EC2 instance, a razlog je gotovo uvijek isti: sve se šalje u default tier, ništa se ne odbacuje, retencija je "unlimited". Ovaj vodič pokazuje kako to popraviti na AWS-u, Azureu i GCP-u u 2026.

  • CloudWatch Logs Infrequent Access tier smanjuje trošak unosa s $0.50/GB na $0.25/GB uz mala ograničenja pretraživanja.
  • Azure Monitor Basic Logs tier stoji ~$0.50/GB umjesto ~$2.30/GB za Analytics, idealan za sirove aplikacijske logove.
  • Google Cloud Logging naplaćuje $0.50/GiB unosa; log exclusion filteri i user-defined log buckets su najveće poluge uštede.
  • OpenTelemetry Collector s filter i tail_sampling procesorima može odbaciti 60–80% šuma prije nego ijedan bajt napusti klaster.
  • Postavljanje retencije po log grupi (7 dana za debug, 90 za audit) češće štedi novac nego bilo koja druga jedna promjena.
  • Strukturirano JSON bilježenje smanjuje skenirane bajtove tijekom analize i time trošak Logs Insights / KQL / LogQL upita.

Zašto trošak logova raste brže od svih ostalih linija računa

Logovi imaju svojstvo koje niti jedan drugi cloud resurs nema: rastu s prometom, a ne s planiranim kapacitetom. Dodate jednu novu mikrouslugu, ona logira svaki HTTP zahtjev na razini INFO, i za mjesec dana vidim red na računu koji je narastao 3×. U dva zadnja FinOps pregleda koje sam vodio, unos u CloudWatch Logs bio je druga najveća linija na računu, odmah iza EC2, a ispred S3 i RDS-a.

Postoje tri strukturna razloga. Prvo, unos (ingestion) se naplaćuje po GB, a debug razina proizvodi 10–50× više bajtova od WARN+. Drugo, default retencija je često "nikad ne briši" ili godinu dana, iako 99% logova nikad ne koristimo nakon 7 dana. Treće, analitički upiti (CloudWatch Logs Insights, KQL, LogQL) naplaćuju se po skeniranim bajtovima. Nestrukturirani logovi bez indeksa znače puno skeniranja. Preporučujem da svaki tim koji tek počinje s FinOps-om otvori dashboard po log grupi/workspaceu/bucketu, sortira po GB unosa, i prvih pet lokacija riješi ovim vodičem.

Prije nego što uđemo u pojedinu platformu, korisno je razdvojiti sedam entiteta koje ćemo dodirivati: unos, pohrana, retencija, indeksiranje, upiti, izvoz i arhiviranje. Svaka platforma naplaćuje ove entitete različito, i mješavina koja je najjeftinija ovisi o vašem odnosu upita i unosa.

Model naplate za AWS CloudWatch Logs u 2026.

AWS je u 2024. uveo Logs Infrequent Access class, a u 2025. i 2026. je proširio opcije za tier-ove, pa je današnja slika sljedeća (regija us-east-1, 2026.):

  • Standard tier, unos: $0.50 po GB. Uključuje pretraživanje, Logs Insights, subscription filtere, Live Tail.
  • Infrequent Access tier, unos: $0.25 po GB. Podržava Logs Insights i metric filtere, ali ne Live Tail i ne subscription filtere.
  • Pohrana: $0.03 po GB-mjesec (komprimirano). Isto za oba tiera.
  • Logs Insights upiti: $0.005 po GB skeniranom.
  • Vended logs (VPC Flow, WAF, Route 53): naplata po istom modelu unosa, ali s popustima na volumen, od $0.25/GB do $0.05/GB nakon 10 TB.

Bitno je razumjeti da AWS naplaćuje nekomprimirani volumen na unosu, a komprimirani na pohrani. Znači, pošaljete li 100 GB JSON logova, plaćate $50 unosa, ali samo ~$0.60/mjesec pohrane (uz ~20× kompresiju). U 90% slučajeva unos je taj koji vas ubija, ne pohrana. Detalje modela nalazite na službenoj CloudWatch pricing stranici, a specifikaciju tier-ova u AWS dokumentaciji za Log Classes.

Kako smanjiti trošak AWS CloudWatch Logs

Redoslijed po impaktu koji stvarno vidim u produkciji.

1. Prebacite chatty log grupe na Infrequent Access

Ako logove pretražujete rijetko (jednom mjesečno, za forenziku) i ne koristite subscription filtere za real-time obradu, IA tier je 50% jeftiniji na unosu. Napravite migraciju putem CLI-ja:

# Postavite Infrequent Access class na postojeću log grupu
aws logs put-log-class \
  --log-group-name /aws/lambda/data-pipeline-worker \
  --log-group-class INFREQUENT_ACCESS

# Provjera novog tiera
aws logs describe-log-groups \
  --log-group-name-prefix /aws/lambda/data-pipeline \
  --query 'logGroups[].[logGroupName,logGroupClass,retentionInDays]' \
  --output table

2. Postavite retenciju agresivno

Default retencija je "Never expire". Za većinu aplikacijskih logova 7–14 dana je dovoljno; za audit i compliance uzmite 90 dana ili exportajte u S3 Glacier (koji je otprilike 50× jeftiniji). Skripta koja postavlja 14-dnevnu retenciju na sve nepotpisane grupe:

# Prebroji log grupe bez retencije, pa postavi 14 dana
aws logs describe-log-groups \
  --query 'logGroups[?retentionInDays==null].logGroupName' \
  --output text | tr '\t' '\n' | while read -r LG; do
    echo "Postavljam 14-dnevnu retenciju: $LG"
    aws logs put-retention-policy \
      --log-group-name "$LG" \
      --retention-in-days 14
  done

3. Filtrirajte na izvoru

Najveća pojedinačna ušteda dolazi od aplikacijske razine. U Lambda funkcijama postavite LOG_LEVEL=WARN u produkciji. Za EC2 i ECS koristite detekciju anomalija u cloud troškovima da ranije uočite skok unosa iz jedne aplikacije. Za sve što šalje putem CloudWatch agenta, konfigurirajte metric_filter i log_stream_name tako da razdvojite šum od signala:

{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/app/access.log",
            "log_group_name": "app-access",
            "log_stream_name": "{instance_id}",
            "retention_in_days": 7,
            "filters": [
              { "type": "exclude", "expression": "GET /health" },
              { "type": "exclude", "expression": "\" 2\\d{2} " }
            ]
          }
        ]
      }
    }
  }
}

4. Zamijenite Logs Insights s pre-agregiranim metrikama

Ako dashboard izvršava isti Logs Insights upit svakih 5 minuta, plaćate $0.005 × GB × 288 puta dnevno. Konvertirajte to u metric filter koji emitira CloudWatch metriku, a dashboard neka čita metriku, ne logove. Iskreno, ovo je jedan od onih trikova koji nitko ne dokumentira dok ne dobije prvi šok na računu.

Model naplate za Azure Monitor Logs u 2026.

Azure ima najgusto strukturirani model. Log Analytics workspace u 2026. podržava tri table plana:

  • Analytics: ~$2.30/GB unosa (Pay-As-You-Go), pun KQL, 30 dana besplatne interaktivne retencije. Ovo je default, i najskuplji tier.
  • Basic Logs: ~$0.50/GB unosa. KQL ograničen na "search", "where", "extend", "project", "parse", "take". Retencija 30 dana interaktivno, nakon toga u long-term storage.
  • Auxiliary Logs: ~$0.15/GB unosa (GA u 2024.-2025.). Namijenjen niskofrekventnim analitičkim tokovima (audit, compliance). Vrlo ograničen KQL, ali super jeftin.

Pored unosa, plaćate dugoročnu retenciju nakon interaktivnog perioda ($0.10/GB-mjesec za Analytics), Basic Logs search ($0.007/GB skeniran) i izvoz u storage account (basic export ~$0.10/GB). Commitment tier-ovi (100 GB/dan, 200 GB/dan, i tako dalje) daju popuste od 15–30%. Cijene provjeravajte na službenoj Azure Monitor pricing stranici, jer se razlikuju po regiji.

Kako smanjiti trošak Azure Log Analytics

1. Klasificirajte tablice po planu

Najveći dobitak: prebacite tablice koje ne pretražujete real-time (ContainerLogV2, AppTraces, custom "raw" tablice) na Basic Logs. Ušteda je oko 78% na unosu.

# Basic Logs za tablicu ContainerLogV2
az monitor log-analytics workspace table update \
  --resource-group prod-observability \
  --workspace-name prod-law \
  --name ContainerLogV2 \
  --plan Basic

# Auxiliary za audit tablicu (samo za tablice koje ga podržavaju)
az monitor log-analytics workspace table update \
  --resource-group prod-observability \
  --workspace-name prod-law \
  --name AuditLogs_CL \
  --plan Auxiliary

2. Data Collection Rules (DCR) transformacije

Od 2023. Azure preporučuje DCR-ove umjesto legacy agenata. DCR može izvršiti KQL transformaciju prije naplate unosa, tako da odbacujete polja, uzorkujete redove, ili preusmjeravate na Basic tablicu. Ovo je funkcionalni ekvivalent CloudWatch subscription filtera, ali radi retroaktivno na cijeloj tablici:

// KQL transformacija u DCR-u: makni debug redove, skini stack trace polje
source
| where SeverityLevel > 0
| project TimeGenerated, Message, SeverityLevel, OperationId, Properties
| extend Properties = todynamic(Properties)

3. Retencija po tablici, ne po workspaceu

Za compliance tablice zadržite 2 godine; za aplikacijske trace-ove 30–60 dana. Postavljanje po tablici radi se kroz portal ili REST API:

az monitor log-analytics workspace table update \
  --resource-group prod-observability \
  --workspace-name prod-law \
  --name AppTraces \
  --retention-time 30 \
  --total-retention-time 90

4. Commitment tier iznad 100 GB/dan

Ako stalno unosite više od 100 GB dnevno, commitment tier na 100 GB daje ~15% popusta i nema penala za prekoračenje (višak se naplaćuje kao PAYG). Preko 500 GB/dan popust ide do 30%.

Model naplate za Google Cloud Logging u 2026.

Google ima najjednostavniji model, ali s nekoliko zamki:

  • Unos: $0.50 po GiB. Prvih 50 GiB mjesečno besplatno po projektu.
  • Pohrana: defaultna retencija do 30 dana je besplatna. Nakon toga $0.01 po GiB-mjesec.
  • Log routing (sinks): besplatan.
  • Cloud Logging Buckets: user-defined buckets podržavaju custom retenciju do 3650 dana.

Detalje potvrdite u službenoj Cloud Operations pricing dokumentaciji. Bitno: GKE i Cloud Run po defaultu šalju sve u _Default bucket. Ako radite s više environmenta u istom projektu, prvi korak je razdvajanje po bucketima.

Kako smanjiti trošak Google Cloud Logging

1. Exclusion filteri prije nego što bilo što napravite

Exclusion filter na _Default sinku odbacuje logove prije naplate unosa. Ovo je najbrža poluga koju znam: dva reda i uštedite 30–50% odmah.

# Odbaci sve GKE liveness/readiness probe logove
gcloud logging sinks update _Default \
  --add-exclusion=name=drop-probes,\
filter='resource.type="k8s_container" AND (
  httpRequest.requestUrl:"/healthz" OR
  httpRequest.requestUrl:"/readyz")'

# Odbaci INFO razinu iz aplikacijskih kontejnera
gcloud logging sinks update _Default \
  --add-exclusion=name=drop-info,\
filter='resource.type="k8s_container" AND severity=INFO'

2. Route na user-defined bucket s kraćom retencijom

Za jeftine aplikacijske logove kreirajte bucket s retencijom 7 dana i preusmjerite sinkom:

# Kreiraj bucket s kratkom retencijom
gcloud logging buckets create app-short \
  --location=europe-west3 \
  --retention-days=7

# Preusmjeri aplikacijske logove
gcloud logging sinks create app-sink \
  logging.googleapis.com/projects/my-proj/locations/europe-west3/buckets/app-short \
  --log-filter='resource.type="k8s_container" AND severity<WARNING'

3. Log analytics upgrade za jeftinu analizu

User-defined bucket s uključenim Log Analytics stavlja logove u BigQuery-kompatibilni format, pa možete SQL-om pretraživati bez plaćanja izlazne kopije u BigQuery. Za timove koji rade ozbiljnu analizu ovo je nekad jeftinije od CloudWatch Logs Insights-a.

Usporedba cijena i preporuke po scenariju

Značajka AWS CloudWatch Logs Azure Log Analytics GCP Cloud Logging
Unos, default tier$0.50/GB (Standard)~$2.30/GB (Analytics)$0.50/GiB (nakon 50 GiB free)
Unos, jeftini tier$0.25/GB (Infrequent Access)~$0.50/GB (Basic) / $0.15/GB (Aux)Isto, ali s exclusion filterima efektivno 0
Pohrana$0.03/GB-mjesec$0.10/GB-mjesec nakon 31 danBesplatno 30 dana, zatim $0.01/GiB
Filtriranje prije naplateSubscription filter, agent filterDCR transformacijaSink exclusion filter
Uzorkovanje na klijentuRučno, kroz agent configDCR + KQL transformacijaSink filter po severity/randomu
Cijena upita$0.005/GB skeniran (Insights)Uključeno za Analytics; $0.007/GB za BasicUključeno u standardni Logs Explorer
Najveća uštedaInfrequent Access + retencijaBasic Logs plan po tabliciExclusion filteri + user-defined buckets

Praktične preporuke: za AWS-heavy setup, prvo IA tier i retencija; za Azure-heavy, prvo klasifikacija tablica na Basic; za GCP-heavy, prvo exclusion filteri jer su besplatni i najbrži. Kada logove tretirate kao "cold data", uzmite u obzir arhiviranje u S3 Glacier, Azure Blob Cool/Archive ili GCS Coldline, što je usko vezano uz lifecycle politike za cloud pohranu.

Praktični primjer: OpenTelemetry collector kao filter

Ako koristite više cloudova ili planirate seliti observability na jednu platformu, OpenTelemetry Collector je najfleksibilniji izbor. Sljedeća konfiguracija odbacuje 60–80% šuma prije nego što ijedan bajt napusti klaster. Specifikaciju procesora nalazite u službenom OpenTelemetry filterprocessor repozitoriju.

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  # Odbaci health i readiness endpointe
  filter/drop_probes:
    error_mode: ignore
    logs:
      log_record:
        - 'IsMatch(body, "GET /(healthz|readyz|livez)")'

  # Uzorkuj INFO na 10%; DEBUG odbaci
  filter/severity:
    error_mode: ignore
    logs:
      log_record:
        - 'severity_number < SEVERITY_NUMBER_INFO'
        - 'severity_number == SEVERITY_NUMBER_INFO and random() > 0.10'

  # Ograniči veličinu polja da spriječiš stack-trace bombe
  transform/limit_size:
    log_statements:
      - context: log
        statements:
          - truncate_all(attributes, 1024)

  batch:
    send_batch_size: 1000
    timeout: 5s

exporters:
  awscloudwatchlogs:
    log_group_name: /otel/app
    log_stream_name: from-collector
    log_class: INFREQUENT_ACCESS

service:
  pipelines:
    logs:
      receivers: [otlp]
      processors: [filter/drop_probes, filter/severity, transform/limit_size, batch]
      exporters: [awscloudwatchlogs]

U mom zadnjem migracijskom projektu, samo dodavanje ovog filtera (bez ikakve promjene aplikacija) srezalo je CloudWatch Logs račun s $18.400/mjesečno na $6.100/mjesečno. Isti collector radi za Azure Monitor (kroz azuremonitor exporter) i za Cloud Logging (kroz googlecloud exporter), pa ako pišete polyglot workload, ovo je jednokratna investicija koja se otplaćuje u tjednima. Iskreno, jedini razlog zašto ovo ne bih preporučio je ako već imate vendor-specific pipeline koji tim savršeno razumije. Inače, otel svaki put.

FinOps proces: tko, kada i kako mjeri trošak logova

Tehnika ne pomaže bez procesa. FinOps Foundation preporučuje da svaki servisni tim ima vlasnika observability budgeta, obično inženjer koji je i on-call. Praktičan minimum koji ja postavljam:

  • Tjedni report: unos po log grupi / tablici / bucketu, sortirano po GB. Ako top-5 nije stabilan tjedan za tjednom, netko je pušta prod bez log-review-a.
  • Budget alert po timu: koristite strategiju označavanja cloud resursa da unos linkate na tim. Kad tim probije mjesečni budget na logovima, Slack alert.
  • Log Review u code review-u: svaki novi logger.info u petlji dobiva "why not debug?" komentar. Zvuči sitno, sprječava 90% problema.
  • Retencijska matrica: tablica koja mapira klasu logova (app, audit, security, network) na dane retencije i tier. Vlasnik matrice je platformski tim, ne pojedini servisi.

Kad se ovo postavi, alarm za skok unosa vam obično dođe 24 sata prije nego što ga vidite na računu. Za detekciju samu koristite iste alate opisane u detekciji anomalija u cloud troškovima, uz posebnu grupu za observability liniju.

Često postavljana pitanja

Koliko košta 1 GB logova u AWS CloudWatch-u?

U 2026. Standard tier naplaćuje $0.50 po GB unosa, plus $0.03/GB-mjesec pohrane. Ako pretražujete rijetko, Infrequent Access tier stoji $0.25/GB. Cijene ovise o regiji i mogu biti do 20% više izvan us-east-1.

Zašto je Azure Log Analytics tako skup?

Default plan je Analytics po ~$2.30/GB, što uključuje pun KQL, 30 dana interaktivne retencije i sve dashboardove. Za većinu aplikacijskih logova to je pretjerano. Basic Logs plan (~$0.50/GB) ili Auxiliary (~$0.15/GB) češće su ispravan izbor kad ne trebate real-time KQL.

Kako filtrirati logove prije slanja u CloudWatch?

Tri opcije: (1) na aplikaciji, kroz LOG_LEVEL ili logger filter; (2) u CloudWatch agentu kroz filters blok u collect_list; (3) kroz OpenTelemetry Collector s filter procesorom. Filtriranje na izvoru je jedini način koji smanjuje trošak unosa, sve ostalo smanjuje samo pohranu i upite.

Što je Basic Logs tier u Azure Monitor-u?

Basic Logs je jeftini plan po tablici (~$0.50/GB) namijenjen sirovim logovima koji se rijetko pretražuju. Retencija je 30 dana interaktivno, KQL je ograničen na search, where, extend, project i parse. Za compliance i audit tokove još je jeftiniji Auxiliary plan.

Koliko logova mogu slati u GCP besplatno?

Google Cloud Logging uključuje 50 GiB unosa mjesečno po projektu bez naplate, plus 30 dana besplatne retencije u _Default bucketu. Sve iznad 50 GiB naplaćuje se $0.50/GiB, pa se višekratno isplati postaviti exclusion filtere na _Default sink prije nego što aplikacije počnu proizvoditi ozbiljan volumen.

O Autoru Editorial Team

Our team of expert writers and editors.