구성

Promtail
- loki프로젝트에서 제공하는 로그 수집기
✅ Promtail 바이너리 다운로드
# 버전 확인 (예: 2.9.4)
VERSION="2.9.4"
# 바이너리 다운로드 및 압축 해제
wget https://github.com/grafana/loki/releases/download/v${VERSION}/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
chmod +x promtail-linux-amd64
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
✅ Config 파일 작성
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /var/log/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push # Loki 주소로 입력해야 함.
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs # QL 에서 잡을 job 이름.
__path__: /var/log/*.log # 수집할 로그 파일
✅ Systemd 서비스 등록
## /etc/systemd/system directory
[Unit]
Description=Promtail Log Collector
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/config.yaml
Restart=always
[Install]
WantedBy=multi-user.target
---
systemctl daemon-reload
🐳 Docker로 Promtail Container
✅ Promtail config 파일 작성
# config-promtail.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push # Loki의 주소에 맞게 수정
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
🐳 Docker로 Run
docker run -dit \
--name promtail \
-v /var/log:/var/log \ # volume mount
-v /$(pwd)/config-promtail.yaml:/etc/promtail/config.yaml \
grafana/promtail:latest \
-config.file=/etc/promtail/config.yaml
🐙 Docker-Compose Version
version : '3'
services:
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
- ./config-promtail.yaml:/etc/promtail/config.yaml
command: -config.file=/etc/promtail/config.yaml
---
docker-compose up -d promtail
네트워크 구성
🔥 Promtail과 loki 사이 통신 방식은 push. Promtail 에서 loki 쪽으로 데이터를 push 해줌
Loki
내가 사용하는 방식의 Loki는 Grafana, Prometheus 등 과 같이 올렸어야 했기 때문에 Docker Container 형식으로 올렸다. 따라서, Docker Container 으로 정리했다.
🐙 Docker-Compose Version
- loki-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
log_level: info
ingester:
lifecycler:
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 3m
max_chunk_age: 1h
schema_config:
configs:
- from: 2022-01-01
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /tmp/loki/index
cache_location: /tmp/loki/boltdb-cache
filesystem:
directory: /tmp/loki/chunks
limits_config:
allow_structured_metadata: false # 이 항목이 없으면 최신 Loki에서 기동 실패
common:
path_prefix: /tmp/loki # compactor 등 여러 모듈이 이 경로를 사용
compactor:
working_directory: /tmp/loki/compactor # 필수
ruler:
alertmanager_url: http://alertmanager:9093
enable_alertmanager_v2: true
enable_api: true
rule_path: /tmp/loki/rules-temp
storage:
type: local
local:
directory: /tmp/loki/rules
loki:
image: grafana/loki:latest # docker 제공 공식 image
container_name: loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/config.yaml
volumes:
- /home/rocky/grafana/loki/loki-cfg.yaml:/etc/loki/config.yaml
- /home/rocky/grafana/loki/loki-data/rules:/tmp/loki/rules
- /home/rocky/grafana/loki/loki-data/rules-temp:/tmp/loki/rules-temp
- /home/rocky/grafana/loki/loki-data/index:/tmp/loki/index
- /home/rocky/grafana/loki/loki-data/chunks:/tmp/loki/chunks
- /home/rocky/grafana/loki/loki-data/boltdb-cache:/tmp/loki/boltdb-cache
- /home/rocky/grafana/loki/loki-data/compactor:/tmp/loki/compactor
- /home/rocky/grafana/loki/loki-data/wal:/tmp/loki/wal
restart: always
networks: # 네트워크는 기존 docker-compose에서 Grafana와 같은 네트워크로 설정해주면 된다.(난 따로 설정 안함.)
- grafana_default
- /home/rocky/grafana/loki/loki-cfg.yaml:/etc/loki/config.yaml
- /home/rocky/grafana/loki/loki-data/rules:/tmp/loki/rules
- /home/rocky/grafana/loki/loki-data/rules-temp:/tmp/loki/rules-temp
- /home/rocky/grafana/loki/loki-data/index:/tmp/loki/index
- /home/rocky/grafana/loki/loki-data/chunks:/tmp/loki/chunks
- /home/rocky/grafana/loki/loki-data/boltdb-cache:/tmp/loki/boltdb-cache
- /home/rocky/grafana/loki/loki-data/compactor:/tmp/loki/compactor
- /home/rocky/grafana/loki/loki-data/wal:/tmp/loki/wal
위의 Volume mount한 디렉토리를 생성하지 않으면 Container가 실행되지 않는다.
mkdir -p /home/rocky/grafana/loki/loki-data
mkdir -p /home/rocky/grafana/loki/loki-data/{rules,rules-temp,index,chunks,boltdb-cache,compactor,wal}
이렇게 먼저 디렉토리 먼저 생성
퍼미션 부여
chown -R 10001:10001 /home/rocky/grafana/loki/loki-data
chmod -R 777 /home/rocky/grafana/loki/loki-data
위에 처럼 설정을 다 완료하고, 컨테이너가 다 문제 없이 돌고 있다면, Grafana 에서 loki Data source를 등록해주면 된다.
Grafana > ⚙️ Settings > Data Sources > loki
URL이 다음 중 하나여야 한다.
- http://loki:3100 ← Grafana와 Loki가 같은 도커 네트워크일 때 (보통 Compose 환경)
- http://localhost:3100 ← Grafana가 호스트에 설치되어 있고 Loki도 호스트에서 도는 경우
이렇게 설정해주면 쿼리를 날려 데이터가 잘 나오는지 확인하면 된다.

