Log

Log 카테고리의 모든 포스트 - 한국어

2개의 포스트

Logs Monitoring 정리 (실무 중심)

✅ 1. 전체 아키텍처 흐름

[App/Infra Logs]
      ↓
   Filebeat / Logstash
      ↓
  [Elasticsearch]
      ↓
   Kibana (대시보드)
  • Filebeat: 로그 파일 수집기 (Lightweight)
  • Logstash: 데이터 처리, 변환, 파싱
  • Elasticsearch: 로그 저장/검색/분석
  • Kibana: 시각화 및 모니터링 대시보드

✅ 2. Filebeat (로그 수집기)

🔹 역할

  • 로그 파일 tailing
  • Multiline (스택트레이스 등) 지원
  • 시스템 로그, Docker 로그, Nginx, Java 로그 등 수집 가능

🔹 설정 예시

filebeat.inputs:
  - type: log
    paths:
      - /var/log/myapp/*.log
    multiline.pattern: '^\['
    multiline.negate: true
    multiline.match: after

output.elasticsearch:
  hosts: ["http://localhost:9200"]
  index: "myapp-logs-%{+yyyy.MM.dd}"

💡 실무 팁

  • multiline 설정 필수 (Java stack trace)
  • fields 옵션으로 서비스명, 환경 태깅
  • JSON 로그 구조화 추천

✅ 3. Logstash (필요 시 중간 가공)

🔹 역할

  • 로그 파싱 및 정제
  • Grok 패턴, mutate, date 필터 등
  • Kafka → Logstash → ES 구성 가능

🔹 Grok 예시

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:level}\] %{GREEDYDATA:msg}" }
  }
  date {
    match => [ "timestamp", "ISO8601" ]
  }
}

💡 실무 팁

  • Filebeat에서 JSON 구조면 Logstash 생략 가능
  • Kafka 중계/복잡한 parsing 시 유용

✅ 4. Kibana (시각화 및 알림)

🔹 주요 기능

  • Discover: 실시간 로그 조회
  • Dashboard: 시각화
  • Alerting: 이상 탐지 알림
  • Lens/TSVB: 시간 기반 분석

💡 실무 팁

  • timestamp, level, logger, service_name 필드 표준화
  • Error 로그 대시보드 구성
  • 복합 필터링 예시: log.level: ERROR AND NOT message:"Connection reset"

✅ 5. 성능/보안 로그 모니터링

유형설명
JVM GC 로그메모리 문제 추적
Nginx / ApacheAPI 응답 시간, 요청 수 분석
Kafka / RedisBroker 상태, throughput 추적
Spring Bootactuator 로그 + slf4j 로그
시스템 로그CPU, 메모리 사용량 추적
인증 로그로그인 시도, 실패 분석

✅ 6. 인덱스 전략 및 유지 관리

  • index.lifecycle 정책 (ILM): 오래된 로그 자동 삭제
  • 일별 인덱스: myapp-logs-2025.07.11
  • 템플릿 매핑 필수: @timestamp, log.level
  • hot-warm-cold 아키텍처 고려

✅ 7. 실무 구성 예시 (Docker Compose)

services:
  elasticsearch:
    image: elasticsearch:8.17.6
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200

  kibana:
    image: kibana:8.17.6
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

  filebeat:
    image: docker.elastic.co/beats/filebeat:8.17.6
    volumes:
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
      - /var/log:/var/log:ro

✅ 정리 요약

구성 요소역할비고
Filebeat로그 수집Multiline 지원, 간단
Logstash로그 정제Grok 필터, Kafka 중계
Elasticsearch저장/검색인덱스 설계 중요
Kibana시각화/모니터링Discover, Alert 활용

systemlog 에 관해서

리눅스 /var/log/syslog/var/log/messages 완전 정리 (K8s 운영 관점 포함)

1. 개요

  • Debian/Ubuntu 계열: /var/log/syslog → 주요 시스템 로그 파일.
  • RHEL/CentOS/Rocky 계열: /var/log/messages → 동일한 역할.
  • 공통점: 커널, 시스템 서비스, 사용자 애플리케이션의 일반 로그가 모임.

로그 흐름

  1. 커널/애플리케이션 → syslog API 호출 또는 표준 출력.
  2. systemd-journald 수집 → 메모리/디스크 저널에 저장.
  3. rsyslog/syslog-ng가 journald에서 읽어 파일(/var/log/...)로 기록.

2. 로그에 담기는 내용

  • 커널 이벤트: 네트워크 링크 업/다운, 디스크 I/O 에러, OOM Killer.
  • 시스템 서비스: kubelet, containerd, NetworkManager, CRI 플러그인.
  • 사용자 공간 데몬: sshd, cron, rsyslog.
  • 애플리케이션: syslog로 출력한 메시지.

예시

Aug 12 13:54:01 master-node-1 CRON[2345]: (root) CMD (/usr/local/bin/backup.sh)
Aug 12 13:54:03 worker-node-2 kernel: [12345.678901] eth0: link up
Aug 12 13:54:10 master-node-1 kubelet[1123]: Failed to pull image "nginx:latest": rpc error: ...

3. 로그 보는 방법

파일 기반

# 최신 100줄
sudo tail -n 100 /var/log/syslog
sudo tail -n 100 /var/log/messages

# 실시간 모니터링
sudo tail -f /var/log/syslog

# 특정 키워드 검색
sudo grep -i "kubelet" /var/log/syslog

journald 기반

# 현재 부팅 로그
sudo journalctl -b

# 서비스별
sudo journalctl -u kubelet
sudo journalctl -u containerd

# 심각도 필터
sudo journalctl -p err -b

# 시간 범위
sudo journalctl --since "2025-08-12 09:00" --until "2025-08-12 12:00" -u kubelet

# 커널만
sudo journalctl -k -b

4. 심각도 & 시설

  • Severity: 0(emerg) ~ 7(debug)
  • Facility: kern, auth, daemon, syslog, local0~local7

예시: