💻문제점1
프로젝트에 prometheus와 grafana 툴을 적용하여 모니터링 하려고 했다.
프로젝트 최상위 프로젝트 하위에 prometheus.yml을 생성하여 터미널에서 다음 명령어를 수행했다.
docker run \
-d \
-p 9090:9090 \
-v ./prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
다음과 같은 오류가 발생했다.
failed to register layer: Error processing tar file(exit status 127): docker-untar: symbol lookup error: docker-untar: undefine
d symbol: , version GLIBC_2.2.5
docker-untar에서 GLIBC_2.2.5 에대한 종속성을 찾을 수 없다는데, 구글링해도 나오는 해결책이 없었다. 이 오류는 일반적으로 컨테이너 이미지가 호환되지 않을 때 발생할 수 있다는데, Windows 운영체제에서는 glibc가 아닌 Windows API를 사용하기 때문에 버전 호환성 문제는 아닌 듯 했다.
🔍문제점1-해결
도커를 재설치한 후 명령어를 수행하니 정상적으로 이미지가 pull 되었고 컨테이너가 실행된 것을 확인할 수 있었다.
💻문제점2
prometheus 컨테이너가 올라가고, localhost:9090에 접속해서 Status > Targets에 들어갔더니 내가 설정한 모니터링 타겟이 없었다. prometheus.yml에서 설정한대로면 EndPoint는 http://localhost:8080/actuator/prometheus이어야 했고, labels는 job="monitoring-app"으로 나타나야 했다.
global:
scrape_interval: 10s # 10초 마다 Metric을 Pulling
evaluation_interval: 1m #1분 마다 규칙 평가
external_labels: # 외부 시스템에 표시할 이 서버의 레이블
monitor: 'my-app-monitor'
scrape_configs:
- job_name: 'monitoring-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080']
📃문제점2-시도
1. prometheus.yml에서 targets를 ['host.docker.internal:8080'] 로 변경 시도 ❌
2. prometheus.yml 설정 파일이 적용되지 않는 것 같아 prometheus를 도커가 아닌 로컬 PC에 직접 설치해서 실행 ❌
3. 오타 발견! metrics_path: 인데 matric_path로 작성(s가 빠졌음)을 했다. 오타가 문제였나...! 하고 스스로를 탓하다가 오타를 고쳐도 설정 파일이 적용되지는 않았다. ❌
🔍문제점2-해결
혹시나 C드라이브 경로에 접근이 안되나..? 싶은 생각이 들었다.
그래서 promethes.yml을 C드라이브와는 전혀 상관없는 D드라이브로 옮겼다.
그리고서 다음 터미널창에 다음 명령어를 입력했다.
docker run -d -p 9090:9090 -v D:/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
localhost:9090에 접속해 targets를 확인했더니 이게 무슨 일... 타겟이 변경되었다!
💻문제점3
Target의 상태가 Down인 문제가 생겼다. 에러 메시지를 보면 연결이 거부 당했다고 뜬다.
📃문제점3-시도
1. 프로젝트 재실행 ❌
🔍문제점3-해결
로컬 컴퓨터에서는 localhost로 연결되어 있겠지만, 도커 컨테이너 내부에서는 localhost로 연결하는게 적절하지 않을 수 있다는 내용을 찾아서, prometheus.yml에서 target을 다음과 같이 변경했다.
['localhost:8080']이 아닌 ['host.docker.internal:8080']
global:
scrape_interval: 10s # 10초 마다 Metric을 Pulling
evaluation_interval: 1m #1분 마다 규칙 평가
external_labels: # 외부 시스템에 표시할 이 서버의 레이블
monitor: 'my-app-monitor'
scrape_configs:
- job_name: 'monitoring-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
다시 prometheus를 재설치하고 접속해보았더니 무사히 타켓의 state가 UP으로 되어있었다.
💻문제점4
이제 Grafana와 Prometheus를 연동해야 했다.
Grafana에서 JVM(Micrometer)를 import 해서 대시보드를 생성했다. 연결이 잘 된 줄 알았더니 N/A...?
계속 연결 실패 에러 메시지가 떴는데 자세히 보니 다음과 같은 오류가 떴다.
Status: 502. Message: Post "http://localhost:9090/api/v1/query_range": dial tcp 127.0.0.1:9090: connect: connection refused
🔍문제점4-해결
Grafana에서 Prometheus 데이터 소스 설정을 할 때 HTTP URL에 http://localhost:9090으로 작성했었다.
Grafana 또한 도커 컨테이너로 실행하는 것이라 localhost가 아닌 http://host.docker.internal:9090 으로 변경해주었다.
그랬더니 정상적으로 연결된 것을 확인할 수 있었다.
'TIL' 카테고리의 다른 글
[TIL - 20230530] Webflux + RSocket 채팅 (0) | 2023.06.01 |
---|---|
[TIL - 20230526] Github Actions Jacoco&Codecov (0) | 2023.05.27 |
[TIL - 20230524] WebFlux 예제 구현 (0) | 2023.05.25 |
[TIL - 20230522] EC2 도커 이미지 한 번에 배포.. OBS 연결 실패 (0) | 2023.05.23 |
[TIL - 20230522] 로컬에서 OBS 실시간 스트리밍 (0) | 2023.05.23 |