docker 를 이용한 loki 와 promtail, grafana 설정 (docker compose)
앞서 그라파나는 설치했기때문에 그라파나 설치 하는 부분은 생략함.
Loki 와 promtail 대한 설명과 역할은 다음 링크에서 확인
loki-promtail-compose.yml
loki와 promtail 의 이미지를 담은 yml 파일이다.
vim loki-promtail-compose.yml
version: '3'
services:
loki:
image: grafana/loki:2.8.0
ports:
- 3100:3100
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:2.8.0
ports:
- "9080:9080"
volumes:
- ./promtail-config.yaml:/etc/promtail/config.yaml
- /var/log:/var/log
- /server/logs:/server/logs
command: -config.file=/etc/promtail/config.yaml
depends_on:
- loki
실행방법
docker compose -f loki-promtail-compose.yml up -d --build
mezzo@aerepodb-12-97:~/docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e18379a9ddb prom/node-exporter "/bin/node_exporter …" 21 hours ago Up 21 hours 9100/tcp docker_prometheus_agent_1
6566be83ff0a prom/node-exporter "/bin/node_exporter …" 21 hours ago Up 21 hours 0.0.0.0:9100->9100/tcp, :::9100->9100/tcp docker_node_exporter_1
**bbfe131dc967 grafana/promtail:2.8.0 "/usr/bin/promtail -…" 21 hours ago Up 21 hours 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp docker_promtail_1**
**5b98ed324355 grafana/loki:2.8.0 "/usr/bin/loki -conf…" 21 hours ago Up 21 hours 0.0.0.0:3100->3100/tcp, :::3100->3100/tcp docker_loki_1**
e5ac41a0f164 grafana/grafana:latest "/run.sh" 21 hours ago Up 21 hours 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp grafana
c00b755a63bc prom/prometheus:latest "/bin/prometheus --c…" 21 hours ago Up 21 hours 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
yaml 의 주요설정을 보면 다음과 같다.
- loki 볼륨링크
-
- ./loki-config.yaml:/etc/loki/local-config.yaml.container 의 local-config 파일을 host 서버의 ./loki-config.yaml 로 대체한다.
-
- promtail 의 볼륨링크
-
- ./promtail-config.yaml:/etc/promtail/config.yaml
- /var/log:/var/log
- /server/logs:/server/logs
- 로그가 저장된 위치의 볼륨링크를 걸어 주어 promtail서버에서 수집 가능 하도록 설정 한다.
-
- promtail command 명령어
- container 실행시 /etc/promtail/config.yaml 을 읽어 실행시킨다.
- 실제 config.yaml 은 볼륨링크로써 host 서버의 ./promtail-config.yml 을 참고한다.
loki 와 promtail 설정 예제. (wget 으로 샘플파일을 다운 로드 할 수있다. refrencs 문서 참조)
loki-config.yml
해당 파일도 docker-compose -f …. <생략> 로 실행하려는 위치에 미리 생성해 둔다.
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 0.0.0.0
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
# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
# reporting_enabled: false
promtail-config.yml
해당 파일은 docker-compose -f …. <생략> 로 실행하려는 위치에 미리 생성해 둔다.
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://192.168.12.97:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- 192.168.12.97
labels:
job: varlogs_097
__path__: /var/log/*log
- job_name: crawler
static_configs:
- targets:
- 192.168.12.97
labels:
job: crawler_label_97
__path__: /server/logs/*log
promtail 의 주요설정
- clients url : loki server 가 설치된 경로와 rest api url 을 입력한다.
- path : volumls 으로 링크를 설정했던 log 파일의 위치를 설정한다.
- targets : docker 로 사용하는경우 container 의 ip가 아닌 서버가 설치된 ip를 target 으로 설정해 준다.
- 여기서 설정하는 labels 와 path , job 등등의 속성들은 추후에 grafana 에서 explore 할때 변수로 사용한다.
지금까지 설정한 부분을 그림으로 보면 다음과 같다.
그럼 이제 grafana 에 loki plug in 을 설치 하고 연결한뒤에 exploer 를 사용하여 수집된 로그에 대한 데시보드를 생성 해보자 .
loki plug in 설치
confingration > add new data source > loki
install 함, 이미 설치 되어 있는경우 이미지를 클릭하고 설정 정보를 입력 한다.
- url : loki server 가 설치된 서버 아이피와 포트를 적어준다.
Explore 메뉴에서 loki 를 선택하고 Query 를 작성하여 원하는 로깅 파일을 화면에 출력해보자.
- explore 화면 진입 > loki 선택
- 위 화면에 보면 promtail.yml 에서 입력했던 job 정보와 filenme 등 label 정보를 확인 할 수있다.
- 이렇게 builber 기능을 사용하여 query를 작성해도 되고 직접 우측 상단의 code 탭을 클릭하여 텍스트로 작성 할 수도 있다. 개인적으로는 빌더가 편하다.
- +Add Query 를 통해 등록된 여러 호스트의 라벨들을 보고 더 추가할 수도 있다.
- Line contains 를 설정하여 내가 보고자하는 특정 메세지를 추출하여 볼수도 있다. success, info, error 등등 원하는 문구에 대한 필터링 가능
- 우측상단의 Run Query 를 실행하면 수집되 로그정보를 화면에서 확인 할 수있다.
- 앞서 이야기 했던 Line contains 에서 필터 정보를 추가해 쿼리를변경하면 내가 원하는 로그만 추출 받아 확인 가능 하다.
여기서는 Line contains 에 ‘hikari’ 를 추가하여 {job="crawler_label_97"} |=
hikari`` 라는 쿼리를 만들어 냈으며 Run Query 실행시 해당 구문이 들어간 라인만 나오는것을 확인 할 수있다.
Loki 와 Promtail을 사용하여 로그를 읽어오고 필터링 하는 작업을 해보았는데, 이게 끝은 아닌거 같다.
실제 로키와 Promtail을 사용하여 특정문구가 나왔을때 (오류나, 특이사항 발생시) , Slack 연동을 통해 알림이 가게 할수도 있다.
지금은 한서버에 로키와 프롬테일을 설치하여 사용하였지만 호스트가 늘어나면 다음과 같이 확장 할수도 있다.
호스트 서버가 늘어날때 promtail 만 설치하고 loki 서버로 log 데이터를 전송하도록 하고 loki 는 로그데이터를 indexing 한다.
'모티터링도구' 카테고리의 다른 글
Springboot Prometheus , micrometer architecture (0) | 2024.05.26 |
---|---|
docker 를 이용한 gafana, promethous 사용법 (docker compose) (0) | 2023.04.27 |
grafana Mysql Datasource 연동 (0) | 2020.08.31 |
exporter 설치 및 Grafana 연동 (0) | 2020.08.31 |
Grafana loki, promtail (0) | 2020.08.31 |