Devops Skill Up/Monitoring

[Grafana] Grafana loki로 컨테이너 로그를 모니터링 해보자

불여우의 길 2024. 4. 4. 11:01

안녕하세유 간만에 블로깅이네유

아무도 안보겠지만유

그냥 쓰는거에유

 

요즘 그라파나를 열심히 ? 파고있는데 말입쇼

 

그라파나 로키라는 로그 모니터링 서비스가 있더라구용?

실제 실무자들에게 더 필요로되는 서비스가 아닐까 싶습니다요.

 

저희회사는 ECS 기반으로 돌아가는 앱이 많기 때문에 컨테이너 로그를 확인하는 것이 가장 유용할 것 같아서 컨테이너 로그를 확인하는 방식으로 적용해보려고 합니다..

 

그러면서 AWS CloudWatch 로그랑도 비교를 해보자구요

 

일단 가보자고

 


Grafana Loki 란?

 

Grafana Loki는 모든 기능을 갖춘 로깅 스택으로 구성할 수 있는 구성 요소 집합입니다.

다른 로깅 시스템과 달리 Loki는 로그에 대한 메타데이터만 인덱싱한다는 아이디어, 즉 레이블(Prometheus 레이블과 마찬가지로)을 기반으로 구축되었습니다. 그런 다음 로그 데이터 자체는 압축되어 Amazon Simple Storage Service(S3) 또는 Google Cloud Storage(GCS)와 같은 객체 저장소에 청크로 저장되거나 파일 시스템에 로컬로 저장됩니다.
작은 인덱스와 고도로 압축된 청크는 작업을 단순화하고 Loki 비용을 크게 낮춥니다.

 

Grafana, GrafanaLoki 구조

 

 

로그 모니터링이 필요한 서버에 설치된 promtail이 서버 내에 저장되는 로그 파일을 찾아서 로키 서버로 보내주는 구조이다.


장비 세팅

 

실제 적용기 ~

 

그라파나 대시보드를 시각화하여 보여주는 그라파나

프롬테일이 보내주는 로그를 수집하는 그라파나 로키

모니터링할 서버에 로그를 수집해서 로키로 보내주는 프롬테일

 

이렇게 세가지 설치가 필요하다.

 

Grafana, Grafana Loki 설치 (docker compose)

그라파나와 그라파나로키는 같은 서버에 docker compose로 컨테이너로 동작되도록 만들었다.

로키와 그라파나를 도커 컨테이너로 구동시키기 위한 docker-compose.yml 파일과

그라파나 로키의 로그 저장, 전송 설정을 위한 loki-config.yml 파일을 적당한 폴더를 만들어 저장해주쟝

 

설치 명령어

mkdir /loki
cd loki
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/production/docker-compose.yaml -O docker-compose.yaml

mkdir config
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/cmd/loki/loki-local-config.yaml -O config/loki-config.yaml

 

docker-compose.yml

그라파나는 3000, 그라파나로키는 3100 포트를 사용하도록 설정해주었다.

그라파나와 그라파나 로키는 같은 서버에 구동되고있고 그라파나 로키에서 그라파나로 전송되는 데이터가 있다.

따라서 방화벽작업이 필요하다구용

 

따라서 인스턴스 보안그룹에 인바운드를 해당 서버 아이피로 뚫어주었당ㅎㅋㅎ

version: "3"

networks:
  loki:

services:
  loki:
    container_name: gafana-loki
    image: grafana/loki:latest
    volumes:
      - /loki/config:/mnt/config
      - /loki:/loki
    ports:
      - "3100:3100"
    command: -config.file=/mnt/config/loki-config.yaml
    networks:
      - loki

  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

 

loki-config.yaml

로키 서버 config 파일이에용

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

ingester:
  wal:
    enabled: true
    dir: /tmp/wal
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 1h       # Any chunk not receiving new logs in this time will be flushed
  max_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1h
  chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
  chunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
  max_transfer_retries: 0     # Chunk transfers disabled

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/boltdb-shipper-active
    cache_location: /tmp/loki/boltdb-shipper-cache
    cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
    shared_store: filesystem
  filesystem:
    directory: /tmp/loki/chunks

compactor:
  working_directory: /tmp/loki/boltdb-shipper-compactor
  shared_store: filesystem

limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 326h

chunk_store_config:
  max_look_back_period: 0s

table_manager:
  retention_deletes_enabled: false
  retention_period: 0s

ruler:
  storage:
    type: local
    local:
      directory: /tmp/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true

 

Promtail 설치

로그 모니터링이 필요한 서버에 프롬테일을 설치해야한다.

 

프롬테일도 마찬가지고 적당한 폴더를 만들어 promtail-config.yml 파일을 만들어주었다.

 

promtail-config.yml 

 

scrape_configs 부분에 모니터링을 원하는 로그 경로를 작성해주면 된다.

컨테이너 로그를 확인하기 위하여 컨테이너 로그만 전송되도록 설정해주었당.

 

clients 부분에는 그라파나 로키라 설치되어있는 ip와 포트를 작성해주면되는데 저의 경우 3100포트로 열어주었기 때문에 3100번으로 작성한거에용

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://{grafana loki server ip}:3100/loki/api/v1/push

scrape_configs:
  - job_name: containers
    static_configs:
    - targets:
        - localhost
      labels:
        job: containerlogs
        __path__: /var/lib/docker/containers/*/*.log

 

프롬테일을 도커로 컨테이너로 동작할경우 로키로 전송할 로그 저장소의 볼륨을 설정해주어야한다.

따라서 프롬테일을 구동시킬때는 docker-compose로 구성하는 것을 추천!

 

docker-compose.yml

version: "3"

networks:
  loki:

services:
  loki:
    container_name: loki-promtail
    image: grafana/promtail:latest
    volumes:
      - /loki/config:/mnt/config
      - /loki:/loki
    ports:
      - "3100:3100"
    command: -config.file=/mnt/config/loki-config.yaml
    networks:
      - loki

  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

 

docker-compose 를 사용하지 않고 컨테이너를 실행하려면 아래처럼 볼륨을 잡아주면됩니당.

다른 방법이 잇나용?

있다면 알려주세용~

누가 볼 지는 모르겠다만..

sudo docker run --name loki-promtail -d \
    -v /var/log:/var/log \
    -v /loki/config:/mnt/config \
    -v /var/log/journal/:/var/log/journal/ \
    -v /run/log/journal/:/run/log/journal/ \
    -v /etc/machine-id:/etc/machine-id \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/docker/containers:/var/lib/docker/containers \
    grafana/promtail:latest \
    -config.file=/mnt/config/promtail-config.yaml

 


Grafana Dashboard 사용방법

일단은 DataSource를 가장먼저 등록해야합니당.

 

Home - Connections - Data sources 로 진입

add new data source 클릭

 

loki 검색하면 바로 나오고용

 

connection url 에 로키 서버 ip:port 작성하면되는데

모니터링 장비에 로키를 설치하고 3100포트로 열어주었기 때문에

http://모니터링서버IP:3100 주소로 작성해준당

 

Home - Explore 에서 그림과 같이 설정해주면 장비에 세팅해둔 로그들이 쫙쫙 떠용

위에 confing 파일에서 job : containerlogs 로 설정해줌에 따라 아래처럼 {job="containerlogs"} 가 select box에 노출됩니당

클릭하면

 

이렇게 실시간 로그를 찍어볼 수 있어용

AWS 라이브테일처럼 쓸 수 있음

 

그리고 DashBoard 도 datasource 고르면 대시보드로 조회도 가능합니다!

'Devops Skill Up > Monitoring' 카테고리의 다른 글

[Grafana] Grafana를 구축해보아요  (2) 2024.04.17