[Monitoring] 4. Log 데이터 수집하기

steve·2024년 7월 29일

DevOps

목록 보기
8/8

개요

  1. Loki를 사용하여 로그 데이터를 수집한다.
  2. Promtail로 로그를 Loki로 전송한다.
  3. Grafana를 사용하여 수집된 로그 데이터를 시각화한다.

Loki

설치

  • Loki: 로그 수집 및 저장을 위한 도구
  1. Docker compose
services:
  loki:
    image: grafana/loki:2.9.2
    container_name: do-loki
    restart: unless-stopped
    ports:
    - 3100:3100
    volumes:
    - ./conf/loki/local-config.yaml:/etc/loki/local-config.yaml
    - ./data/loki:/data
    command:
      - '-config.file=/etc/loki/local-config.yaml'
    depends_on:
      - promtail
  1. Loki 설정 파일 local-config.yaml
auth_enabled: false

server:
  http_listen_port: 3100

common:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory
  replication_factor: 1
  path_prefix: /tmp/loki

schema_config:
  configs:
  - from: 2020-05-15
    store: tsdb
    object_store: filesystem
    schema: v13
    index:
      prefix: index_
      period: 24h

storage_config:
  filesystem:
    directory: /tmp/loki/chunks

위 파일을 ./conf/loki/ 경로에 저장

Promtail

설치

  • Promtail : 로그 수집기 역할, Loki로 로그 전송
  1. Docker Compose
services:
  promtail:
    image: grafana/promtail:3.0.0
    container_name: do-promtail
    restart: unless-stopped
    ports:
      - 9400:9080
    volumes:
      - ./conf/promtail/promtail.yml:/etc/promtail/promtail.yml
      - ./data/promtail:/data
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
    command:
      - '-config.file=/etc/promtail/promtail.yml'
    user: root
  1. Promtail 설정 파일 promtail.yml
    • 수집할 로그는 Host 서버에서 구동중인 Docker container의 로그를 대상으로 지정
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://172.17.0.1:3100/loki/api/v1/push

scrape_configs:
  - job_name: docker
    static_configs:
      - targets:
          - localhost
        labels:
          job: docker
          __path__: /var/lib/docker/containers/*/*.log
    pipeline_stages:
      - docker: {}

위 파일을 ./conf/promtail/ 경로에 저장

Promtail을 실행하는 명령어:

docker-compose up -d promtail

Grafana

Data source 및 Dashboard 추가

  • Data source
  • Dashboard
    • Visualization - Logs선택
    • Builder 선택 - 파일명

Grafana Provision

  • Dashboard Setting에서 위와 같이 추가한 Logs를 반영하기 위해 JSON model 업데이트
    • Dashboard > Setting > JSON model을 ./conf/grafana/dashboard.json에 저장
  • Grafana에서 Loki를 데이터 소스로 추가하기 위해 datasource.yaml 파일 수정
    • JSON model에서 Loki의 uid 복사
apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://172.17.0.1:9090
    uid: fdsou8fqkjc5kc
    isDefault: true

  - name: Loki
    type: loki
    access: proxy
    url: http://172.17.0.1:3100
    uid: fdsoudn1ep88wc
    isDefault: false

위 파일을 ./conf/grafana 경로에 저장

모니터링 시스템 구축 완료

  • 지금까지 Prometheus를 활용하여 각종 모니터링 지표를 수집하고 Grafana를 통해 각종 Data source를 연결하여 모니터링 대상 정보를 시각화해보았다. 추가로 Prometheus AlertMananger를 통해 특정 이벤트 발생 시 메신저 bot이나 webhook을 연동하여 실시간 시스템 이벤트 알림을 받을 수 있도록 구성해 보았고, 실무 적용 시 몇 가지 개선 사항 및 커스터마이징을 통해 활용할 수 있을 것이다.
  • GitHub : https://github.com/dobecom/DevOps/tree/main/docker/monitoring

0개의 댓글