본문 바로가기
모티터링도구

docker 를 이용한 loki 와 promtail, grafana 설정 (docker compose)

by 아이티.파머 2023. 4. 27.
반응형

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 를 작성하여 원하는 로깅 파일을 화면에 출력해보자.

  1. explore 화면 진입 > loki 선택

  1. 위 화면에 보면 promtail.yml 에서 입력했던 job 정보와 filenme 등 label 정보를 확인 할 수있다.
    1. 이렇게 builber 기능을 사용하여 query를 작성해도 되고 직접 우측 상단의 code 탭을 클릭하여 텍스트로 작성 할 수도 있다. 개인적으로는 빌더가 편하다.
    2. +Add Query 를 통해 등록된 여러 호스트의 라벨들을 보고 더 추가할 수도 있다.
  2. Line contains 를 설정하여 내가 보고자하는 특정 메세지를 추출하여 볼수도 있다. success, info, error 등등 원하는 문구에 대한 필터링 가능
  3. 우측상단의 Run Query 를 실행하면 수집되 로그정보를 화면에서 확인 할 수있다.

  1. 앞서 이야기 했던 Line contains 에서 필터 정보를 추가해 쿼리를변경하면 내가 원하는 로그만 추출 받아 확인 가능 하다.

여기서는 Line contains 에 ‘hikari’ 를 추가하여 {job="crawler_label_97"} |=hikari`` 라는 쿼리를 만들어 냈으며 Run Query 실행시 해당 구문이 들어간 라인만 나오는것을 확인 할 수있다.

Loki 와 Promtail을 사용하여 로그를 읽어오고 필터링 하는 작업을 해보았는데, 이게 끝은 아닌거 같다.

실제 로키와 Promtail을 사용하여 특정문구가 나왔을때 (오류나, 특이사항 발생시) , Slack 연동을 통해 알림이 가게 할수도 있다.

지금은 한서버에 로키와 프롬테일을 설치하여 사용하였지만 호스트가 늘어나면 다음과 같이 확장 할수도 있다.

호스트 서버가 늘어날때 promtail 만 설치하고 loki 서버로 log 데이터를 전송하도록 하고 loki 는 로그데이터를 indexing 한다.

반응형