Loki는 Grafana에서 제공하는 오픈소스 기반의 로그 집계 시스템입니다.
다른 로그수집 시스템과 다르게 로그의 레이블만 인덱싱하고 원본 로그 메시지는 인덱싱하지 않습니다.
이러한 특징때문에 로키는 자원소모가 적어 효율적인 운영을 할수있습니다.
(로그 수집할 스프링 어플리케이션 - promtail) -> (Loki -> Grafana)
https://github.com/grafana/loki/releases
에서 최신버전을 확인해줍니다.
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
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
nohup ./loki-linux-amd64 -config.file=loki-local-config.yaml &
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
clients url이 Loki를 보게 설정해주고
path에는 로그 파일을 보게 설정해줍니다.(ex: logs/data/*.log)
nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml &
그후 Grafana 대시보드에 가서 Configuration-Data Sources에 Loki를 추가해줍니다.
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시 자동으로 실행됩니다.
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"