본문 바로가기
클라우드/Prometheus

Grafana - Loki - Promtail 연동 대시보드 로그보기

by 정권이 내 2021. 6. 9.

 

 

Grafana Loki

Loki 는 Grafana에서 제공하는 오픈소스 기반의 로그 집계 시스템입니다.

 

다른 로그수집 시스템과 다르게 로그의 레이블만 인덱싱하고 원본 로그 메시지는 인덱싱하지 않습니다.

이러한 특징때문에 로키는 자원소모가 적어 효율적인 운영을 할수있습니다.

 

멀티 테넌시

Loki는 멀티테넌시를 지원하므로 테넌트간 데이터는 완전히 분리됩니다. 멀티 테넌시는 테넌트 ID를통해

구현되고 멀티 테넌시모드를 사용하지않으면 내부적으로 가짜 테넌트 ID가 지정됩니다.

 

운영 모드

Loki는 로컬 혹은 소규모 실행모드와 수평확장 모두에 최적화 되있습니다.

 

Loki & Promtail 설치

Loki 는 바이너리와 설정파일을 따로 받아야하고 Promtail 도 같이 설치해야 합니다.

Promtail 은 Loki 에게 로그를 보내주는 시스템입니다.

 

바이너리 파일 다운로드

$ wget https://github.com/grafana/loki/releases/download/v2.2.1/loki-linux-arm64.zip
$ wget https://github.com/grafana/loki/releases/download/v2.2.1/promtail-linux-amd64.zip

 

압축파일 해제

$ unzip loki-linux-amd64.zip
$ unzip promtail-linux-amd64.zip

 

 

설정 파일

압축파일을 해제한곳과 같은 경로에서 파일을 받아줍니다.

$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
$ wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml

 

Loki 실행

 

Loki를 실행할때는 컨피그 파일을 지정하여 실행합니다.

$ ./loki-linux-amd64 -config.file=loki-local-config.yaml

 

로그를 확인해보고싶다면 다음 명령어를 실행해봅시다.

$ curl -XGET http://localhost:3100/metrics

 

메트릭 데이터를 출력하는것을 볼수있습니다.

 

 

Promtail & Loki 연동

애플리케이션으로부터 로그를 얻어서 Loki 로 전송하고싶다면 우선 Promtail 설정파일을 수정해야 합니다.

위에서 받은 promtail-local-config.yaml 파일을 열어서 확인해봅시다.

server:
http_listen_port: 9080
grpc_listen_port: 0

positions:
filename: /tmp/positions.yaml

clients:
- url: http://localhost:3100/loki/api/v1/push

scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log

Promtail 의 설정파일에 대한 설명은 https://grafana.com/docs/loki/latest/clients/promtail/configuration/

에 자세하게 나와있습니다. 여기서는 테스트를 위한 scrape_configs 부분만 설명하겠습니다.

 

scrape_configs 는 Promtail 에서 Loki 로 로그를 전송하기 위한 설정 부분입니다.

  • job_name : 로그 그룹을 구별하는 네이밍 입니다.

  • targets : Promtail 구버전에서는 필수로 작성해야하는 옵션이지만 현재는 아닙니다.

    Prometheus 에서 직접적으로 사용하기위한 코드입니다.

  • labels : 모든 로그라인에 대해 해당 라벨을 적용합니다. 주로 애플리케이션 이름을 사용합니다.

  • path : Promtail을 사용하는 핵심입니다. 읽을 로그의 위치를 지정합니다.

 

설정에 대한 설명을 확인했으니 scrape_configs 부분을 다시 작성해봅시다.

path는 본인이 테스트할 로그 위치를 직접 지정하면 됩니다.

- job_name: grafana
static_configs:
- targets:
- grafana
labels:
job: grafana
__path__: "/var/log/*log"

 

 

Promtail 실행

$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml

설정이 잘 되었다면 로그파일을 읽었다는 내용의 로그가 정상적으로 찍힐것입니다.

 

 

Grafana 로그보기

이제 Promtail 에서 Loki 로 로그전송이 되고있으니 Grafana 대시보드에서 로그를 확인해봅시다.

 

Loki Data Source 생성

 

본인의 그라파나 사이트 왼쪽 탭에있는 Data Source 로 이동합니다.

 

 

Logging & document databases 에서 Loki 를 선택합니다.

 

 

Name, URL 을 지정해줍니다. URL은 그라파나가 실행중인 서버의 IP주소와 3100 포트를 함께

작성하면 됩니다. 나머지 옵션들은 무시하고 Save&Test 버튼을 눌러서 저장합니다.

 

 

이제 대시보드 창으로가서 새 패널을 추가하여 Loki를 등록해봅시다. 위 사진처럼 DataSource 에 Loki를

등록하고 Log browserPromtail 에서 path, job 으로 지정한 이름을 확인하여 입력합니다.

 

입력이 잘 되었다면 패널에 애플리케이션에서 출력하는 로그를 Grafana UI 에서 확인할수 있게됩니다.

 

사실 이렇게 단순히 로그만찍는것은 큰의미가 없고 로그내의 특정 키워드의 발생빈도나 에러로그

감지를 할수있는 쿼리를 만들어서 알람시스템을 만드는것이 Promtail - Loki - Grafana 연동의

주된 목적이라고 생각합니다.

 

이번에는 간단하게 로그를 출력하는 애플리케이션에 대해 Promtail 에서 로그를읽고 Loki 에게전송하여

저장하고 Grafana 는 Loki 에 저장된 로그를 대시보드로 출력해보는 간단한 테스트였습니다.

 

Grafana 쿼리 공부를 더해서 로그내의 특정키워드나 에러상황 감지에 대한 테스트까지 해봐야겠습니다.

 

참조

https://grafana.com/docs/loki/latest/overview/

반응형

댓글