MCP HubMCP Hub
스킬 목록으로 돌아가기

configure-log-aggregation

pjt222
업데이트됨 5 days ago
33 조회
17
2
17
GitHub에서 보기
디자인aidesign

정보

이 스킬은 Loki/Promtail 또는 ELK 스택을 사용하여 중앙 집중식 로그 수집을 구성합니다. 로그 파싱, 레이블 추출, 보존 정책을 처리하며, 상관 분석을 위해 로그와 메트릭을 통합합니다. 여러 서비스의 로그를 검색 가능한 시스템으로 통합하거나, 서비스 간 분석이 필요한 프로덕션 장애 해결 시 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-log-aggregation

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서

設誌聚

以 Loki/Promtail 或 ELK 施中誌收、析、查為行之見。

用時

  • 聚多服主之誌於可搜之系
  • 代本誌檔以中可查之存
  • 連誌於量與跡為全察
  • 以標取於非構之誌施構誌
  • 依存與規設誌之留策
  • 察產事需跨服誌析

  • :誌源(應、系、容誌)
  • :誌式(JSON、純、syslog 等)
  • 可選:取標則為構查
  • 可選:留與壓策
  • 可選:現存誌運設(Fluentd、Filebeat、Promtail)

Extended Examples 以全設檔。

第一步:擇誌聚之棧

依需擇 Loki(Prometheus 式)或 ELK(Elasticsearch 式)。

Loki 之善

  • 輕,為 K8s 與雲生而設
  • 標索(如 Prometheus)故存低
  • 原於 Grafana 合為一板
  • 以物存(S3、GCS)橫展
  • 較 Elasticsearch 耗資少

ELK 之善

  • 全內容之全文搜(非只標)
  • 富查 DSL 與聚
  • 成熟態附 beats、logstash 插
  • 善於需深史搜之規/審誌

此引專於 Loki + Promtail(多數現代宜)。

決之準:

Use Loki if:
- You want label-based queries similar to Prometheus
- Storage costs are a concern (Loki indexes only labels)
- You already use Grafana for metrics
- Kubernetes/container-native deployment

Use ELK if:
- You need full-text search across all log content
- You have complex log parsing and enrichment requirements
- You require advanced analytics and aggregations
- Legacy systems with existing Logstash pipelines

得: 明擇依需,團下合之裝品。

敗則:

  • 基存需:Loki 約少於 Elasticsearch 十倍
  • 評查式:全搜需對標濾
  • 察行冗:ELK 需多調與資

第二步:部 Loki

裝設 Loki 附合存後端。

Docker Compose 部docker-compose.yml):

version: '3.8'

services:
  loki:
    image: grafana/loki:2.9.0
    ports:
      - "3100:3100"
    volumes:
      - ./loki-config.yml:/etc/loki/local-config.yaml
      - loki-data:/loki
    command: -config.file=/etc/loki/local-config.yaml
    restart: unless-stopped

  promtail:
    image: grafana/promtail:2.9.0
    volumes:
      - ./promtail-config.yml:/etc/promtail/config.yml
      - /var/log:/var/log:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
    command: -config.file=/etc/promtail/config.yml
    restart: unless-stopped
    depends_on:
      - loki

volumes:
  loki-data:

Loki 設loki-config.yml):

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

# ... (see EXAMPLES.md for complete configuration)

附 S3 存:

storage_config:
  aws:
    s3: s3://us-east-1/my-loki-bucket
    s3forcepathstyle: true
  boltdb_shipper:
    active_index_directory: /loki/index
    cache_location: /loki/cache
    shared_store: s3

得: Loki 啟成,健察於 http://localhost:3100/ready 過,誌依留策存。

敗則:

  • 察 Loki 誌:docker logs loki
  • 驗存目存且可書
  • 試設法:docker run grafana/loki:2.9.0 -config.file=/etc/loki/local-config.yaml -verify-config
  • 確留設不逾碟
  • S3 則驗 IAM 權與桶訪

第三步:設 Promtail 運誌

設 Promtail 刮誌送 Loki 附取標。

Promtail 設promtail-config.yml):

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml
# ... (see EXAMPLES.md for complete configuration)

Promtail 之要:

  • 刮設:定誌源與如何發現
  • 管階:送前變標誌
  • 重標設:依元資動標
  • 位檔:追讀偏免重處

得: Promtail 刮設誌檔,標正施,誌經 LogQL 查於 Loki 可見。

敗則:

  • 察 Promtail 誌:docker logs promtail
  • 驗檔徑可訪:docker exec promtail ls /var/log
  • 獨試正則於樣誌
  • 察 Promtail 量:curl http://localhost:9080/metrics | grep promtail
  • 察位檔之進:cat /tmp/positions.yaml

第四步:以 LogQL 查誌

學 LogQL 之法為濾聚誌。

基查

# All logs from a job
{job="app"}

# Logs with specific label values
{job="app", level="error"}

# Regex filter on log line content
{job="app"} |~ "authentication failed"

# Case-insensitive regex
{job="app"} |~ "(?i)error"

# Line filter (doesn't parse, just includes/excludes)
{job="app"} |= "user"  # Contains "user"
{job="app"} != "debug" # Doesn't contain "debug"

析與濾

# JSON parsing
{job="app"} | json | level="error"

# Regex parsing with named groups
{job="app"} | regexp "user_id=(?P<user_id>\\d+)" | user_id="12345"

# Logfmt parsing (key=value format)
{job="app"} | logfmt | level="error", service="auth"

# Pattern parsing
{job="nginx"} | pattern `<ip> - <user> [<timestamp>] "<method> <path> <protocol>" <status> <size>` | status >= 500

(自誌得量):

# Count log lines per level
sum by (level) (count_over_time({job="app"}[5m]))

# Rate of error logs
rate({job="app", level="error"}[5m])

# Bytes processed per service
sum by (service) (bytes_over_time({job="app"}[1h]))

# Average request duration from logs
avg_over_time({job="app"} | json | unwrap duration [5m])

# Top 10 error messages
topk(10, sum by (message) (count_over_time({level="error"} [1h])))

以取欄濾

# Find specific trace in logs
{job="app"} | json | trace_id="abc123def456"

# HTTP 5xx errors from nginx
{job="nginx"} | pattern `<_> "<_> <_> <_>" <status> <_>` | status >= 500

# Failed authentication attempts
{job="app"} | json | message=~"authentication failed" | user_id != ""

以此建 Grafana Explore 查或板項。

得: 查返期誌,濾正行,聚自誌生量。

敗則:

  • 於 Grafana Explore 互動調
  • 察標名:curl http://localhost:3100/loki/api/v1/labels
  • 驗標值:curl http://localhost:3100/loki/api/v1/label/{label_name}/values
  • 簡查:始於基標選而漸加濾
  • 察時範:窗中或無誌

第五步:合誌於量跡

連誌於 Prometheus 量與散跡為一察。

加 trace ID 於誌(應儀):

# Python with OpenTelemetry
import logging
from opentelemetry import trace

logger = logging.getLogger(__name__)

def handle_request():
    span = trace.get_current_span()
    trace_id = span.get_span_context().trace_id

    logger.info(
        "Processing request",
        extra={"trace_id": format(trace_id, "032x")}
    )
// Go with OpenTelemetry
import (
    "go.opentelemetry.io/otel/trace"
    "go.uber.org/zap"
)

func handleRequest(ctx context.Context) {
    span := trace.SpanFromContext(ctx)
    traceID := span.SpanContext().TraceID().String()

    logger.Info("Processing request",
        zap.String("trace_id", traceID),
    )
}

設 Grafana 資鏈自量至誌:

於 Prometheus 板欄設:

{
  "fieldConfig": {
    "defaults": {
      "links": [
        {
          "title": "View Logs",
          "url": "/explore?left={\"datasource\":\"Loki\",\"queries\":[{\"refId\":\"A\",\"expr\":\"{job=\\\"app\\\",instance=\\\"${__field.labels.instance}\\\"} |= `${__field.labels.trace_id}`\"}],\"range\":{\"from\":\"${__from}\",\"to\":\"${__to}\"}}",
          "targetBlank": false
        }
      ]
    }
  }
}

設 Grafana 資鏈自誌至跡:

於 Loki 資源設:

datasources:
  - name: Loki
    type: loki
    url: http://loki:3100
    jsonData:
      derivedFields:
        - datasourceName: Tempo
          matcherRegex: "trace_id=(\\w+)"
          name: TraceID
          url: "$${__value.raw}"

於 Grafana Explore 連誌

  1. 於 Prometheus 查量
  2. 點資點
  3. 擇境單之「View Logs」
  4. Loki 查自填合標與時範
  5. 點誌之 trace ID
  6. Tempo 跡視開附全散跡

得: 點量開相關誌,誌中 trace ID 連至跡視,量/誌/跡一板導。

敗則:

  • 驗 trace ID 式合衍欄之正則
  • 察 trace_id 標為 Promtail 管所取
  • 確 Tempo 資源於 Grafana 已設
  • 試 URL 編於繁濾
  • 於隱瀏覽驗資鏈 URL

第六步:設誌之留與縮

設留策與縮以治存本。

依流之留(於 Loki 設):

limits_config:
  retention_period: 720h  # Global default: 30 days

  # Per-tenant retention (requires multi-tenancy enabled)
  per_tenant_override_config: /etc/loki/overrides.yaml

# overrides.yaml
overrides:
  production:
    retention_period: 2160h  # 90 days for production
  staging:
    retention_period: 360h   # 15 days for staging
  development:
    retention_period: 168h   # 7 days for dev

依流標之留(需 compactor):

compactor:
  working_directory: /loki/compactor
  shared_store: filesystem
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h
# ... (see EXAMPLES.md for complete configuration)

先(小數高先)定多配之則施何者。

壓設

chunk_store_config:
  chunk_cache_config:
    enable_fifocache: true
    fifocache:
      max_size_bytes: 1GB
      ttl: 24h
# ... (see EXAMPLES.md for complete configuration)

監留

# Check chunk stats
curl http://localhost:3100/loki/api/v1/status/chunks | jq

# Check compactor metrics
curl http://localhost:3100/metrics | grep loki_compactor

# Verify deleted chunks
curl http://localhost:3100/metrics | grep loki_boltdb_shipper_retention_deleted

得: 舊誌依留策自刪,存穩,縮減索量。

敗則:

  • 若留不行,啟 compactor 於 Loki 設
  • 察 compactor 誌:docker logs loki | grep compactor
  • 驗 retention_enabled: true 與 retention_deletes_enabled: true
  • 察碟用:du -sh /loki/
  • S3 則察桶生命策不衝 Loki 留

  • Loki API 健察返 200:curl http://localhost:3100/ready
  • Promtail 成刮諸設源誌
  • 標自誌正取(於 Grafana Explore 可見)
  • LogQL 查返期果附正濾
  • 誌留策執(留後舊誌刪)
  • 誌於 Grafana 板與 Explore 可訪
  • 誌中 trace ID 連至 Tempo 跡視
  • 量板有至相關誌之資鏈
  • 縮行且減存冗
  • 存於碟/S3 預內

  • 高基標:用無界之標值(用戶 ID、請求 ID)生索爆。用定標(級、服、境)而變於誌。
  • 缺誌析:送原誌無取標限查能。必析構誌(JSON、logfmt)或用正則於無構。
  • 時析誤:時戳式不合使誌亂或拒。以樣試時戳析。
  • 留不行:compactor 須啟以刪舊。察 retention_enabled: trueretention_deletes_enabled: true
  • 入率限:默(10MB/s)於高量系或低。調 ingestion_rate_mbingestion_burst_size_mb
  • 查超時:廣時之廣查或超時。用特標選與短時窗。
  • 誌重:多 Promtail 刮同誌生重。用獨標或位檔協。

  • correlate-observability-signals - 以 trace ID 跨量誌跡之調
  • build-grafana-dashboards - 視自誌得量而建誌板
  • setup-prometheus-monitoring - 量供何時查誌之境於事中
  • instrument-distributed-tracing - 加 trace ID 於誌以連散跡

GitHub 저장소

pjt222/agent-almanac
경로: i18n/wenyan/skills/configure-log-aggregation
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

executing-plans

디자인

executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.

스킬 보기

requesting-code-review

디자인

이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.

스킬 보기

connect-mcp-server

디자인

이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.

스킬 보기

web-cli-teleport

디자인

이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.

스킬 보기