소개
Loki 구성에 대한 실습 랩에 오신 것을 환영합니다. Loki 는 Prometheus 에서 영감을 받은 수평 확장 가능하고 고가용성이며 멀티 테넌트 (multi-tenant) 로그 집계 시스템입니다. 매우 비용 효율적이고 운영하기 쉽도록 설계되었습니다.
본 랩에서는 로그 수집 및 확인의 완전한 기본 워크플로우에 중점을 둘 것입니다. 다음 세 가지 주요 구성 요소를 사용합니다.
- Loki: 로그 저장 및 처리를 담당하는 메인 서버입니다.
- Promtail: 로컬 로그 파일을 검색하여 Loki 인스턴스로 전송하는 에이전트입니다.
- Grafana: Loki 에 연결하여 로그를 탐색하고 쿼리할 시각화 플랫폼입니다.
이 랩 환경에서는 이미 Loki 및 Grafana 컨테이너가 시작된 상태입니다. 여러분의 임무는 Promtail 을 구성하고 실행하여 시스템 로그를 Loki 로 전송한 다음, Grafana 에서 이를 시각화하는 것입니다.
로그 수집을 위한 Promtail Docker 이미지 Pull 하기
이 단계에서는 Promtail 의 공식 Docker 이미지를 다운로드합니다. Promtail 은 로그 파일을 검색하고 그 내용을 Loki 로 전송하는 역할을 하는 에이전트입니다. 설정을 깔끔하고 격리된 상태로 유지하기 위해 Docker 컨테이너로 실행할 것입니다.
Docker Hub 에서 Promtail 이미지를 가져오려면 터미널에서 다음 명령을 실행하십시오.
docker pull grafana/promtail
이미지의 각 레이어에 대한 다운로드 진행 상황을 보여주는 출력을 보게 될 것입니다. 완료되면 이미지가 로컬 머신에서 사용 가능해집니다.
Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail
이제 이미지를 확보했으므로 다음 단계에서 이를 위한 구성 파일 (configuration file) 을 생성할 수 있습니다.
시스템 로그 수집을 위한 promtail.yml 생성
이 단계에서는 Promtail 을 위한 구성 파일 (configuration file) 을 생성합니다. 이 YAML 파일은 Promtail 에게 Loki 서버의 위치와 모니터링해야 할 로그 파일이 무엇인지 알려줍니다. 모든 작업은 ~/project 디렉토리에서 수행해야 합니다.
먼저, nano 편집기를 사용하여 promtail.yml이라는 새 파일을 생성합니다.
nano promtail.yml
이제 다음 구성을 복사하여 nano 편집기에 붙여넣으십시오.
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
이 구성을 자세히 살펴보겠습니다.
server: Promtail 자체의 웹 서버를 구성하지만, 이 랩에서는 사용되지 않습니다.positions: Promtail 이 재시작 시 오래된 로그를 다시 보내지 않도록 각 로그 파일에서 마지막으로 읽은 위치를 기록하는 파일을 지정합니다.clients: Loki 인스턴스의 주소를 정의합니다. Promtail 과 Loki 가 동일한 Docker 네트워크에서 실행될 것이고loki가 컨테이너 이름이므로http://loki:3100을 사용합니다.scrape_configs: 이것이 핵심 섹션입니다./var/log/디렉토리에서.log로 끝나는 모든 파일을 수집하는varlogs라는job을 정의합니다.
내용을 붙여넣은 후, Ctrl+X를 누른 다음 Y, 마지막으로 Enter를 눌러 파일을 저장하고 nano를 종료하십시오.
Loki 를 가리키도록 Promtail 컨테이너 실행
이 단계에서는 방금 생성한 구성 파일을 사용하여 Promtail 컨테이너를 시작합니다. 이 명령은 구성 파일과 호스트의 로그 디렉터리 모두를 컨테이너로 마운트 (mount) 합니다.
Promtail 을 시작하려면 다음 docker run 명령을 실행하십시오.
docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml
명령어 플래그에 대한 설명은 다음과 같습니다.
-d: 컨테이너를 데몬 (detached) 모드 (백그라운드) 로 실행합니다.--name promtail: 나중에 쉽게 참조할 수 있도록 컨테이너에 이름을 할당합니다.--network monitoring-net: 컨테이너를 Loki 및 Grafana 와 동일한 네트워크에 연결합니다.-v $(pwd)/promtail.yml:/etc/promtail/config.yml: 로컬의promtail.yml을 컨테이너 내의 예상 위치 (/etc/promtail/config.yml) 로 마운트합니다.-v /var/log:/var/log: 호스트의/var/log디렉터리를 컨테이너로 마운트하여 Promtail 이 로그 파일을 읽을 수 있도록 합니다.-config.file=/etc/promtail/config.yml: 컨테이너 내부의 Promtail 프로세스에게 사용할 구성 파일이 무엇인지 알려줍니다.
명령을 실행한 후 Docker 는 새 컨테이너의 고유 ID 를 출력합니다. docker ps 명령을 사용하여 컨테이너가 실행 중인지 확인할 수 있습니다.
docker ps
실행 중인 컨테이너 목록에서 promtail, loki, grafana를 볼 수 있어야 합니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... grafana/promtail "/usr/bin/promtail -c…" A few seconds ago Up a few seconds 0.0.0.0:9080->9080/tcp promtail
... grafana/grafana "/run.sh" About a minute ago Up About a minute 0.0.0.0:8080->3000/tcp grafana
... grafana/loki "/usr/bin/loki -conf…" About a minute ago Up About a minute 0.0.0.0:3100->3100/tcp, 9095/tcp loki
Grafana 에 Loki 를 데이터 소스로 추가
이 단계에서는 Grafana 가 Loki 를 데이터 소스로 사용하도록 구성합니다. 이렇게 하면 Promtail 이 Loki 로 보내는 로그를 쿼리하고 시각화할 수 있습니다.
다음 지침을 주의 깊게 따르십시오.
LabEx VM 의 리버스 프록시 설정으로 인해 데스크톱 인터페이스로 전환하고, 왼쪽 상단 모서리에 있는 Firefox 브라우저를 클릭한 다음 주소창에
http://localhost:8080을 입력하십시오. Grafana 로그인 페이지가 나타나야 합니다.Grafana 에 로그인합니다. 사용자 이름은
admin, 암호는admin을 사용하십시오. 암호 변경을 요청받을 수 있지만, 이 랩에서는 건너뛸 수 있습니다.왼쪽 메뉴에서 Connections 아이콘 (플러그 또는 커넥터 모양) 을 클릭합니다.
Connections 페이지에서 Data sources를 클릭합니다.
Data sources 페이지에서 Add new data source 버튼을 클릭합니다.
사용 가능한 데이터 소스 유형 목록에서 Loki를 선택합니다.
검색 상자에
Loki를 입력하고 나타나는 Loki 데이터 소스 옵션을 클릭합니다.Loki 데이터 소스 구성 페이지로 이동합니다. HTTP 섹션 아래의 URL 필드에 다음 주소를 입력합니다.
http://loki:3100Grafana 와 Loki 컨테이너가 동일한 Docker 네트워크 (
monitoring-net) 에 있으므로 Docker 가 동일 네트워크 내 컨테이너 간의 DNS 확인을 제공하기 때문에 호스트 이름으로loki를 사용합니다.맨 아래로 스크롤하여 Save & test 버튼을 클릭합니다.

모든 것이 올바르게 구성되었다면 "Data source is working"이라는 메시지가 표시된 녹색 배너가 나타납니다. 이제 Grafana 를 Loki 인스턴스에 성공적으로 연결했습니다.
Grafana 탐색 (Explore) 뷰에서 기본 로그 쿼리
마지막 단계에서는 Grafana 의 "Explore" 뷰를 사용하여 간단한 쿼리를 실행하고 Promtail 이 환경에서 수집하여 보내는 로그를 확인합니다.
Grafana UI 에서 왼쪽 사이드바로 이동하여 나침반 아이콘(Explore) 을 클릭합니다.
Explore 페이지의 왼쪽 상단에서 데이터 소스를 선택하는 드롭다운 메뉴가 보일 것입니다. 아직 선택되지 않았다면 Loki를 선택하십시오.
"Log browser" 입력 필드가 나타납니다. 여기에 LogQL 쿼리를 작성합니다.
"Code" 버튼을 클릭하여 코드 편집기로 전환합니다.
입력 필드에 다음 쿼리를 입력합니다.
{job="varlogs"}이 LogQL 쿼리는 레이블
job의 값이varlogs인 모든 로그 스트림을 선택합니다. 이 레이블은promtail.yml파일에서 정의했습니다.Shift+Enter를 누르거나 화면 오른쪽의 파란색 Run query 버튼을 클릭합니다.

쿼리를 실행한 후, 쿼리 편집기 아래의 메인 패널에 로그 라인들이 나타나는 것을 볼 수 있습니다. /var/log에 있는 다양한 파일의 로그를 보게 될 것입니다. 이는 Promtail 이 로그를 성공적으로 수집하여 Loki 로 보내고 있으며, Grafana 가 이를 쿼리할 수 있음을 확인시켜 줍니다.
요약
축하합니다! Loki, Promtail, Grafana 를 사용하여 기본적인 로깅 파이프라인 구성을 성공적으로 완료했습니다.
이 랩을 통해 다음을 수행하는 방법을 배웠습니다.
- Promtail 과 같은 로그 처리 도구를 위한 Docker 컨테이너를 Pull 하고 실행하는 방법.
- Loki 서버를 지정하고 로그 수집 (scraping) 작업을 정의하기 위한 Promtail 구성 파일 생성 방법.
- Docker 네트워킹을 사용하여 서비스 (Promtail, Loki, Grafana) 를 연결하는 방법.
- Grafana 사용자 인터페이스 내에서 Loki 를 데이터 소스로 추가하는 방법.
- Grafana 의 Explore 뷰에서 기본적인 LogQL 쿼리를 실행하여 로그를 찾고 검사하는 방법.
이 설정은 강력하고 확장 가능하며 비용 효율적인 로그 집계 시스템의 기반이 됩니다. 이제 이 기반 위에서 더 고급 LogQL 쿼리, 로그 파싱, 그리고 로그 내용을 기반으로 Grafana 에서 알림을 설정하는 방법을 탐색할 수 있습니다.



