Grafana -Loki-Promtail 대시보드로그 설정

2022. 9. 16. 11:01

 

Grafana Loki

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

 

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

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

 

멀티 테넌시

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

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

 

운영 모드

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

 

 

Loki(ubuntu)       DB 
--------------------------------------------------
Loki 바이너리 및 구성 파일을 저장할 새 디렉터리를 만듭니다.
sudo mkdir /opt/loki
--------------------------------------------------
Loki 저장소의 릴리스 페이지에서 아카이브를 다운로드
sudo wget -qO /opt/loki/loki.gz "https://github.com/grafana/loki/releases/download/v${LOKI_VERSION}/loki-linux-amd64.zip"
--------------------------------------------------
아카이브에서 바이너리 파일 추출
sudo gunzip /opt/loki/loki.gz
--------------------------------------------------
파일에 대한 실행 권한 설정
sudo chmod a+x /opt/loki/loki
--------------------------------------------------
디렉토리 에서 명령 /usr/local/bin에 대한 심볼릭 링크를 생성
sudo ln -s /opt/loki/loki /usr/local/bin/loki
--------------------------------------------------
Loki용 구성 파일 다운로드
sudo wget -qO /opt/loki/loki-local-config.yaml "https://raw.githubusercontent.com/grafana/loki/v${LOKI_VERSION}/cmd/loki/loki-local-config.yaml"
--------------------------------------------------
설치를 확인하기 위해 Loki 버전을 확인
loki -version
--------------------------------------------------
Loki를 서비스로 실행하도록 systemd를 구성할 수 있습니다. 시스템 단위 파일 생성:
sudo sudo /etc/systemd/system/loki.service

[Unit]
Description=Loki log aggregation system
After=network.target

[Service]
ExecStart=/opt/loki/loki -config.file=/opt/loki/loki-local-config.yaml
Restart=always

[Install]
WantedBy=multi-user.target
--------------------------------------------------
Loki 서비스 시작
sudo service loki start
sudo systemctl enable loki

------------------------------------------------------------------------------------------------------------------------------------------
Promtail(ubuntu) 에이전트
--------------------------------------------------
GitHub에서 Promtail 릴리스의 최신 버전 태그를 검색하고 버전 태그를 변수에 할당합니다.
PROMTAIL_VERSION=$(curl -s "https://api.github.com/repos/grafana/loki/releases/latest" | grep -Po '"tag_name": "v\K[0-9.]+')
--------------------------------------------------
Promtail 바이너리 및 구성 파일을 저장할 새 디렉터리를 만듭니다.
sudo mkdir /opt/promtail
--------------------------------------------------
다음 명령을 실행하여 Loki 리포지토리의 릴리스 페이지에서 Promtail 아카이브를 다운로드합니다.
sudo wget -qO /opt/promtail/promtail.gz "https://github.com/grafana/loki/releases/download/v${PROMTAIL_VERSION}/promtail-linux-amd64.zip"
--------------------------------------------------
아카이브에서 바이너리 파일 추출
sudo gunzip /opt/promtail/promtail.gz
--------------------------------------------------
추출된 파일에 대한 실행 권한 설정
sudo chmod a+x /opt/promtail/promtail
-------------------------------------------------
디렉토리 에 있는 promtail명령에 대한 심볼릭 링크를 만들 수 있습니다 .
sudo ln -s /opt/promtail/promtail /usr/local/bin/promtail
--------------------------------------------------
Promtail용 구성 파일 다운로드
sudo wget -qO /opt/promtail/promtail-local-config.yaml "https://raw.githubusercontent.com/grafana/loki/v${PROMTAIL_VERSION}/clients/cmd/promtail/promtail-local-config.yaml"
--------------------------------------------------
Promtail 버전을 확인하여 설치가 성공적으로 완료되었는지 확인합니다.
promtail -version
--------------------------------------------------
Promtail을 서비스로 실행하도록 systemd를 구성할 수 있습니다.
sudo vi /etc/systemd/system/promtail.service

[Unit]
Description=Promtail client for sending logs to Loki
After=network.target

[Service]
ExecStart=/opt/promtail/promtail -config.file=/opt/promtail/promtail-local-config.yaml
Restart=always
TimeoutStopSec=3

[Install]
WantedBy=multi-user.target
------------------------------------------------
Promtail 서비스 시작
sudo service promtail start
-------------------------------------
부팅 시 Promtail을 시작
sudo systemctl enable promtail
-------------------------------------

sudo service promtail status
sudo service loki status
제거시

sudo service loki stop
sudo systemctl disable loki
sudo rm -rf /etc/systemd/system/loki.service
sudo systemctl daemon-reload
sudo systemctl reset-failed
sudo rm -rf /opt/loki
sudo rm -rf /usr/local/bin/loki

-----------------------------------------------
sudo service promtail stop
sudo systemctl disable promtail
sudo rm -rf /etc/systemd/system/promtail.service
sudo systemctl daemon-reload
sudo systemctl reset-failed
sudo rm -rf /opt/promtail
sudo rm -rf /usr/local/bin/promtail

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

$ 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 browser  Promtail 에서 path, job 으로 지정한 이름을 확인하여 입력합니다.

 

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

 

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

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

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

 

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

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

 

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

'IT' 카테고리의 다른 글

CentOS 7 방화벽 firewalld  (0) 2022.11.08
GCP 외부 ssh 접속시 !  (0) 2022.11.08
iptables ufw 충돌 ufw 룰이 안먹음 iptables 룰이안먹음  (0) 2022.08.02
VMware vSphere 성능비교  (0) 2022.07.22
헤놀로지 7.1 후기  (0) 2022.06.27

BELATED ARTICLES

more