2. 로깅 시스템 구축

bocopile·2025년 2월 17일

Monitoring

목록 보기
9/9
post-thumbnail

개요

지난 포스팅 까지 Grafana, Prometheus, Node Exporter를 이용하여 모니터링 시스템을 구축하였습니다.

이번 포스팅에서는 로깅 시스템이 무엇인지, 왜 Loki를 채택 했는지?, 각 소프트웨어 별로 로깅 시스템은 어떻게 구축 했는지에 대한 부분을 설명 드리고자 합니다.

로깅 시스템.. 넌 무엇이니?

로깅 시스템은 애플리케이션, 서버, 네트워크 등에서 발생하는 로그를 수집, 저장, 분석하는 시스템입니다.

로깅 시스템을 구축하기 전에는 SSH를 이용하여 소프트웨어가 설치되어 있는 서버에 접근해서 로그를 분석해야 했다.

해당 방법은 문제점을 확인하기 위해 MSA 환경의 서비스에서 봐야 할 서버의 수가 증가 하므로

장애 대응이 지연되는 문제가 발생합니다.

그래서 로그를 한번에 볼수 있도록 로그를 중앙 저장소에 저장하여 관리 함으로서 위와 같은 단점을 해결할 수 있습니다.

중앙집중식 로깅은 로그 수집 파이프라인을 통해 서비스 로컬에서 발생한 애플리케이션 로그를 중앙 저장소에 수집합니다.

사용자는 대시보드를 이용해 다수 서비스에서 발생한 로그를 검색하고 분석할 수 있습니다. 기존처럼 ssh를 통해 직접 서버에 접근해서 명령어를 사용할 필요가 없습니다.

사전 정의

Loki를 이용하여 로깅 시스템을 구축하기 위해선 다양한 방법이 있습니다.

이 중에서 제가 채택한 방법은 Promtail, Loki를 이용하려고 합니다.

우선 Promtail, Loki가 무엇인지 부터 설명을 하고자 합니다.

Promtail Agent

각 서버에 저장 되어 있는 로그 내용을 Loki로 전송하는 에이전트입니다.

Promtail은 다음 기능을 수행합니다.

  • 로그 수집 : 로그파일, 시스템 로그, 컨테이너 로그 등 다양한 소스에서 로그 데이터를 수집합니다.
  • 로그 라벨링 : 수집된 로그에 라벨링을 추가하여 Loki에서 쉽게 검색하고 필터링 될수 있도록 합니다.
  • 로그 전송 : 수집된 로그 데이터를 Loki로 전송합니다.

Loki

수집된 로그 데이터를 저장하고 쿼리할 수 있는 로그 집계 시스템입니다.

  • 라벨 기반 인덱싱: Loki는 로그 데이터에 라벨을 기반으로 인덱싱하여 효율적으로 검색할 수 있도록 합니다. 이는 Prometheus의 메트릭 라벨링과 유사한 방식입니다.
  • 높은 성능: Loki는 로그 데이터를 압축하고 인덱싱하여 저장 공간을 효율적으로 사용하며, 빠른 쿼리 성능을 제공합니다.
  • Grafana와의 통합: Loki는 Grafana와 완벽하게 통합되어 있어, Grafana 대시보드에서 로그 데이터를 시각화하고 분석할 수 있습니다.

왜 Loki 일까?

일반적으로 가장 많이 사용하는 로깅 시스템은 ELK(Elasticsearch, Logstash, Kibana)가 있습니다.

ELK는 다음과 같이 구성 되어 있습니다.

  • Elasticsearch : Logstash를 통해 수신된 데이터를 저장소에 저장하는 역할
  • Logstash : 수집할 로그를 선정해서, 지정된 대상 서버(ElasticSearch)에 인덱싱하여 전송하는 역할
  • Kibana : 로그 및 이벤트 검토에 사용하는 데이터 시각화 및 탐색 도구

그렇다면 많이 사용하는 ELK Stack 대신 Loki를 이용하였을까?

  1. Grafana와의 원활한 통합
    • 이미 Prometheus와 Grafana를 이용하여 모니터링 시스템을 구축하였습니다.
    • 추가적으로 Loki를 추가하면 로그와 메트릭을 한 곳에서 통합적으로 관리할 수 있습니다.
  2. 간단한 설정 및 관리
    • VM 환경에서도 쉽게 설정할 수 있으며, 관리 부담이 적습니다.
  3. 비용 효율성
    • ELK Stack은 Elasticsearch와 Logstash가 리소스를 많이 소모하므로, VM 환경에서 리소스 부담이 있을 수 있습니다.
    • 그에 반해 Loki는 로그 데이터를 효율적으로 압축 저장하므로, 저장 비용과 리소스 사용량이 낮습니다.
  4. 클라우드 네이티브 환경에 적합
    • 향후 클라우드 또는 Kubernetes로 전환할 경우, Loki가 더 유리합니다.

이제 로깅 시스템을 구축하기 위해서 필요한 소프트웨어가 무었이 있는지 부터 정의가 필요합니다.

로깅시스템 구성 방안

기존 모니터링 시스템으로 다음과 같은 시스템을 구축하였습니다.

로깅 시스템을 구축하기 위해선 다음과 같은 작업을 진행해야 합니다.

  • 각 서버별 : Promtail 설치
  • 로깅 시스템 : Grafana Loki를 이용할 별도의 서버를 구성

로깅 시스템 구축

이제 본격적으로 로깅 시스템을 구축해봅시다.

가장 먼저 로그 데이터를 저장하고 쿼리하는 Loki 부터 설치해 봅시다.

Loki

가장 먼저 Loki를 다운로드 하는 작업이 필요합니다.

 # Loki 설치
 curl -O -L https://github.com/grafana/loki/releases/download/v2.4.1/loki-linux-amd64.zip
 unzip loki-linux-amd64.zip
 sudo cp loki-linux-amd64 /usr/local/bin/loki
 sudo chmod +x /usr/local/bin/loki
 # Loki 동작 확인
 loki --version

가장 마지막 명령어를 이용하면 다음과 같이 Loki version이 조회가 됩니다.

설치가 완료되었다면 환경설정 파일, 로그 경로 추가 및 권한 부여가 필요합니다.

  • 환경설정 및 로그 경로 생성/권한 부여
sudo useradd --system loki
sudo mkdir -p /etc/loki /var/log/loki 
sudo chown -R loki: /etc/loki
sudo chown -R loki: /var/log/loki
  • 환경 설정 파일 생성
    • 경로 : /etc/loki/loki-config.yaml
    • 내용
      auth_enabled: false
      
      server:
        http_listen_port: 3100
        #grpc_listen_port: 9096
      
      common:
        path_prefix: /etc/loki
        storage:
          filesystem:
            chunks_directory: /etc/loki/chunks
            rules_directory: /etc/loki/rules
        replication_factor: 1
        ring:
          instance_addr: 0.0.0.0
          kvstore:
            store: inmemory
      
      schema_config:
        configs:
          - from: 2020-10-24
            store: boltdb-shipper
            object_store: filesystem
            schema: v11
            index:
              prefix: index_
              period: 24h                

작업이 완료되었다면 서비스 등록 및 실행이 필요합니다.

서비스 파일 생성

  • 명령어
    sudo vi /etc/systemd/system/loki.service
  • 내용
    [Unit]
    Description=Loki service
    After=network.target
    
    [Service]
    Type=simple
    User=loki
    ExecStart=/usr/local/bin/loki -config.file /etc/loki/loki-config.yaml
    Restart=on-failure
    RestartSec=20
    StandardOutput=append:/var/log/loki/loki-console.log
    StandardError=append:/var/log/loki/loki-error.log
    
    [Install]
    WantedBy=multi-user.target                     

서비스 등록 및 실행

sudo systemctl daemon-reload 
sudo systemctl enable --now loki
sudo systemctl status loki

해당 작업이 완료되었다면 Loki 설치가 완료되었습니다.

Promtail

Loki우선 Promtail 설치를 진행합니다.

wget https://github.com/grafana/loki/releases/download/v2.8.0/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip 
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
sudo chmod +x /usr/local/bin/promtail
promtail --version

Promtail 설치가 완료되었다면 설정 파일을 추가 합니다.

  • sudo vi /etc/promtail/promtail-config.yaml
  • 내용
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://${loki_server_ip}:3100/loki/api/v1/push

scrape_configs:
  # Error / Access Log를 분리하여 수집 하도록 설정하였습니다.
  - job_name: mariadb-error-log
    static_configs:
      - targets:
          - localhost
        labels:
          job: mariadb-error-log
          __path__: ${mariadb_error_log_path}/error.log
  - job_name: nginx-slow-log
    static_configs:
      - targets:
          - localhost
        labels:
          job: mariadb-slow-log
          __path__: ${mariadb_slow_log_path}/access.log

설정 파일이 추가 하였다면 서비스 파일 생성 및 등록이 필요합니다.

  • sudo vi /etc/systemd/system/promtail.service
  • 내용
    [Unit]
    Description=Promtail service
    After=network.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail-config.yaml
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
  • 등록
    sudo systemctl daemon-reload
    sudo systemctl enable --now promtail
    sudo systemctl status promtail

Grafana 연동

Loki, Promtail 작업이 완료되었습니다.

이제 Grafana 대시보드에 연결하여 로그를 보여지도록 설정해야 합니다.

Loki 세팅

대시보드를 세팅하기 앞서 Loki 서버와 Grafana 연결이 필요합니다.

  1. 왼쪽 매뉴에 Configuration > Data Sources 를 클릭합니다.

  2. 우측 상단에 Add data source 버튼을 클릭합니다.

  3. 검색 창에 Loki 를 검색한 후에 Select 버튼을 클릭합니다.

  4. Loki 연결에 필요한 정보들을 입력한다.

  5. ‘Save & Test’ 버튼을 클릭하여 저장한다.

대시보드 선택

가장 먼저 Grafana 대시보드를 어떤것으로 세팅할지 부터 정해야 합니다.

대시보드 조회는

해당 사이트 우측 하단에 보면  Dashboard ID Copy 버튼이 **있습니다.**

해당 버튼을 클릭하여 대시보드 ID를 복사하시면 됩니다.

대시보드 구성

대시보드를 선택하였다면 구축 해놓은 대시보드에 접속합니다.

  1. 구축한 Grafana를 접속한 후에 왼쪽 매뉴에서 create > import 클릭

  1. Import via에 복사한 dashboard ID 붙여놓고 Load 버튼을 클릭

  1. Name, uid 등 필요한 정보를 입력한 후에 Import 버튼을 클릭합니다.

위의 작업이 완료되면 아래와 같이 로깅 시스템 구축이 완료되었습니다.

마무리

위의 글에선 MariaDB 로깅 시스템 적용을 예로들었으나 다른 시스템도 위와 같이 적용을 하면 됩니다.

다음 포스팅에서 AlertManager 세팅하여 Slack에 경고 메세지가 발생하는 방법을 설명하고자 합니다.

참조

profile
DevOps Engineer

0개의 댓글