Loki 튜토리얼
이 문서는 Grafana Loki 공식 문서의 Loki Tutorial 페이지 (opens in a new tab)를 번역한 것입니다.
이 퀵스타트 가이드는 Docker Compose를 사용하여 단일 바이너리 모드(또는 모놀리식 모드)로 Loki를 배포하는 과정을 안내합니다. Grafana Loki는 Grafana 로깅 관측성 스택의 한 구성 요소일 뿐입니다. 이 튜토리얼에서는 이 스택을 Loki 스택이라고 부르겠습니다.
Loki 스택은 다음 구성 요소로 이루어집니다:
- Alloy: Grafana Alloy는 메트릭, 로그, 트레이스, 지속적인 프로파일을 위한 오픈 소스 원격 측정 수집기입니다. 이 퀵스타트 가이드에서는 Grafana Alloy가 모든 Docker 컨테이너에서 로그를 추적하여 Loki로 전달하도록 구성되어 있습니다.
- Loki: 수집된 로그를 저장하는 로그 집계 시스템입니다. Loki가 무엇인지에 대한 자세한 정보는 Loki 개요를 참조하세요.
- Grafana: Grafana는 모니터링 및 관측성을 위한 오픈 소스 플랫폼입니다. Grafana는 Loki에 저장된 로그를 쿼리하고 시각화하는 데 사용됩니다.
시작하기 전에
시작하기 전에 로컬 시스템에 다음이 설치되어 있어야 합니다:
대안으로, 대화형 학습 환경에서 이 예제를 사용해 볼 수 있습니다: Loki Quickstart Sandbox (opens in a new tab). 모든 종속성이 이미 설치된 완전히 구성된 환경입니다.
피드백 제공, 버그 보고, 문제 제기는 Grafana Killercoda 저장소 (opens in a new tab)에서 할 수 있습니다.
Loki 스택 배포
이 퀵스타트는 Linux 또는 MacOS를 실행하고 있다고 가정합니다. Windows 사용자는 Windows Subsystem for Linux (opens in a new tab)를 사용하여 동일한 단계를 따를 수 있습니다.
로컬에 Loki 스택을 배포하려면 다음 단계를 따르세요:
-
Loki fundamentals 저장소를 복제하고
getting-started
브랜치를 체크아웃합니다:git clone https://github.com/grafana/loki-fundamentals.git -b getting-started
-
loki-fundamentals
디렉토리로 변경합니다:cd loki-fundamentals
-
loki-fundamentals
를 현재 작업 디렉토리로 하여 Docker Compose를 사용하여 Loki, Alloy, Grafana를 배포합니다:docker compose up -d
명령을 실행한 후 다음과 유사한 출력을 볼 수 있습니다:
✔ Container loki-fundamentals-grafana-1 Started 0.3s ✔ Container loki-fundamentals-loki-1 Started 0.3s ✔ Container loki-fundamentals-alloy-1 Started 0.4s
-
Loki 스택이 실행 중이면 각 구성 요소가 실행 중인지 확인할 수 있습니다:
- Alloy: 브라우저를 열고 http://localhost:12345/graph (opens in a new tab)로 이동합니다. Alloy UI가 표시되어야 합니다.
- Grafana: 브라우저를 열고 http://localhost:3000 (opens in a new tab)으로 이동합니다. Grafana 홈페이지가 표시되어야 합니다.
- Loki: 브라우저를 열고 http://localhost:3100/metrics (opens in a new tab)로 이동합니다. Loki 메트릭 페이지가 표시되어야 합니다.
Grafana Alloy는 모든 Docker 컨테이너에서 로그를 추적하도록 구성되어 있으므로 Loki는 이미 로그를 수신하고 있어야 합니다. 로그 수집을 확인하는 가장 좋은 방법은 Grafana Logs Drilldown 기능을 사용하는 것입니다. 이렇게 하려면 http://localhost:3000/drilldown (opens in a new tab)으로 이동합니다. Logs를 선택합니다. Grafana Logs Drilldown 페이지가 표시되어야 합니다.
Docker 환경에 시작 데모만 배포한 경우 세 개의 컨테이너와 해당 로그(loki-fundamentals-alloy-1
, loki-fundamentals-grafana-1
, loki-fundamentals-loki-1
)가 표시되어야 합니다. loki-fundamentals-loki-1
컨테이너에서 Show Logs를 클릭하여 해당 컨테이너의 로그를 드릴다운합니다.
이 퀵스타트 가이드에서는 나머지 Grafana Logs Drilldown 기능을 다루지 않습니다. Grafana Logs Drilldown 기능 사용 방법에 대한 자세한 내용은 Get started with Grafana Logs Drilldown (opens in a new tab)을 참조하세요.
샘플 애플리케이션에서 로그 수집
현재 Loki 스택은 자체에 대한 로그를 수집하고 있습니다. 더 현실적인 예제를 제공하기 위해 로그를 생성하는 샘플 애플리케이션을 배포할 수 있습니다. 샘플 애플리케이션은 The Carnivorous Greenhouse라고 하며, 사용자가 로그인하여 육식 식물이 있는 온실을 시뮬레이션하고 모니터링할 수 있는 마이크로서비스 애플리케이션입니다. 애플리케이션은 7개의 서비스로 구성됩니다:
- User Service: 애플리케이션의 사용자 데이터 및 인증을 관리합니다. (사용자 생성, 로그인 등)
- Plant Service: 새 식물 생성을 관리하고 새 식물이 생성될 때 다른 서비스를 업데이트합니다.
- Simulation Service: 각 식물에 대한 센서 데이터를 생성합니다.
- WebSocket Service: 애플리케이션의 웹소켓 연결을 관리합니다.
- Bug Service: 활성화되면 서비스가 무작위로 실패하고 추가 로그를 생성하게 하는 서비스입니다.
- Main App: 모든 서비스를 함께 묶는 기본 애플리케이션입니다.
- Database: 사용자 및 식물 데이터를 저장하는 PostgreSQL 데이터베이스입니다.
애플리케이션의 아키텍처는 다음과 같습니다:
샘플 애플리케이션을 배포하려면 다음 단계를 따르세요:
-
loki-fundamentals
를 현재 작업 디렉토리로 하여 Docker Compose를 사용하여 샘플 애플리케이션을 배포합니다:docker compose -f greenhouse/docker-compose-micro.yml up -d --build
샘플 애플리케이션의 이미지를 빌드해야 하므로 이 작업은 몇 분 정도 걸릴 수 있습니다.
명령이 완료되면 다음과 유사한 출력을 볼 수 있습니다:
✔ Container greenhouse-websocket_service-1 Started 0.7s ✔ Container greenhouse-db-1 Started 0.7s ✔ Container greenhouse-user_service-1 Started 0.8s ✔ Container greenhouse-bug_service-1 Started 0.8s ✔ Container greenhouse-plant_service-1 Started 0.8s ✔ Container greenhouse-simulation_service-1 Started 0.7s ✔ Container greenhouse-main_app-1 Started 0.7s
-
샘플 애플리케이션이 실행 중인지 확인하려면 브라우저를 열고 http://localhost:5005 (opens in a new tab)로 이동합니다. Carnivorous Greenhouse 애플리케이션의 로그인 페이지가 표시되어야 합니다.
이제 샘플 애플리케이션이 실행 중이므로 애플리케이션에서 일부 작업을 실행하여 로그를 생성합니다. 다음은 작업 목록입니다:
- 사용자 생성: Sign Up을 클릭하고 새 사용자를 만듭니다. 사용자 이름과 암호를 추가하고 Sign Up을 클릭합니다.
- 로그인: 생성한 사용자 이름과 암호를 사용하여 로그인합니다. 사용자 이름과 암호를 추가하고 Login을 클릭합니다.
- 식물 생성: 로그인한 후 식물에 이름을 지정하고 식물 유형을 선택한 다음 Add Plant를 클릭합니다. 원한다면 이 작업을 몇 번 반복하세요.
온실은 다음과 같아야 합니다:
이제 일부 로그를 생성했으므로 Grafana Logs Drilldown 페이지 http://localhost:3000/drilldown (opens in a new tab)으로 돌아갈 수 있습니다. greenhouse-main_app-1
, greenhouse-plant_service-1
, greenhouse-user_service-1
등 7개의 새로운 서비스가 표시되어야 합니다.
로그 쿼리
이 시점에서 Grafana Logs Drilldown 기능을 사용하여 로그를 보았습니다. 많은 경우 이것만으로도 필요한 모든 정보를 얻을 수 있습니다. 그러나 로그에 대해 더 고급 질문을 하기 위해 Loki를 수동으로 쿼리할 수도 있습니다. 이것은 Grafana Explore를 통해 수행할 수 있습니다.
-
브라우저를 열고 http://localhost:3000 (opens in a new tab)으로 이동하여 Grafana를 엽니다.
-
Grafana 메인 메뉴에서 Explore 아이콘 (1)을 클릭하여 Explore 탭을 엽니다. Explore에 대해 더 알아보려면 Explore 문서 (opens in a new tab)를 참조하세요.
-
대시보드 헤더의 메뉴에서 Loki 데이터 소스 (2)를 선택합니다. 그러면 Loki 쿼리 편집기가 표시됩니다. 쿼리 편집기에서는 Loki 쿼리 언어인 LogQL을 사용하여 로그를 쿼리합니다. 쿼리 편집기에 대해 더 알아보려면 쿼리 편집기 문서를 참조하세요.
-
Loki 쿼리 편집기에는 두 가지 모드(3)가 있습니다:
- 빌더 모드: 시각적인 쿼리 디자이너를 제공합니다.
- 코드 모드: LogQL 쿼리를 작성하기 위한 기능이 풍부한 편집기를 제공합니다. 다음으로 코드 뷰를 사용하여 몇 가지 쿼리를 살펴보겠습니다.
-
Code (3)를 클릭하여 쿼리 편집기에서 코드 모드로 작업합니다. LogQL을 시작하는 데 도움이 되는 몇 가지 샘플 쿼리가 있습니다. 이 쿼리 중 하나를 쿼리 편집기에 복사한 후 Run Query (4)를 클릭하여 쿼리를 실행합니다.
-
container
레이블 값이greenhouse-main_app-1
인 모든 로그 라인을 봅니다:{container="greenhouse-main_app-1"}
Loki에서 이것은 로그 스트림입니다. Loki는 로그 스트림을 설명하기 위해 메타데이터로 레이블을 사용합니다. Loki 쿼리는 항상 레이블 선택기로 시작합니다. 이전 쿼리에서 레이블 선택기는
{container="greenhouse-main_app-1"}
입니다. -
{container="greenhouse-main_app-1"}
스트림에서POST
문자열을 포함하는 모든 로그 라인을 찾습니다:{container="greenhouse-main_app-1"} |= "POST"
-
로그에서 속성 추출
Loki는 설계상 로그 라인을 특정 스키마 형식으로 강제하지 않습니다. JSON, 키-값 쌍, 일반 텍스트, Logfmt 또는 기타 형식을 사용하든 Loki는 이러한 로그 라인을 문자 스트림으로 수집합니다. 우리가 사용하는 샘플 애플리케이션은 Logfmt (opens in a new tab) 형식으로 로그를 저장합니다:
ts=2025-02-21 16:09:42,176 level=INFO line=97 msg="192.168.65.1 - - [21/Feb/2025 16:09:42] "GET /static/style.css HTTP/1.1" 304 -"
이를 분석하면 다음과 같습니다:
ts=2025-02-21 16:09:42,176
는 로그 라인의 타임스탬프입니다.level=INFO
는 로그 레벨입니다.line=97
는 코드의 라인 번호입니다.msg="192.168.65.1 - - [21/Feb/2025 16:09:42] "GET /static/style.css HTTP/1.1" 304 -"
는 로그 메시지입니다.
Loki를 쿼리할 때 레이블 선택기의 결과를 파서를 통해 파이핑할 수 있습니다. 이렇게 하면 추가 처리를 위해 로그 라인에서 속성을 추출합니다. 예를 들어, {container="greenhouse-main_app-1"}
을 logfmt
파서를 통해 파이핑하여 level
및 line
속성을 추출해 보겠습니다:
{container="greenhouse-main_app-1"} | logfmt
이제 쿼리 결과에서 로그 라인을 확장하면 추출된 속성을 볼 수 있습니다.
다음 섹션으로 넘어가기 전에 오류 로그를 생성해 보겠습니다. 이렇게 하려면 샘플 애플리케이션에서 버그 서비스를 활성화합니다. Carnivorous Greenhouse 애플리케이션에서 Toggle Error Mode를 On으로 설정하여 수행합니다. 이렇게 하면 버그 서비스가 무작위로 서비스 실패를 유발합니다.
고급 및 메트릭 쿼리
오류 모드를 활성화하면 버그 서비스가 서비스 실패를 유발하기 시작합니다. 다음 몇 가지 LogQL 예제에서는 이러한 오류 중 일부를 추적합니다. 먼저 로그를 파싱하여 level
속성을 추출한 다음 level
이 ERROR
인 로그를 필터링해 보겠습니다:
{container="greenhouse-plant_service-1"} | logfmt | level="ERROR"
이 쿼리는 greenhouse-plant_service-1
컨테이너에서 level
속성이 ERROR
인 모든 로그를 반환합니다. 특정 코드 라인에 대해 필터링하여 이 쿼리를 더욱 구체화할 수 있습니다:
{container="greenhouse-plant_service-1"} | logfmt | level="ERROR", line="58"
이 쿼리는 greenhouse-plant_service-1
컨테이너에서 level
속성이 ERROR
이고 line
속성이 58
인 모든 로그를 반환합니다.
LogQL은 메트릭 쿼리도 지원합니다. 메트릭은 원시 로그 데이터를 추상화하고 속성을 숫자 값으로 집계하는 데 유용합니다. 이를 통해 Grafana에서 더 많은 시각화 옵션을 활용하고 로그에 대한 경고를 생성할 수 있습니다.
예를 들어, 메트릭 쿼리를 사용하여 특정 속성을 가진 초당 로그 수를 계산할 수 있습니다:
sum(rate({container="greenhouse-plant_service-1"} | logfmt | level="ERROR" [$__auto]))
오류 수가 매우 적기 때문에 시간 경과에 따른 오류율을 시각화하기 위해 시각화를 lines
에서 bars
로 변경하는 것이 좋습니다.
또 다른 예는 오류율이 가장 높은 상위 10개 서비스를 가져오는 것입니다:
topk(10,sum(rate({level="error"} | logfmt [5m])) by (service_name))
service_name
은 로그 라인에 서비스 이름이 제공되지 않을 때 Loki가 생성하는 레이블입니다. 컨테이너 이름을 서비스 이름으로 사용합니다. 자동으로 생성된 모든 레이블 목록은 레이블에서 찾을 수 있습니다.
마지막으로, 프로덕션 환경의 각 컨테이너의 총 로그 처리량을 살펴보겠습니다:
sum by (service_name) (rate({env="production"} | logfmt [$__auto]))
이것은 Alloy에 의해 처리될 때 모든 로그 라인에 추가한 service_name
레이블과 env
레이블 덕분에 가능합니다. env
는 Alloy가 처리할 때 모든 로그 라인에 추가한 정적 레이블입니다.
내부 구조 살펴보기
이 시점에서 실행 중인 Loki 스택과 로그를 생성하는 샘플 애플리케이션이 있습니다. 또한 Grafana Logs Drilldown 및 Grafana Explore를 사용하여 Loki를 쿼리했습니다. 다음 섹션에서는 Loki 스택이 로그를 수집하도록 구성된 방법, Loki 구성 파일, Grafana에서 Loki 데이터 소스가 구성된 방법을 이해하기 위해 내부를 살펴보겠습니다.
Grafana Alloy 구성
Grafana Alloy는 모든 Docker 컨테이너에서 로그를 수집하여 Loki로 전달합니다. 수집할 로그와 전달할 위치를 알기 위해 구성 파일이 필요합니다. loki-fundamentals
디렉토리 내에 config.alloy
라는 파일이 있습니다:
// This component is responsible for discovering new containers within the Docker environment
discovery.docker "getting_started" {
host = "unix:///var/run/docker.sock"
refresh_interval = "5s"
}
// This component is responsible for relabeling the discovered containers
discovery.relabel "getting_started" {
targets = []
rule {
source_labels = ["__meta_docker_container_name"]
regex = "/(.*)"
target_label = "container"
}
}
// This component is responsible for collecting logs from the discovered containers
loki.source.docker "getting_started" {
host = "unix:///var/run/docker.sock"
targets = discovery.docker.getting_started.targets
forward_to = [loki.process.getting_started.receiver]
relabel_rules = discovery.relabel.getting_started.rules
refresh_interval = "5s"
}
// This component is responsible for processing the logs (In this case adding static labels)
loki.process "getting_started" {
stage.static_labels {
values = {
env = "production",
}
}
forward_to = [loki.write.getting_started.receiver]
}
// This component is responsible for writing the logs to Loki
loki.write "getting_started" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}
// Enables the ability to view logs in the Alloy UI in realtime
livedebugging {
enabled = true
}
이 구성 파일은 Alloy UI(http://localhost:12345/graph (opens in a new tab))를 통해 시각적으로 볼 수 있습니다.
이 뷰에서 Alloy 구성 파일의 구성 요소와 이들이 어떻게 연결되어 있는지 볼 수 있습니다:
- discovery.docker: 이 구성 요소는 Docker 소켓을 통해 Docker 환경의 메타데이터를 쿼리하고 새 컨테이너를 검색하며 컨테이너에 대한 메타데이터를 제공합니다.
- discovery.relabel: 이 구성 요소는 메타데이터(
__meta_docker_container_name
) 레이블을 Loki 레이블(container
)로 변환합니다. - loki.source.docker: 이 구성 요소는 검색된 컨테이너에서 로그를 수집하여 다음 구성 요소로 전달합니다.
discovery.docker
구성 요소에서 메타데이터를 요청하고discovery.relabel
구성 요소의 재레이블링 규칙을 적용합니다. - loki.process: 이 구성 요소는 로그 변환 및 추출을 위한 단계를 제공합니다. 이 경우 모든 로그에 정적 레이블
env=production
을 추가합니다. - loki.write: 이 구성 요소는 로그를 Loki에 씁니다. 로그를 Loki 엔드포인트
http://loki:3100/loki/api/v1/push
로 전달합니다.
실시간으로 로그 보기
Grafana Alloy는 내장된 실시간 로그 뷰어를 제공합니다. 이를 통해 현재 로그 항목과 파이프라인의 특정 구성 요소를 통해 변환되는 방식을 볼 수 있습니다. 라이브 디버깅 모드를 보려면 브라우저 탭을 열고 http://localhost:12345/debug/loki.process.getting_started (opens in a new tab)로 이동하세요.
Loki 구성
Grafana Loki는 실행 방법을 정의하기 위해 구성 파일이 필요합니다. loki-fundamentals
디렉토리 내에 loki-config.yaml
이라는 파일이 있습니다:
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
log_level: info
grpc_server_max_concurrent_streams: 1000
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
limits_config:
metric_aggregation_enabled: true
allow_structured_metadata: true
volume_enabled: true
retention_period: 24h # 24h
schema_config:
configs:
- from: 2020-10-24
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
pattern_ingester:
enabled: true
metric_aggregation:
loki_address: localhost:3100
ruler:
enable_alertmanager_discovery: true
enable_api: true
frontend:
encoding: protobuf
compactor:
working_directory: /tmp/loki/retention
delete_request_store: filesystem
retention_enabled: true
구성 파일을 요약하면 다음과 같습니다:
- auth_enabled:
false
로 설정되어 있으므로 Loki는 수집 또는 쿼리에 테넌트 ID가 필요하지 않습니다. 프로덕션 환경에서는 권장되지 않습니다. Loki Helm 차트를 배포할 때 기본적으로true
로 설정됩니다. - server: Loki가 수신 대기하는 포트, 로그 수준, 최대 동시 gRPC 스트림 수를 정의합니다.
- common: Loki의 공통 구성을 정의합니다. 인스턴스 주소, 스토리지 구성, 복제 인수, 링 구성을 포함합니다.
- query_range: Loki가 쿼리 결과에 대해 내장 캐싱을 사용하도록 구성합니다. Loki의 프로덕션 환경에서는 memcached와 같은 별도의 캐시 서비스에서 처리됩니다.
- limits_config: 모든 Loki 테넌트에 대한 전역 제한을 정의합니다. 메트릭 집계 및 구조화된 메타데이터와 같은 특정 기능 활성화를 포함합니다. 제한은 테넌트별로 정의할 수 있지만 이는 고급 구성으로 간주되며 대부분의 사용 사례에서는 전역 제한으로 충분합니다.
- schema_config: Loki의 스키마 구성을 정의합니다. 스키마 버전, 개체 저장소, 인덱스 구성을 포함합니다.
- pattern_ingester: 로그 패턴을 검색하는 데 사용되는 패턴 인게스터를 활성화합니다. 주로 Grafana Logs Drilldown에서 사용됩니다.
- ruler: Loki의 눈금자 구성 요소를 활성화합니다. 로그 쿼리를 기반으로 경고를 만드는 데 사용됩니다.
- frontend: 프론트엔드의 인코딩 형식을 정의합니다. 이 경우
protobuf
로 설정됩니다. - compactor: 압축기 구성을 정의합니다. 인덱스를 압축하고 청크 보존을 관리하는 데 사용됩니다.
위의 구성 파일은 Loki의 기본 구성 파일입니다. 더 고급 구성 옵션은 Loki 구성 (opens in a new tab) 문서를 참조하세요.
Grafana Loki 데이터 소스
마지막 퍼즐 조각은 Grafana Loki 데이터 소스입니다. 이것은 Grafana가 Loki에 연결하고 로그를 쿼리하는 데 사용됩니다. Grafana는 데이터 소스를 정의하는 여러 가지 방법이 있습니다:
- 직접: Grafana UI에서 데이터 소스를 정의하는 곳입니다.
- 프로비저닝: 구성 파일에서 데이터 소스를 정의하고 Grafana가 자동으로 데이터 소스를 생성하도록 하는 곳입니다.
- API: Grafana API를 사용하여 데이터 소스를 생성하는 곳입니다.
이 경우 프로비저닝 방법을 사용하고 있습니다. Grafana 구성 디렉토리를 마운트하는 대신 docker-compose.yml
파일의 이 부분에서 데이터 소스를 정의했습니다:
grafana:
image: grafana/grafana:latest
environment:
- GF_FEATURE_TOGGLES_ENABLE=grafanaManagedRecordingRules
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_BASIC_ENABLED=false
ports:
- "3000:3000/tcp"
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: 'http://loki:3100'
basicAuth: false
isDefault: true
version: 1
editable: true
EOF
/run.sh
networks:
- loki
docker-compose.yml
파일의 entrypoint
섹션 내에서 run.sh
라는 파일을 정의했습니다. 이 파일은 시작 시 실행되며 Grafana 프로비저닝 디렉토리에 데이터 소스 구성 파일 ds.yaml
을 생성합니다. 이 파일은 Loki 데이터 소스를 정의하고 Grafana에 사용하도록 지시합니다. Loki가 Grafana와 동일한 Docker 네트워크에서 실행되므로 서비스 이름 loki
를 URL로 사용할 수 있습니다.
다음 단계는?
Loki 퀵스타트 데모를 완료했습니다. 다음은 어디로 가야 할까요? 몇 가지 제안이 있습니다:
- 배포: Loki는 여러 가지 방법으로 배포할 수 있습니다. 프로덕션 사용 사례의 경우 Helm 차트 (opens in a new tab)를 통해 Loki를 배포하는 것을 권장합니다.
- 로그 전송: 이 예에서는 Grafana Alloy를 사용하여 로그를 수집하고 Loki로 전송했습니다. 그러나 필요에 따라 사용할 수 있는 다른 많은 방법이 있습니다. 자세한 내용은 데이터 전송 (opens in a new tab)을 참조하세요.
- 로그 쿼리: LogQL은 로그를 위한 광범위한 쿼리 언어이며 로그 검색을 개선하고 통찰력을 생성하는 많은 도구를 포함합니다. 자세한 내용은 쿼리 섹션 (opens in a new tab)을 참조하세요.
- 경고: 마지막으로 Loki의 눈금자 구성 요소를 사용하여 로그 쿼리를 기반으로 경고를 만들 수 있습니다. 자세한 내용은 경고 (opens in a new tab)를 참조하세요.
완전한 메트릭, 로그, 트레이스 및 프로파일링 예제
Mimir, Loki, Tempo, Grafana를 포함하는 데모 환경을 실행하려면 Introduction to Metrics, Logs, Traces, and Profiling in Grafana (opens in a new tab)를 사용할 수 있습니다. 이것은 Mimir, Loki, Tempo, Grafana에 대해 배우기 위한 독립적인 환경입니다.
이 프로젝트에는 각 구성 요소에 대한 자세한 설명과 단일 인스턴스 배포를 위한 주석이 달린 구성이 포함되어 있습니다. 또한 환경의 데이터를 Grafana Cloud (opens in a new tab)로 푸시할 수도 있습니다.