인스턴스 별 라벨처리
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
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 |