[ 모니터링 ] Prometheus Federation 설정 -2

2024. 8. 19. 09:25·🌥️Cloud Study🌥️/Etc

인스턴스 별 라벨처리

Instance Label : Prometheus의 기본적인 라벨로, 보통 모니터링 하려는 주소가 들어간다(예시: `localhost:8080`)
= 특정 인스턴스를 구분하는 데 사용된다.

 

Federation에서 상위 Prometheus가 하위 Prometheus로부터 데이터를 가져올 때,
하위 Prometheus가 자신의 대상 인스턴스를 `localhost`로 수집한 경우, 이 `instance` 라벨 값이 상위로 그대로 전달되어 데이터가 `localhost`로 통일될 수 있다.


이는 하위 Prometheus가 실제 대상 서버가 아닌, 자신을 기준으로 데이터를 수집한 결과이기 때문에 발생하는 것으로,

문제 해결을 위해 `external_labels` 또는 `relabel_configs`를 사용한다.

 

위 이미지를 예시로, Federation에 따라 `instance`Label의 값이 `localhost:8080`으로 통일된 경우, 추가 Label(`app_name`, `instance_id`)을 사용해야 각 인스턴스 별 Metric 쿼리가 가능하다.


External Labels

Federation과 같은 대규모 모니터링 쿼리 플랜에서 데이터 소스를 구분하기 위해
하위 Prometheus에서 상위 Prometheus로 데이터를 보낼 때 설정하는 추가 라벨로, 주로 데이터의 출처(ex: 데이터센터, 클러스터, 지역)를 구분하기 위해 사용된다. 

 

+ 상위 Prometheus는 데이터를 구분할 때 `instance`라벨보다는 `external_labels`에 설정된 값에 더 의존하는 경향이 있다

`/etc/prometheus/prometheus.yml`파일을 수정해주자.

# /etc/prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

  external_labels:
    monitor: 'application01'

설정 파일을 수정한 다음에는 `sudo systemctl restart prometheus`로 Prometheus 서버를 재시작해주자.

이렇게 external_labels를 추가해주면, 같은 instance 라벨로 잡힌 인스턴스 지표도 구분되어 표현할 수 있게 된다.


Relabel Configs

Relabeling은 Prometheus에서 매트릭을 수집할 때, 매트릭의 라벨을 동적으로 수정하거나 추가하는 방법이다.

이를 통해 특정 라벨의 값을 변경하거나 새로운 라벨을 추가함으로써, 상위 Prometheus로 전송될 때 매트릭의 구성을 조정할 수 있다.

 

`relabel_configs`를 사용하여 `instance`라벨을 수정할 수 있고, 
하위 Prometheus에서 수집한 매트릭의 `instance`라벨이 `localhost:8080`으로 설정되어 있을 경우,
상위 Prometheus로 전송되기 전에 이를 특정한 값으로 변경할 수 있다.

# /etc/prometheus/prometheus.yml

scrape_configs:
  - job_name: 'spring_app'
    static_configs:
      - targets: ['localhost:8080']

    relabel_configs:
      - source_labels: [__your_specific_source_address__]
        target_label: instance
        replacement: 'spring_app_instance'

위 코드에서는 `localhost:8080`으로 설정된 `instance`라벨이 `spring_app_instance`로 변경된다. 


`honor_labels`와 `relabel_configs` 설정의 상호작용

honor_labels

`honor_labels: true` : Prometheus가 타겟에서 수집한 매트릭의 기본 라벨을 "우선"하게 한다.
타겟에서 이미 설정된 라벨 값이 있을 경우, 상위 Prometheus에서 이 값을 덮어쓰지 않고 그대로 유지한다.

ex) 하위 Prometheus에서 `instance`라벨이 `localhost:8080`으로 설정되어 있다면 상위 Prometheus는 이를 그대로 유지한다.

 

relabel_configs

`relabel_configs` : 수집한 매트릭의 라벨을 변경하거나 추가, 삭제할 수 있는 규칙을 정의한다.
새로운 라벨을 추가하거나 기존 라벨을 덮어쓸 수 있다.

 

 

두 설정의 상호작용

`honor_labels`가 true로 설정되어 있는 경우, 원칙적으로는 하위 Prometheus에서 이미 설정된 라벨(ex: instance)을 상위 Prometheus가 변경하지 않도록 해야 한다.

 

하지만 `relabel_configs`는 이 라벨을 덮어쓰는 기능을 가지고 있어서 `relabel_configs`가 특정 라벨을 덮어쓰도록 설정되어 있다면,
그 라벨에 대해서는 `honor_labels`설정이 무시될 수 있다.
= `relabel_configs` 라벨이 명시적으로 정의된 경우 `honor_labes`보다 우선된다.

 

예시

honor_labels: true

relabel_configs:
  - source_labels: [__address__]
    target_label: instance
    replacement: 'new-instance-name'

 

`honor_labels: true`로 인해 원래라면 하위 Prometheus에서 설정된 `instance` 라벨이 존중되어야 한다.

그러나 `relabel_configs`에서 `instance` 라벨을 `new-instance-name`으로 덮어쓰도록 설정되어 있으므로,
이 규칙이 우선되어 `instance` 라벨이 `new-instance-name`으로 변경된다.

 

결론

  • `external_labels` 는 계층화된 모니터링 구조에서 상위 구조에 보여줄 식별자가 된다.
  • `honor_labels`는 기본적으로 타겟에서 수집된 라벨을 유지하려고 한다.
  • `relabel_configs`는 명시적으로 정의된 경우, 이 라벨을 수정하거나 덮어쓸 수 있다.

'🌥️Cloud Study🌥️ > Etc' 카테고리의 다른 글

[ 트래픽 ] 트래픽 폭주 제어 -1 (시나리오 예시 및 스트레스 테스트)  (0) 2024.08.19
[ Auto Scaling ] 요금 최적화  (0) 2024.08.19
[ 모니터링 ] Grafana의 Alerting 이용, 인스턴스 다운 시 메일 알림 전송  (0) 2024.08.13
[ Logging ] Log Reporting, 이메일로 로그 전송하기  (0) 2024.08.13
[ Logging ] 어플리케이션 로그 DB에 적재하기  (0) 2024.08.13
'🌥️Cloud Study🌥️/Etc' 카테고리의 다른 글
  • [ 트래픽 ] 트래픽 폭주 제어 -1 (시나리오 예시 및 스트레스 테스트)
  • [ Auto Scaling ] 요금 최적화
  • [ 모니터링 ] Grafana의 Alerting 이용, 인스턴스 다운 시 메일 알림 전송
  • [ Logging ] Log Reporting, 이메일로 로그 전송하기
L_Chae
L_Chae
🎮😻🤓🖥✨
  • L_Chae
    Cherish
    L_Chae
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🌥️Cloud Study🌥️
        • AWS
        • NHN
        • KT
        • Microsoft (Azure 900)
        • TroubleShooting
        • IaC
        • Etc
      • STUDY
        • English
        • Japanese
        • 개인정보보호 관련
      • 초등학교 AI 교육 진행
        • 2024학년도 1학년-2학년
        • 2025학년도 4학년
      • 2024 KDT 📕
        • Lecture
        • Study 📗
        • Study-JAVA
        • Project
        • etc
      • INTERLUDE ✦
        • 2022 SYSTEM STUDY
        • 2022 Winter Study
        • 2023 AutoMobility STUDY
        • 2023 Summer Study (CPPG)
        • 2023 Reversing STUDY
        • etc
      • Private🔒
        • MacBook 💻
        • Screenshot 🩷
        • Photo 🖼️
        • FFXIV - Backup 🎮
        • Tistory
      • PBL 📗
        • 논문 스터디
        • Backup
      • Project 🖤
        • 2022-2) 개인정보보호 소학회
        • 2022-2) winter GURU2 - iOS
        • 2023-1) PBL 3
        • 2023-2) PBL 4
        • 2024-1) SW-AI교육 실습 일지
      • CTF 🚩
        • 2022
        • 2023
      • News scrap 📰
        • 2022
        • 2023
      • 2022 공부 로그 🐯
      • 2023 공부 로그🐰
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    deprecation warning
    JLPT N1
    멱등성
    ansible
    N1
    JLPT
    jlpt n1 도전기
    content collection
    ansible galaxy
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
L_Chae
[ 모니터링 ] Prometheus Federation 설정 -2
상단으로

티스토리툴바