Grafana에 Promtail, Loki 연동하는법

salgu·2022년 2월 10일
0

grafana

목록 보기
2/5
post-thumbnail

Loki는 Grafana에서 제공하는 오픈소스 기반의 로그 집계 시스템입니다.
다른 로그수집 시스템과 다르게 로그의 레이블만 인덱싱하고 원본 로그 메시지는 인덱싱하지 않습니다.
이러한 특징때문에 로키는 자원소모가 적어 효율적인 운영을 할수있습니다.

(로그 수집할 스프링 어플리케이션 - promtail) -> (Loki -> Grafana)

버전 확인

https://github.com/grafana/loki/releases
에서 최신버전을 확인해줍니다.

Loki, Promtail 다운로드

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

압축해제

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

Loki 설정파일 다운

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

Loki 실행

nohup ./loki-linux-amd64 -config.file=loki-local-config.yaml &

Promtail 설정파일 다운

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

clients url이 Loki를 보게 설정해주고
path에는 로그 파일을 보게 설정해줍니다.(ex: logs/data/*.log)

Promtail 실행

nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml &

그후 Grafana 대시보드에 가서 Configuration-Data Sources에 Loki를 추가해줍니다.

Scale Out 고려한 Promtail Start Script 추가

PROMTAIL_PORT=9080

echo "> $PROMTAIL_PORT 에서 구동중인 PROMTAIL PID 확인"
PROMTAIL_PORT=$(lsof -ti tcp:${PROMTAIL_PORT})

if [ -z ${PROMTAIL_PORT} ]
then
  echo "> PROMTAIL 가동 (현재 가동중이지 않음)."
  cd /home/ec2-user/promtail
  nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml &
else
  echo "> 현재 PROMTAIL이 구동중 입니다."
fi

서버 start 스크립트에 해당 코드를 추가해 주시면 scale out시 자동으로 실행됩니다.

LogQL

Log Stream Selector

  • = 정확히 동일함.
  • != 동일하지 않음.
  • =~ 정규표현식 매칭.
  • !~ 정규표현식에 매칭되지 않음.

필터 표현식

  • |= : 같음
  • != : 같지 않음
  • |~ : 정규식 일치
  • !~ : 정규식이 일치하지 않습니다.

"오류"라는 텍스트를 포함하는 줄 반환

{job="varlogs"} |= "error"

"오류" 텍스트를 포함 하지 않는 줄 반환

{job="varlogs"} != "error"

정규식을 사용하여 "오류" 또는 "정보" 텍스트를 포함하는 줄 반환

{job="varlogs"} |~ "error|info"

정규식을 사용하여 "오류" 또는 "정보" 텍스트를 포함 하지 않는 줄 반환

{job="varlogs"} !~ "error|info"

"error" 텍스트는 포함하지만 "info"는 포함 하지 않는 라인을 반환합니다.

{job="varlogs"} |= "error" != "info"

정규식을 사용하여 "잘못된 사용자"라는 텍스트를 포함하고 ("bob" 또는 "redis")를 포함하는 행을 반환합니다.

{job="varlogs"} |~ "Invalid user (bob|redis)"

정규식을 사용하여 "상태 403" 또는 "상태 503"이라는 텍스트를 포함하는 줄 반환

{job="varlogs"} |~ "status [45]03"
profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글