- blackbox monitoring은 증상이 발생한 부분을 확인하며, 예측되지 않은 활성 문제를 모니터링
- blackbox monitoring을 통해 시스템이 제대로 작동하지 않음을 확인 한 이후에 whiteblox monitoring의 계측을 통해 로그 또는 HTTP 엔드 포인트와 같은 시스템 내부를 검사하는 기능
- blackbox monitoring은 외부에서 시스템 상태를 확인(예 : 서버가 200 개의 HTTP 코드로 응답)
- whiteblox monitoring은 내부 메트릭과 로그를 사용하여 시스템 문제를 표면화
blackbox monitoring과 whiteblox monitoring의 차이
- 모니터링은 어떤 방법을 체택하는지에 따라 크게 writebox monitoring과 blackbox monitoring으로 구분
1. whitebox monitoring
- 에이전트 혹은 소프트웨어를 설치해서 모니터링
- Zabbix, PRTG, Prometheus 등이 whitebox monitoring에 속함 → 일반적인 모니터링 기술들
- whitebox monitoring은 접근성은 좋으나 실제 모니터링 시스템을 구축할 때 모니터링 "소스(source)"가 되는 기술에 대한 이해도가 높아야함
2. blackbox monitoring
- 시스템 내부가 어떻게 동작하는지보다 관측 가능한 행위에 초점을 두는 모니터링
- CPU가 어떻게 동작하는지, Memory가 어떻게 동작하는지 몰라도 됨 → CPU 사용량이 얼마인지, Memory 사용량이 얼마인지가 중요
- TCP가 어떻게 동작하는지 알 필요 X → 실행되는 프로세스에 TCP 연결이 가능한지 여부가 중요
- 모니터링하려고 하는 내용의 동작 원리를 알지 못하여도 문제되지 않음
- blackbox monitoring 쪽에서 유명한 기술은 Nagios
3. Prometheus는 whitebox monitoring과 blackbox monitoring 둘다 가능
- Prometheus는 기본적으로 whitebox monitoring에 속하지만, 프로메테우스 재단은 Prometheus로 blackbox monitoring을 지원하기 위해서, 공식적으로 blackbox-exporter를 지원
- blackbox-exporter는 HTTP, HTTPS는 물론 TCP, ICMP, DNS 등의 프로토콜 위에서 동작하는 엔드포인트들에 대한 blackbox monitoring을 가능하게 해줌
- Prometheus쪽에서 해당 IP:PORT 정보를 제공해야만 모니터링 가능
blackbox-exporter와 설치
1. 서버 환경에서는 blackbox-exporter 스크립트 명령어 설치 및 구동
# 현재 디렉토리 위치
$ pwd
/root
# blackbox-exporter를 설치할 디렉토리 생성
$ mkdir black
# 디렉토리 이동
$ cd black
# 최신 버전 blackbox-exporter 설치
$ wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.18.0/blackbox_exporter-0.18.0.linux-amd64.tar.gz
# 압축 파일 해제
$ tar zxvf blackbox_exporter-0.18.0.linux-amd64.tar.gz
blackbox_exporter-0.18.0.linux-amd64/
blackbox_exporter-0.18.0.linux-amd64/blackbox_exporter
blackbox_exporter-0.18.0.linux-amd64/LICENSE
blackbox_exporter-0.18.0.linux-amd64/blackbox.yml
blackbox_exporter-0.18.0.linux-amd64/NOTICE
# 압축해제된 디렉토리에 접근
$ cd blackbox_exporter-0.18.0.linux-amd64/
# blackbox-exporter 실행
$ ./blackbox_exporter
2. blackbox.yml 설정 파일을 토대로 blackbox-exporter 스크립트 실행
# <blackbox_exporter 경로> --config.file=<blackbox_exporter 설정 파일 경로>
$ ./blackbox_exporter --config.file=./blackbox.yml
3. blackbox-exporter 서비스로 실행 → blackbox-exporter 명령어를 systemd로 관리
$ pwd
/root/black/blackbox_exporter-0.18.0.linux-amd64/
# user 추가
$ useradd --no-create-home --shell /bin/false blackbox_exporter
# 생성한 blackbox_exporter 계정 확인
$ cat /etc/passwd | grep blackbox_exporter
blackbox_exporter:x:1004:1004::/home/blackbox_exporter:/bin/false
# 실행 파일 및 설정 파일 /usr/local/bin/으로 경로 이동
$ cp ./blackbox_exporter /usr/local/bin
$ cp ./blackbox.yml /usr/local/bin
# /usr/local/bin/blackbox_exporter blackbox_exporter 유저, 그룹 권한 주기
$ chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter
# 명령어 복사 및 사용 권환 변경 확인
$ ls -al /usr/local/bin/blackbox_exporter
-rwxr-xr-x 1 blackbox_exporter blackbox_exporter 18264924 Nov 22 17:34 /usr/local/bin/blackbox_exporter
# 서비스 파일 등록
$ cat << EOF | tee /etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter --config.file=/usr/local/bin/blackbox.yml
[Install]
WantedBy=multi-user.target
EOF
# 데몬 리로드
$ systemctl daemon-reload
# 서비스 구동
$ systemctl restart blackbox_exporter
# 서비스 상태 확인
$ systemctl status blackbox_exporter
● blackbox_exporter.service - Blackbox Exporter
Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-11-22 17:35:28 KST; 4s ago
Main PID: 6615 (blackbox_export)
Tasks: 7
Memory: 2.2M
CGroup: /system.slice/blackbox_exporter.service
└─6615 /usr/local/bin/blackbox_exporter --config.file=/usr/local/bin/blackbox.yml
4. blackbox-exporter 설정
- blackbox-exporter가 Prometheus가 설정한 IP:PORT에서 TCP 통신이 가능한지 여부에 대한 메트릭을 수집하게 하려면 설정 파일에서 모듈 생성 필요
- 지정한 IP:PORT에서 5초 주기로 TCP 통신을 시도
- 다른 프로토콜도 확인 가능 : https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md
# tcp 프토토콜 5초 간격으로 connect 확인 $ vi /usr/local/bin/blackbox.yml modules: tcp_connect: prober: tcp timeout: 5s
- 최초 blackbox.yaml의 기본 내용
$ vi /usr/local/bin/blackbox.yml modules: http_2xx: prober: http http_post_2xx: prober: http http: method: POST tcp_connect: prober: tcp pop3s_banner: prober: tcp tcp: query_response: - expect: "^+OK" tls: true tls_config: insecure_skip_verify: false ssh_banner: prober: tcp tcp: query_response: - expect: "^SSH-2.0-" irc_banner: prober: tcp tcp: query_response: - send: "NICK prober" - send: "USER prober prober prober :prober" - expect: "PING :([^ ]+)" send: "PONG ${1}" - expect: "^:[^ ]+ 001" icmp: prober: icmp
5. blackbox-exporter 서비스로 재실행
$ systemctl restart blackbox_exporter
# 서비스 상태 확인
$ systemctl status blackbox_exporter
● blackbox_exporter.service - Blackbox Exporter
Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-11-22 17:37:32 KST; 5s ago
Main PID: 8674 (blackbox_export)
Tasks: 8
Memory: 2.1M
CGroup: /system.slice/blackbox_exporter.service
└─8674 /usr/local/bin/blackbox_exporter --config.file=/usr/local/bin/blackbox.yml
Prometheus에서 blackbox-exporter 연동
- Prometheus에서 blackbox-exporter가 수집하고 있는 메트릭을 스크래이핑
- Prometheus 설정 파일을 보면 scrape_config 밑에 job이 등록
- blackbox-exporter 추출 : http://
:9115/probe?target=<static_configs.targets의IP:PORT>&module=<params.module의 모듈> - static_configs.targets에 있는 "IP:PORT" 별로 데이터를 수집
- params.module은 blackbox-exporter 설정 파일에서 작성한 모듈 목록
- 현재는 TCP 연결만 확인하는 tcp_connect
- Prometheus가 scrape_interval에 설정된 주기마다 각 인스턴스들에서 수집되는 메트릭을 스크래이핑하여 저장
- blackbox-exporter와 prometheus의 timeout 시간이 각각 있기에 주기는 2개 합산
- blackbox-exporter의 timeout인 5s + prometheus의 scrape_interval인 5s = 10s
metric_path가 "/probe"로 지정
relabel_configs는 설정 파일 형식 토대로 생성 → replacement는 "<blackbox 설치된 인스턴스 IP:9115>"
$ vi /etc/prometheus/prometheus.yml # my global config global: scrape_interval: 15s # By default, scrape targets every 15 seconds. evaluation_interval: 15s # By default, scrape targets every 15 seconds. external_labels: monitor: 'kubernetes-monitoring' # prometheus에 blackbox-exporter를 추가 - job_name: 'blackbox-exporter' scrape_interval: 5s metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - [모니터링 서버 IP]:80 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: [blackbox 설치된 인스턴스 IP]:9115
Prometheus 재구동
# Prometheus 서비스 재시작 $ systemctl restart prometheus # prometheus 서비스 상태 확인 $ systemctl status prometheus
- Prometheus UI에서 쿼리를 입력 → blackbox-exporter 설치한 서버의 값 읽음 (probe_success)
- probe_success가 blackbox-exporter가 지정한 프로토콜 방식으로 IP:PORT와 연결이 성공했음을 알리는 지표
blackbox 서버 모니터링을 위한 Grafana 대시보드 구축
- Grafana로 대시보드를 구축할 때 정말 좋은 점은 black-exporter같이 많이 사용하는 Exporter에 대한 대시보드가 이미 공유됨
손쉽게 사용 가능
1. blackb-exporter 그라파다 대시보드 복사 가능한 대시보드 ID 획득
- node-exporter 그라파나 대시보드 복사 가능하게 하는 URL : https://grafana.com/grafana/dashboards/13659
- 위 경로에 접속하면 아래 화면이 보이는데 "Copy ID to Clipboard"를 클릭하여 복사함
2. 그라파나 대시보드로 이동한 후, 왼쪽 탭의 두 번째 "+"의 "Import" 메뉴를 클릭
3. 위에서 복사한 대시보드 ID를 입력하고 "Load" 버튼을 클릭
4. "Datasource"에서 "Prometheus"를 선택한 뒤 "Import"를 클릭
5. 생성한 대시보드 화면 확인
- 해당 포트에 매핑된 프로세스가 살아나면 다시 "UP"으로 표시
- 프로세스 포트 모니터링에서 중요한 것은 "UP & DOWN" 표시
- "probe duration"이나 "dns lookup" 정보들은 프로세스보다는 프로세스가 동작하는 인스턴스가 살아있음을 알려줌
참고 URL : https://lapee79.github.io/article/monitoring-http-using-blackbox-exporter/
참고 URL : https://gurumee92.tistory.com/235?category=933410
참고 URL : https://github.com/prometheus/blackbox_exporter
'Opensource(오픈 소스) > Prometheus' 카테고리의 다른 글
Prometheus 알람 만들기(rule.yml 생성) (0) | 2022.07.10 |
---|---|
Prometheus Alertmanager 설치 (0) | 2022.07.10 |
node-exporter를 프로메테우스와 그라파나 연동 -> 서버 자원 모니터링 (0) | 2022.07.09 |
Prometheus를 docker로 설치 및 Prometheus 관리 스크립트 (0) | 2022.07.09 |
Prometheus를 systemd로 관리 (0) | 2022.07.09 |