[Promtail] #7.Docker기반 Promtail 설치 및 설정 가이드
Grafana Promtail Promtail Architecture
- 아래 그림에서 Promtail 에 해당하는 부분에 해당함
- Prometheus Promtail는 Grafana에서 제공하는 오픈소스 기반의 로그 수집기로 대상서버에 설치하여 Loki가 설치된 서버로 전송한다.
protail 대신에 flunt-bit를 사용하여 구성도 가능하다.
테스트 수행한 환경
- 인터넷가능한 환경, Rocky Linux 8.6, Docker가 구성된 환경
1. Promtail docker-compose 구동을 위한 스크립트 준비
전체파일 구성
tree
├── create.sh
├── delete.sh
├── docker-compose.yml
├── log.sh
├── promtail
│ └── promtail.yaml
├── start.sh
└── stop.sh
1) Promtail의 설정 샘플
주요설정 설명
- promtail.yaml: Promtail에서 사용하는 config 작성, 컨테이너 로그를 수집하여 label명 변경 및 multiline처리하는 샘플설정
mkdir promtail
vi promtail/promtail.yaml
# https://grafana.com/docs/loki/latest/clients/promtail/configuration/
# https://docs.docker.com/engine/api/v1.41/#operation/ContainerList
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: flog_scrape
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
filters:
- name: label
values: ["logging=promtail"]
relabel_configs:
- source_labels: ['__meta_docker_container_name']
regex: '/(.*)'
target_label: 'container'
- source_labels: ['__meta_docker_container_log_stream']
target_label: 'logstream'
- source_labels: ['__meta_docker_container_label_logging_jobname']
target_label: 'job'
pipeline_stages:
- cri: {}
- multiline:
firstline: ^\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2},\d{3}
max_wait_time: 3s
# https://grafana.com/docs/loki/latest/clients/promtail/stages/json/
- json:
expressions:
#message: message
level: level
#output: 'message'
- docker-compose.yml 설정 샘플
vi docker-compose.yml
version: '3.7'
# monitor-net이름으로 이미 구성한 경우에는 networks부분은 주석처리
networks:
monitor-net:
driver: bridge
services:
promtail:
# image: grafana/promtail:2.7.4
image: grafana/promtail:latest
container_name: promtail
volumes:
- ./promtail/promtail.yaml:/etc/promtail/docker-config.yaml
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock
command: -config.file=/etc/promtail/docker-config.yaml
depends_on:
- loki
networks:
- monitor-net
2) docker 컨테이너 생성,삭제,구동,중지,로그조회 등 스크립트 작성
cat > create.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml logs -f
EOF
cat > delete.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml down -v
EOF
cat > start.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml start
EOF
cat > stop.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml stop
EOF
cat > log.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml logs -f
EOF
chmod +x *.sh
2. Promtail 정상구동여부 확인
### 구동하기
./create.sh
### 도커컨테이너 정상구동여부 확인
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2eb3475e7ee2 grafana/promtail:latest "/usr/bin/promtail -…" 10 minutes ago Up 10 minutes promtail
## promtail 로그조회
docker logs promtail
level=info ts=2023-04-19T11:36:16.027284541Z caller=promtail.go:133 msg="Reloading configuration file" md5sum=42c33b075d67a62ff1f12020cbd260a6
level=info ts=2023-04-19T11:36:16.032321968Z caller=server.go:323 http=[::]:9080 grpc=[::]:35181 msg="server listening on addresses"
level=info ts=2023-04-19T11:36:16.037214244Z caller=main.go:174 msg="Starting Promtail" version="(version=2.8.0, branch=HEAD, revision=90888a0cc)"
level=warn ts=2023-04-19T11:36:16.037336243Z caller=promtail.go:265 msg="enable watchConfig"
level=info ts=2023-04-19T11:36:21.032927326Z caller=target_group.go:128 msg="added Docker target" containerID=80c2a646ab3369424b275c3c46e36505cce4c10d6cf047a9e5732337e419f87c
3. 구동화면 예시
- Grafana 데이터소스 -> Loki 선택 후 조회한 화면 예시
댓글남기기