지난 포스팅 까지 Grafana, Prometheus, Node Exporter를 이용하여 모니터링 시스템을 구축하였습니다.
이번 포스팅에서는 로깅 시스템이 무엇인지, 왜 Loki를 채택 했는지?, 각 소프트웨어 별로 로깅 시스템은 어떻게 구축 했는지에 대한 부분을 설명 드리고자 합니다.
로깅 시스템은 애플리케이션, 서버, 네트워크 등에서 발생하는 로그를 수집, 저장, 분석하는 시스템입니다.
로깅 시스템을 구축하기 전에는 SSH를 이용하여 소프트웨어가 설치되어 있는 서버에 접근해서 로그를 분석해야 했다.
해당 방법은 문제점을 확인하기 위해 MSA 환경의 서비스에서 봐야 할 서버의 수가 증가 하므로
장애 대응이 지연되는 문제가 발생합니다.
그래서 로그를 한번에 볼수 있도록 로그를 중앙 저장소에 저장하여 관리 함으로서 위와 같은 단점을 해결할 수 있습니다.
중앙집중식 로깅은 로그 수집 파이프라인을 통해 서비스 로컬에서 발생한 애플리케이션 로그를 중앙 저장소에 수집합니다.
사용자는 대시보드를 이용해 다수 서비스에서 발생한 로그를 검색하고 분석할 수 있습니다. 기존처럼 ssh를 통해 직접 서버에 접근해서 명령어를 사용할 필요가 없습니다.
Loki를 이용하여 로깅 시스템을 구축하기 위해선 다양한 방법이 있습니다.
이 중에서 제가 채택한 방법은 Promtail, Loki를 이용하려고 합니다.
우선 Promtail, Loki가 무엇인지 부터 설명을 하고자 합니다.
각 서버에 저장 되어 있는 로그 내용을 Loki로 전송하는 에이전트입니다.
Promtail은 다음 기능을 수행합니다.
수집된 로그 데이터를 저장하고 쿼리할 수 있는 로그 집계 시스템입니다.
일반적으로 가장 많이 사용하는 로깅 시스템은 ELK(Elasticsearch, Logstash, Kibana)가 있습니다.
ELK는 다음과 같이 구성 되어 있습니다.

그렇다면 많이 사용하는 ELK Stack 대신 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
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 설치가 완료되었습니다.
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 설치가 완료되었다면 설정 파일을 추가 합니다.
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
설정 파일이 추가 하였다면 서비스 파일 생성 및 등록이 필요합니다.
[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.targetsudo systemctl daemon-reload
sudo systemctl enable --now promtail
sudo systemctl status promtail 
Loki, Promtail 작업이 완료되었습니다.
이제 Grafana 대시보드에 연결하여 로그를 보여지도록 설정해야 합니다.
대시보드를 세팅하기 앞서 Loki 서버와 Grafana 연결이 필요합니다.
왼쪽 매뉴에 Configuration > Data Sources 를 클릭합니다.

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

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

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

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

가장 먼저 Grafana 대시보드를 어떤것으로 세팅할지 부터 정해야 합니다.
대시보드 조회는
해당 사이트 우측 하단에 보면 Dashboard ID Copy 버튼이 **있습니다.**
해당 버튼을 클릭하여 대시보드 ID를 복사하시면 됩니다.

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



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

위의 글에선 MariaDB 로깅 시스템 적용을 예로들었으나 다른 시스템도 위와 같이 적용을 하면 됩니다.
다음 포스팅에서 AlertManager 세팅하여 Slack에 경고 메세지가 발생하는 방법을 설명하고자 합니다.