모니터링, 로깅을 위해 Loki, Grafana, Prometheus를 도입한 내용 정리
2023-03-08
아키텍쳐에서 보다시피
Promtail이 로그를 수집하고, Loki로 라벨링화하여 데이터를 전달하면, grafana가 수집한 데이터를 시각화한다.
여기서 나는 Promtail 대신 Loki Docker Plugin을 사용하여 Loki에게 전달해주도록 구성했다.
참조1 : https://grafana.com/docs/loki/latest/clients/docker-driver/#know-issues
참조2 : https://grafana.com/docs/loki/latest/clients/docker-driver/configuration/#supported-log-opt-options
먼저 promtail을 대신해서 각 컨테이너의 로그를 수집할 docker plugin을 설치한다.
명령어 한 줄로 설치할 수 있어서 아주 간단했다.
참조
[root@dev-server docker]# docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
latest: Pulling from grafana/loki-docker-driver
Digest: sha256:82270b494d8c157f035fde65bc0159076f4c4361b5bb061b4fc817e8db04234a
32dbe5a742d5: Complete
Installed plugin grafana/loki-docker-driver:latest
설치 후 확인
[admin@dev-server docker]$ docker plugin ls
ID NAME DESCRIPTION ENABLED
05b5e64f7f26 loki:latest Loki Logging Driver true
수집한 로그를 인덱싱할 Loki 컨테이너를 만들기 위해, 먼저 config 파일을 작성한다.
loki-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
loki docker plugin으로 컨테이너 로그를 수집하려 한다면, docker daemon 설정을 변경해줘야 한다.
/etc/docker/daemon.json 수정
{
"debug": true,
"log-driver": "loki",
"log-opts": {
"loki-url": "http://172.19.0.10:3100/loki/api/v1/push",
"loki-batch-size": "400"
}
}
/etc/docker/daemon.json 파일은 Docker daemon의 설정 파일로, Docker daemon이 실행되면서 사용하는 옵션들을 지정할 수 있다.
기본 로그 드라이버는 json-file로 설정되어 있으나, loki로 변경해준다.
이 설정 후 docker를 재시작하여 변경된 설정을 반영한다.
sudo systemctl restart docker
아래 명령어로 Loki 컨테이너를 띄운다.
#
docker run -d \
--restart=always \
--network [네트워크이름] \
--ip 172.19.0.10 \
--name=loki \
--mount type=bind,source=[loki-config.yaml파일 경로],target=/etc/loki/local-config.yaml \
-p 3100:3100 \
grafana/loki:2.7.3
docker run \
--[다른 옵션] \
--log-driver=loki \
--log-opt loki-url=<LOKI_URL> \
<IMAGE>
다음글에서는 loki로 수집한 로그를 어떻게 grafana에서 대시보드로 시각화하는지 정리하겠다.