반응형
개요
BlackBox exporter를 이용하여 외부에 있는 엔드포인트 서비스를 모니터링 할 수 있습니다.
HTTPS, HTTP, TCP, DNS, ICMP 등 외부 엔드포인트 probe(조사) 할 수 있습니다.
엔드포인트 모니터링은
HTTP 대기 시간
DNS 조회 대기 시간
SSL 인증서 만료 정보
TLS 버전
HTTP Version
접속 정보 (status 200, 4xx 등)
링크
- https://github.com/prometheus/blackbox_exporter
- https://www.infracloud.io/blogs/monitoring-endpoints-kubernetes-blackbox-exporter/
1. whitebox와 blackbox 모니터링 차이점
- whitebox 모니터링
- 어플리케이션 로그, 시스템 내부 모니터링
- CPU,MEM,DISK, POD, Instance 등 내부 정보 모니터링
- blackbox 모니터링
- 서버 다운, 페이지 작동 안함, 사이트 성능 저하 등 사용자에게 영향을 미치는 외부 동작을 모니터링
2. exporter 이란 ?
blackbox exporter은
HTTP,HTTP,TPC,DNS,ICMP 등 다양한 통계정보를 프로메테우스가 이해할 수 있는 정보로 변환하는 역할을 합니다.
3. blackbox exporter 설치
blackbox를 사용하려면 scraping하는 pod와 동일한 namespace에 배포해야합니다.
opentelemery 배포된 namespace : opentelemetry-operator-system
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus-blackbox-otel prometheus-community/prometheus-blackbox-exporter -n opentelemetry-operator-system
4. blackbox exporter 테스트
blackbox 테스트 용도 nginx pod 설치
vi nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
blackbox curl 테스트
www.google.com probe 테스트
# nginx pod 접속
k exec pod/nginx-test-xxx -it /bin/bash -n 네임스페이스
# blackbox-exporter svc 정보 + URL 입력
curl "prometheus-blackbox-otel-prometheus-blackbox-exporter.opentelemetry-operator-system.svc.cluster.local:9115/probe?module=http_2xx&target=IP주소"
ex)
curl "prometheus-blackbox-otel-prometheus-blackbox-exporter.opentelemetry-operator-system.svc.cluster.local:9115/probe?module=http_2xx&target=https://www.google.com"
5. Scrap 설정
OpenTelemery으로 blackbox exporter 메트릭정보를 scraping 합니다.
targets에 probe 테스트할 URL 입력
... 중간 생략 ...
- job_name: blackbox-external-targets
scrape_interval: 300s
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://xxx.test.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: prometheus-blackbox-otel-prometheus-blackbox-exporter:9115
... 중간 생략 ...
테스트 job 정보
- job_name: actuator-static
scrape_interval: 15s
metrics_path: /ddo/api/actuator/prometheus
static_configs:
- targets: ["x.x.x.x:8080"]
- job_name: actuator-dns
scrape_interval: 15s
metrics_path: /ddo/api/actuator/prometheus
dns_sd_configs:
- names:
- xxx-service.namespace.svc.cluster.local
type: 'A'
port: 8080
- job_name: blackbox-kubernetes-services
metrics_path: /probe
params:
module: [http_2xx]
kubernetes_sd_configs:
- role: service
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- target_label: __address__
replacement: prometheus-blackbox-prometheus-blackbox-exporter:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
target_label: kubernetes_service_name
- job_name: blackbox-kubernetes-pods
metrics_path: /probe
params:
module: [http_2xx]
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- target_label: __address__
replacement: prometheus-blackbox-prometheus-blackbox-exporter:9115
- source_labels: [__param_target]
replacement: ${1}/health
target_label: instance
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
target_label: kubernetes_pod_name
- job_name: blackbox-kubernetes-ingresses
metrics_path: /probe
params:
module: [http_2xx]
kubernetes_sd_configs:
- role: ingress
relabel_configs:
- source_labels:
[
__meta_kubernetes_ingress_scheme,
__address__,
__meta_kubernetes_ingress_path,
]
regex: (.+);(.+);(.+)
replacement: ${1}://${2}${3}
target_label: __param_target
- target_label: __address__
replacement: prometheus-blackbox-prometheus-blackbox-exporter:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_ingress_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_ingress_name]
target_label: ingress_name
6. prometheus Dashboard에서 메트릭 수집 확인
1. blackbox-exporter에서 수집되는 job 확인
2. metric 정보 확인
prometheus dashboard -> Graph -> Open Metrics Explorer 클릭
메트릭 정보 확인 : probe_*
3. 연결 정보 확인
probe_success{instance="https://xxx.test.com", job="blackbox-external-targets"}
ex) probe_success{instance="https://www.google.com", job="blackbox-external-targets"}
7. Alert 설정 하기
... 중간 생략 ...
groups:
- name: dev-portal_balckbox-rule # 그룹 이름
rules:
- alert: xxx-WebSite_NotFound
expr: probe_success{job="blackbox-external-targets"} == 0
for: 2m
labels:
severity: "critical"
annotations:
title: "WebSite {{`{{`}} $labels.instance {{`}}`}} Not Found(404)"
description: "xxx Namespace pod (nginx 등)를 확인하세요."
... 중간 생략 ...
반응형
'모니터링 > prometheus' 카테고리의 다른 글
[ AMP ] Amazon Managed service for Prometheus 구축 (0) | 2023.10.05 |
---|---|
[ prometheus ] scrape 설정 (0) | 2023.09.26 |
[ Prometheus ] Alert - Rule (0) | 2023.03.16 |
[ Prometheus ] AlertManager - Slack 설정 (0) | 2023.03.16 |
[ Prometheus ] exporter 종류 (0) | 2023.03.16 |