번역) grafana alloy 튜토리얼

박우영·2024년 10월 13일
0

모니터링

목록 보기
2/2

Overview

about alloy
Alloy는 OTel, Prometheus, Pyroscope, Loki 및 기타 여러 메트릭, 로그, 추적 및 프로필 도구에 대한 기본 파이프라인을 제공합니다. 또한 Alloy 파이프라인을 사용하여 Loki 및 Mimir에서 알림 규칙을 구성하는 등 다양한 작업을 수행할 수 있습니다. Alloy는 OTel 수집기, Prometheus 에이전트 및 Promtail과 완벽하게 호환됩니다. 이러한 솔루션의 대안으로 Alloy를 사용하거나 여러 수집기와 에이전트로 구성된 하이브리드 시스템으로 결합할 수 있습니다. IT 인프라 내 어디에나 Alloy를 배포하고 Grafana LGTM 스택, Grafana Cloud의 원격 분석 백엔드 또는 다른 공급업체의 기타 호환 가능한 백엔드와 페어링할 수 있습니다. Alloy는 유연하며 온프레미스, 클라우드 전용 또는 두 가지를 혼합하여 필요에 맞게 쉽게 구성할 수 있습니다.

Grafana Alloy 자원 권장사항

| note
리소스 사용량은 워크로드, 하드웨어 및 사용된 구성에 따라 달라집니다. 이 페이지의 정보는 대부분의 사용자에게 좋은 출발점이 되지만 실제 사용량은 다를 수 있습니다.

Prometheus metrics

Prometheus 메트릭 리소스 사용량은 주로 스크랩해야 하는 활성 시리즈의 수와 스크랩 간격에 따라 달라집니다.

경험상, 활성 시리즈 100만 개당 기본 스크랩 간격을 사용하면 대략 다음과 같은 리소스를 사용할 것으로 예상할 수 있습니다:

  • 0.4 CPU cores
  • 11Gib of memory
  • 총 네트워크 대역폭, 송수신 1.5 MiB/s

이러한 권장 사항은 클러스터링을 사용하는 배포를 기반으로 하지만 다른 배포 모드에도 광범위하게 적용됩니다.

Loki logs

Loki 로그 리소스 사용량은 주로 수집되는 로그의 양에 따라 달라집니다.

경험상, 수집되는 로그가 초당 1MB씩 증가할 때마다 대략 다음과 같은 리소스를 사용할 것으로 예상할 수 있습니다:

  • 1 CPU core
  • 120MiB memory

이러한 권장 사항은 노드 수가 상대적으로 적고 각 노드에 대한 로그 볼륨이 높은 클러스터에 Kubernetes 데몬셋을 배포한 경우를 기준으로 합니다. 소규모 노드가 많은 경우 각 노드에서 Alloy를 실행하는 데 따른 지속적인 오버헤드로 인해 초당 로그 1MB당 리소스 사용량이 더 높아질 수 있습니다.

또한 레이블 수, 파일 수, 평균 로그 줄 길이와 같은 요인도 리소스 사용량에 영향을 미칠 수 있습니다.

Pyroscope profiles

파이로스코프 프로필 리소스 사용량은 주로 프로필의 양에 따라 달라집니다.

경험상 초당 100개의 프로필당 대략 다음과 같은 리소스를 사용할 것으로 예상할 수 있습니다

  • 1 CPU core
  • 10 GiB of memory

각 프로필의 크기 및 가져오기 빈도와 같은 요인도 전체 리소스 사용량에 영향을 미칩니다.

Get started Tutorials

alloy-tutorials
이 튜토리얼은 macOS 환경에서 진행하였습니다. 그 외환경은 위 링크를 확인해주세요.

install

그라파나 홈브루 탭을 추가합니다

brew tap grafana/grafana

Alloy를 설치합니다

brew install grafana/grafana/alloy

start

Alloy를 시작하려면 터미널 창에서 다음 명령을 실행합니다:

brew services start alloy

Alloy는 시스템이 시작되면 자동으로 실행됩니다.

이제 http://localhost:12345 에서 Alloy UI에 액세스할 수 있습니다.

로컬 Grafana 인스턴스 설정

이 튜토리얼에서는 로컬 머신에서 로그를 수집하여 Loki로 전송하도록 Alloy를 구성합니다. 다음 Docker Compose 파일을 사용하여 로컬 Grafana 인스턴스를 설정할 수 있습니다. 이 Docker Compose 파일에는 데이터 소스로 구성된 Loki와 Prometheus가 포함되어 있습니다.

  1. 새 디렉터리를 만들고 Docker Compose 파일을 docker-compose.yml로 저장합니다.
mkdir alloy-tutorial
cd alloy-tutorial
touch docker-compose.yml
  1. 다음 Docker Compose 파일을 docker-compose.yml에 복사합니다.
 version: '3'
 services:
   loki:
     image: grafana/loki:3.0.0
     ports:
       - "3100:3100"
     command: -config.file=/etc/loki/local-config.yaml
   prometheus:
     image: prom/prometheus:v2.47.0
     command:
       - --web.enable-remote-write-receiver
       - --config.file=/etc/prometheus/prometheus.yml
     ports:
       - "9090:9090"
   grafana:
     environment:
       - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
       - GF_AUTH_ANONYMOUS_ENABLED=true
       - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
     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: false
           version: 1
           editable: false
         - name: Prometheus
           type: prometheus
           orgId: 1
           url: http://prometheus:9090
           basicAuth: false
           isDefault: true
           version: 1
           editable: false
         EOF
         /run.sh
     image: grafana/grafana:11.0.0
     ports:
       - "3000:3000"
  1. 로컬 Grafana 인스턴스를 시작하려면 다음 명령을 실행합니다.
 docker compose up -d
  1. 브라우저에서 http://localhost:3000 을 열어 Grafana UI에 액세스합니다.

Alloy 구성

로컬 Grafana 인스턴스가 설정되면 다음 단계는 Alloy를 구성하는 것입니다. config.alloy 파일의 구성 요소를 사용하여 스크랩할 로그, 해당 데이터를 처리할 방법, 데이터를 전송할 위치를 Alloy에 알려줍니다.
예제는 단일 호스트에서 실행되므로 노트북이나 가상 머신에서 실행할 수 있습니다. config.alloy 파일을 사용하여 예제를 사용해 볼 수 있습니다.

config.alloy 파일 만들기

현재 작업 디렉터리 내에 config.alloy 파일을 만듭니다.

touch config.alloy

첫 번째 구성 요소: 로그 파일

파일 상단에 다음 컴포넌트 구성을 복사하여 붙여넣습니다.

 local.file_match "local_files" {
     path_targets = [{"__path__" = "/var/log/*.log"}]
     sync_period = "5s"
 }

이 구성은 local_files라는 local.file_match 컴포넌트를 생성하며, 이 컴포넌트는 다음을 수행합니다:

  • Alloy에 어떤 파일을 소싱할지 알려줍니다.
  • 5초마다 새 파일을 확인합니다.

두 번째 구성 요소: 스크래핑

config.alloy 파일의 이전 컴포넌트 아래에 다음 컴포넌트 구성을 복사하여 붙여넣습니다

  loki.source.file "log_scrape" {
    targets    = local.file_match.local_files.targets
    forward_to = [loki.process.filter_logs.receiver]
    tail_from_end = true
  }

이 구성은 로그_스크레이프라는 이름의 loki.source.file 컴포넌트를 생성하며, 이 컴포넌트는 다음을 수행합니다:

  • local_files 구성 요소를 소스 또는 대상으로 연결합니다.
  • 이 구성 요소는 스크랩한 로그를 filter_logs라는 다른 구성 요소의 수신자에게 전달합니다.
  • 전체 로그 파일 기록을 수집하지 않도록 로그 파일을 끝에서 추적할 수 있는 추가 속성과 옵션을 제공합니다.

세 번째 구성 요소: 비필수 로그 필터링

데이터 소스로 보내기 전에 중요하지 않은 로그를 필터링하면 로그 볼륨을 관리하여 비용을 절감하는 데 도움이 될 수 있습니다.

다음 예는 로그를 Loki로 보내기 전에 로그를 필터링하거나 삭제하는 방법을 보여줍니다.

config.alloy 파일의 이전 구성 요소 아래에 다음 구성 요소 구성을 복사하여 붙여넣습니다

  loki.process "filter_logs" {
    stage.drop {
        source = ""
        expression  = ".*Connection closed by authenticating user root"
        drop_counter_reason = "noisy"
      }
    forward_to = [loki.write.grafana_loki.receiver]
    }

loki.process 구성 요소를 사용하면 로그 데이터를 변환, 필터링, 구문 분석 및 보강할 수 있습니다. 이 구성 요소 내에서 하나 이상의 처리 단계를 정의하여 로그 항목이 저장되거나 전달되기 전에 처리할 방법을 지정할 수 있습니다.

이 구성은 filter_logs라는 이름의 loki.process 구성 요소를 생성하며, 이 구성 요소는 다음을 수행합니다:

  • 기본 log_scrape 구성 요소에서 스크랩된 로그 항목을 수신합니다.
  • stage.drop 블록을 사용하여 스크랩된 로그에서 삭제할 항목을 정의합니다.
  • 표현식 매개변수를 사용하여 삭제할 특정 로그 항목을 식별합니다.
  • 선택적 문자열 레이블 drop_counter_reason을 사용하여 로그 항목을 삭제하는 이유를 표시합니다.
  • 처리된 로그를 grafana_loki라는 다른 구성 요소의 수신자에게 전달합니다.

로그 처리에 대한 보다 포괄적인 정보는 loki.process 문서에서 확인할 수 있습니다.

네 번째 구성 요소: 로키에 로그 쓰기

이 컴포넌트 구성을 복사하여 config.alloy 파일에서 이전 컴포넌트 아래에 붙여넣습니다.

  loki.write "grafana_loki" {
    endpoint {
      url = "http://localhost:3100/loki/api/v1/push"

      // basic_auth {
      //  username = "admin"
      //  password = "admin"
      // }
    }
  }

이 마지막 컴포넌트는 http://localhost:3100/loki/api/v1/push 을 가리키는 grafana_loki라는 이름의 loki.write 컴포넌트를 생성합니다.

이것으로 간단한 구성 파이프라인이 완성됩니다.

| tip

로컬 도커 컴포즈 스택에는 기본_auth 블록이 필요하지 않으므로 주석 처리되어 있습니다.
 이 예제에는 다른 환경에 대한 권한 부여를 구성하는 방법을 보여주기 위해 이 블록이 포함되어 있습니다.
 추가 권한 부여 옵션은 loki.write 컴포넌트 참조를 참조하세요.

loki.write-link

이 구성을 사용하면 Alloy가 Docker 컨테이너에서 실행 중인 Loki 인스턴스에 직접 연결됩니다.

환경설정 다시 로드하기

  1. 로컬 config.alloy 파일을 기본 Alloy 구성 파일 위치에 복사합니다.
sudo cp config.alloy $(brew --prefix)/etc/alloy/config.alloy
  1. 재로드 엔드포인트를 호출하여 시스템 서비스를 다시 시작하지 않고도 구성 파일을 다시 로드하도록 Alloy에 지시하세요.
 curl -X POST http://localhost:12345/-/reload
  1. 선택 사항: 시스템 서비스를 다시 시작하여 Alloy를 실행하고 구성 파일을 로드할 수 있습니다.
brew services restart alloy

Alloy UI에서 구성 검사하기

http://localhost:12345 을 열고 상단의 그래프 탭을 클릭합니다. 그래프가 다음과 비슷하게 표시될 것입니다

Alloy UI는 Alloy 구성 요소 구성으로 구축한 파이프라인의 시각적 표현을 보여줍니다.

구성 요소가 정상적으로 작동하는 것을 확인할 수 있으며, Grafana에서 로그를 탐색할 준비가 된 것입니다.

Grafana에 로그인하여 loki 로그 살펴보기

http://localhost:3000/explore 을 열어 Grafana의 탐색 기능에 액세스합니다.

데이터 소스로 Loki를 선택하고 레이블 브라우저 버튼을 클릭해 Alloy가 Loki로 전송한 파일을 선택합니다.

여기에서 로그가 예상대로 Loki로 흘러가고 있으며 엔드투엔드 구성이 성공적으로 완료되었음을 확인할 수 있습니다.


Alloy를 설치 및 구성하고 로컬 호스트에서 로컬 Grafana 스택으로 로그를 전송했습니다.

Grafana Alloy를 사용하여 Prometheus로 메트릭 전송하기

이전 튜토리얼에서는 로컬 머신에서 로그를 수집 및 처리하여 Loki로 전송하도록 Alloy를 구성하는 방법을 배웠습니다.

이번 튜토리얼은 로컬 컴퓨터에서 메트릭을 수집 및 처리하도록 Alloy를 구성하여 Prometheus로 전송하고 Grafana를 사용하여 결과를 탐색하는 방법을 보여 줍니다.

시작하기 전에

이 튜토리얼을 완료하려면 다음과 같이 하세요

  • Alloy와 원격 분석 수집에 대한 기본적인 이해가 있어야 합니다.
  • Prometheus, PromQL, Loki, LogQL 및 기본 Grafana 탐색에 익숙해야 합니다.
  • 이전 튜토리얼을 완료하여 다음 전제 조건을 준비해야 합니다:
  • 사용자 환경에서 Alloy를 설치하고 서비스를 시작합니다.
  • 로컬 Grafana 인스턴스를 설정합니다.
  • config.alloy 파일을 만듭니다.

| tip

또는 대화형 학습 환경에서 이 예제를 사용해 볼 수도 있습니다: Prometheus로 메트릭 보내기.

이 환경은 모든 종속성이 이미 설치되어 있고 완전히 구성된 환경입니다.

Protheus 로 메트릭 보내기 링크

Alloy 구성

이 튜토리얼에서는 메트릭을 수집하여 Prometheus로 전송하도록 Alloy를 구성합니다.

config.alloy 파일에 구성 요소를 추가하여 스크래핑할 메트릭, 해당 데이터를 처리하는 방법, 데이터를 전송할 위치를 Alloy에 알려줍니다.

다음 단계는 이전 튜토리얼에서 만든 config.alloy 파일을 기반으로 합니다.

첫 번째 구성 요소: 스크래핑

config.alloy 파일 상단에 다음 컴포넌트 구성을 붙여넣습니다

prometheus.exporter.unix "local_system" { }

prometheus.scrape "scrape_metrics" {
  targets         = prometheus.exporter.unix.local_system.targets
  forward_to      = [prometheus.relabel.filter_metrics.receiver]
  scrape_interval = "10s"
}

이 구성은 다음을 수행하는 scrape_metrics라는 이름의 prometheus.scrape 컴포넌트를 생성합니다:

local_system 컴포넌트를 소스 또는 대상으로 연결합니다.
스크랩한 메트릭을 filter_metrics라는 다른 구성 요소의 수신기로 전달합니다.
이것은 Alloy에 10초마다 메트릭을 스크랩하도록 지시합니다.

두 번째 구성 요소: 필터 메트릭

데이터 소스로 보내기 전에 중요하지 않은 메트릭을 필터링하면 비용을 절감하고 가장 중요한 데이터에 집중할 수 있습니다.

다음 예는 메트릭을 Prometheus로 보내기 전에 필터링하거나 삭제하는 방법을 보여줍니다.

config.alloy 파일의 이전 컴포넌트 아래에 다음 컴포넌트 구성을 붙여넣습니다

prometheus.relabel "filter_metrics" {
  rule {
    action        = "drop"
    source_labels = ["env"]
    regex         = "dev"
  }

  forward_to = [prometheus.remote_write.metrics_service.receiver]
}

prometheus.relabel 컴포넌트는 일반적으로 Prometheus 메트릭을 필터링하거나 하나 이상의 다운스트림 수신기로 전달되는 레이블 세트를 표준화하는 데 사용됩니다. 이 컴포넌트를 사용하여 수신자에게 전송되는 각 지표의 레이블 세트를 다시 작성할 수 있습니다. 이 구성 요소 내에서 규칙 블록을 정의하여 메트릭이 저장되거나 전달되기 전에 처리할 방법을 지정할 수 있습니다.

이 구성은 다음을 수행하는 filter_metrics라는 이름의 prometheus.relabel 컴포넌트를 생성합니다:

scrape_metrics 구성 요소에서 스크랩된 메트릭을 수신합니다.
이 구성은 “env” 레이블이 “dev”와 같은 메트릭을 삭제하도록 Alloy에 지시합니다.
그리고 처리된 메트릭을 metrics_service라는 다른 구성 요소의 수신자에게 전달합니다.

세 번째 구성 요소: Prometheus에 메트릭 작성

config.alloy 파일의 이전 컴포넌트 아래에 다음 컴포넌트 구성을 붙여넣습니다

prometheus.remote_write "metrics_service" {
    endpoint {
        url = "http://localhost:9090/api/v1/write"

        // basic_auth {
        //   username = "admin"
        //   password = "admin"
        // }
    }
}

이 마지막 컴포넌트는 http://localhost:9090/api/v1/write 을 가리키는 metrics_service라는 이름의 prometheus.remote_write 컴포넌트를 생성합니다.

이것으로 간단한 구성 파이프라인이 완료됩니다.

환경설정 다시 로드하기

로컬 config.alloy 파일을 기본 Alloy 구성 파일 위치에 복사합니다.

sudo cp config.alloy $(brew --prefix)/etc/alloy/config.alloy

재로드 엔드포인트를 호출하여 시스템 서비스를 다시 시작하지 않고도 구성 파일을 다시 로드하도록 Alloy에 지시하세요.

curl -X POST http://localhost:12345/-/reload

| tip

이 단계에서는 로컬 호스트 포트 12345에서 Alloy UI를 사용합니다.
Docker 컨테이너에서 Alloy를 실행하기로 선택한 경우
--server.http.listen-addr=0.0.0.0:12345 인수를 사용해야 합니다.

이 인수를 사용하지 않으면 Docker 컨테이너 외부에서는 디버깅 UI를 사용할 수 없습니다.

Alloy UI에서 구성 검사하기

http://localhost:12345 을 열고 상단의 그래프 탭을 클릭합니다. 그래프가 다음과 비슷하게 표시될 것입니다

Alloy UI는 Alloy 구성 요소 구성으로 구축한 파이프라인의 시각적 표현을 보여줍니다.

구성 요소가 정상적으로 작동하는 것을 확인할 수 있으며, Grafana에서 메트릭을 탐색할 준비가 된 것입니다.

Grafana에 로그인하여 Prometheus에서 메트릭 탐색하기

http://localhost:3000/explore/metrics/ 을 열어 Grafana의 메트릭 탐색 기능에 액세스합니다.

여기에서 Alloy에서 Prometheus로 전송되는 메트릭을 시각적으로 탐색할 수 있습니다.

데이터를 더 자세히 탐색하기 위해 promQL 쿼리를 수동으로 작성할 수도 있습니다.

http://localhost:3000/explore 을 열어 Grafana의 탐색 기능에 액세스합니다.

데이터 소스로 Prometheus를 선택하고 메트릭 브라우저 버튼을 클릭하여 메트릭, 레이블, 레이블의 값을 선택합니다.

여기에서 메트릭이 예상대로 Prometheus로 전달되고 있으며, 엔드투엔드 구성이 성공적으로 완료되었음을 확인할 수 있습니다.

0개의 댓글