Observability / DevOps

    Structured Logging

    JSON zamiast plaintext, Loki vs ELK Stack, Promtail, Fluentd, correlation ID — jak zbierać, przechowywać i analizować logi w skali produkcyjnej.

    Loki + Promtail
    Tani K8s stack
    Elasticsearch
    Full-text search
    Fluent Bit
    K8s agent
    Trace ID
    Korelacja logów

    6 stacków do centralnego logowania

    Od taniego Loki przez ELK Stack po enterprise Splunk — każdy stack optymalizuje inny aspekt: koszt, możliwości wyszukiwania i skalowalność.

    Stack Indeksowanie Koszt Search Skalowanie Kiedy
    Loki + Promtail + Grafana Labels-only index Niski (S3 backend) LogQL (labels + filter) Doskonałe (stateless) Kubernetes, koszt-efektywne
    ELK (Elastic + Logstash + Kibana) Full-text index Wysoki (Elastic storage) KQL / Lucene Dobre (sharding) Full-text search, compliance
    EFK (Elastic + Fluentd + Kibana) Full-text index Wysoki KQL / Lucene Dobre K8s + Elasticsearch
    OpenSearch + Fluent Bit Full-text index Średni (AWS Managed) OpenSearch DSL Dobre AWS-native, open-source
    Datadog Logs Full-text index Bardzo wysoki (per GB) Datadog query Doskonałe (SaaS) Enterprise, unified platform
    Splunk Full-text index (SPL) Najwyższy SPL (potężne) Doskonałe Enterprise, security, compliance

    Często zadawane pytania

    Co to jest structured logging i dlaczego zastępuje plaintext logs?

    Plaintext logs: 2024-04-13 12:00:01 ERROR User login failed for user@example.com from IP 1.2.3.4. Trudne do parsowania. Brak struktury. Brak typowania. Structured logs: JSON format. {timestamp: '2024-04-13T12:00:01Z', level: 'ERROR', message: 'User login failed', user_email: 'user@example.com', ip: '1.2.3.4', request_id: 'uuid', service: 'auth-service', trace_id: 'abc123'}. Zalety structured logging: maszyna może parsować bez regex. Filtrowanie po dowolnym polu (level, user_id, trace_id). Agregacje (count errors per user). Koreluacja z traces. Wyszukiwanie po trace_id przez cały system. Pola wymagane w każdym logu: timestamp (ISO 8601). level (TRACE/DEBUG/INFO/WARN/ERROR/FATAL). message. service (nazwa serwisu). version. environment (prod/staging). request_id (per HTTP request). trace_id + span_id (OpenTelemetry). host/pod/container_id. Pola opcjonalne: user_id. operation/endpoint. duration_ms. status_code. error_type + stack_trace. Poziomy logowania: TRACE — bardzo szczegółowe (dev only). DEBUG — informacje debugowania. INFO — normalne operacje. WARN — sytuacje wymagające uwagi. ERROR — błędy które wymagają działania. FATAL — krytyczny błąd, serwis nie działa.

    Loki + Promtail + Grafana — stack logowania dla Kubernetes?

    Grafana Loki: log aggregation system (Grafana Labs). Inspirowany Prometheus — labels not index. Nie indeksuje treści logów — tylko metadata (labels). Znacznie tańszy storage niż Elasticsearch. Promtail: agent zbierający logi z Kubernetes. DaemonSet — jeden per node. Czyta logi z /var/log/containers/. Dodaje labels: namespace, pod, container, node. Wysyła do Loki. LogQL (Loki Query Language): {namespace='production', service='auth'} |= 'ERROR'. {service='api'} | json | status >= 500. Agregacje: rate({service='api'}[5m]). Grafana + Loki: Explore -> Loki datasource. Wyszukiwanie po labels. Dashboard z logami i metrykami razem. Korelacja trace -> log. Alternatywy do Promtail: Grafana Agent (Alloy). Fluentd/Fluent Bit (bardziej konfigurowalny). Vector (high-performance, Rust). Loki Stack Helm chart: loki-stack chart. Zawiera Loki + Promtail + Grafana. 5 minut do działającego systemu. Loki storage backends: local filesystem. AWS S3 (Loki distributed mode). Azure Blob Storage. GCS. Loki vs ELK: Loki — tańszy (labels only index), prostszy, integracja z Grafana. ELK — pełny full-text search, bardziej potężny, droższy, bardziej złożony.

    ELK Stack vs EFK — Elasticsearch, Logstash/Fluentd, Kibana?

    ELK Stack: Elasticsearch (store + search) + Logstash (collect + transform) + Kibana (visualize). EFK Stack: Elasticsearch + Fluentd + Kibana. Fluentd zamiast Logstash — lżejszy, popularny w K8s. Elasticsearch: distribuowany full-text search engine. Inverted index — szybkie wyszukiwanie po treści. Sharding i replikacja. REST API. Kibana: wizualizacja dla Elasticsearch. Discover — przeglądanie logów. Dashboard. Alerting (Kibana Watcher). Logstash: ETL dla logów. Input plugins (Beats, Kafka, syslog). Filter plugins (grok, json, mutate, geoip). Output plugins (Elasticsearch, Kafka, S3). Fluentd/Fluent Bit: Fluentd — Ruby, w pełni featured, Kubernetes ready. Fluent Bit — C, ultra-lekki, ideale dla edge/embedded. Input -> Filter -> Output pluginy. td-agent (Treasure Data) = Fluentd enterprise. OpenSearch: fork Elasticsearch (po zmianie licencji na SSPL). AWS OpenSearch Service. Kompatybilny z Elasticsearch API (częściowo). Beats: Filebeat — logi z plików. Metricbeat — metryki systemu. Packetbeat — network data. Heartbeat — uptime monitoring. Konfiguracja EFK w K8s: Fluentd DaemonSet. ConfigMap z regułami parsowania. Elasticsearch StatefulSet (lub ElasticCloud). Kibana Deployment. Ingress dla Kibana.

    Log levels i best practices — co logować, czego nie logować?

    Co logować: INFO — start/stop aplikacji, kluczowe operacje biznesowe, zewnętrzne integracje (request sent to payment gateway). WARN — deprecated API usage, retry attempt, slow query (>1s), nieoczekiwany stan który nie jest błędem. ERROR — nieobsłużony wyjątek, nieudane wywołanie zewnętrznego API, błąd biznesowy (payment failed). FATAL — crash aplikacji, brak połączenia z DB przy starcie. Czego NIE logować: Dane osobowe (GDPR) — hasła, tokeny, numery kart, SSN, PESEL. Pełne request body (może zawierać PII). Zbyt dużo DEBUG w produkcji (performance, koszt storage). Health check endpoints (setki logów per minutę bez wartości). Correlation ID (Request ID, Trace ID): generuj UUID per request. Propaguj przez nagłówki (X-Request-Id, traceparent). Loguj w każdym serwisie z tym samym ID. Pozwala śledzić request przez cały system. Structured logging libraries: Java — SLF4J + Logback (JSON appender) lub Log4j2. Spring Boot — wbudowane, config application.properties. Go — zap (Uber) lub zerolog. Python — structlog. Node.js — pino lub winston. .NET — Serilog lub NLog. Log sampling: przy high-traffic — loguj 1% INFO requestów. Zawsze loguj ERROR/WARN. Adaptive sampling: więcej przy błędach. Retention policy: prod logs 30-90 dni. Compliance logs (GDPR) 6-12 miesięcy. Krytyczne security logs 1+ rok.

    Jak wyszukiwać i analizować logi w Kibana i Grafana Loki?

    Kibana Discover: KQL (Kibana Query Language). service.name: 'auth-service' AND log.level: 'ERROR'. user.id: '123' AND @timestamp > '2024-04-13'. http.response.status_code: [400 TO 499]. Kibana Lens: agregacje — count errors per service per hour. Average response time per endpoint. Histogram błędów. Kibana Alerting: watcher per anomalię. Alert gdy error rate > 5% przez 5 minut. PagerDuty/Slack integration. Grafana Explore z Loki: {namespace='production'} |= 'payment failed'. {job='api'} | json | duration_ms > 1000. Derive metrics from logs: count_over_time({job='api'} |= 'ERROR'[5m]). Grafana Logs Panel: w dashboardzie. Filter by label. Context — pokaż logi wokół wybranego eventu. Log Analytics: common patterns — ile ERROR per service. Error spikes — korelacja z deploymentami. User journey — śledzenie user_id przez system. Distributed tracing integration: Grafana Tempo (traces) + Loki (logs) + Prometheus (metrics). Switch from trace -> log (trace_id link). Switch from log -> trace. Unified observability view. Splunk (enterprise): SPL (Search Processing Language). Machine Learning dla anomaly detection. Drogi ale potężny. Datadog Logs: automatic parsing dla znanych formatów. Log Patterns (ML clustering). Live Tail — real-time view.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz

    Szanujemy Twoją prywatność

    Używamy plików cookies, aby zapewnić najlepsze doświadczenia na naszej stronie. Klikając "Akceptuję", zgadzasz się na ich użycie.