Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • spring
  • 우아한테크코스
  • 레포지토리
  • 문자열
  • MariaDB
  • til
  • 파이썬
  • SQL
  • java
  • 다이나믹 프로그래밍
  • elasticsearch
  • 코틀린
  • 프리코스
  • 안드로이드
  • enum
  • Docker
  • Android
  • kibana
  • 코틀린 인 액션
  • Wil
  • 코딩테스트
  • ec2
  • webflux
  • 에라토스테네스의 체
  • 내림차순
  • kotlin
  • rsocket
  • 백준
  • grafana

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

[TIL - 20230525] Prometheus, Grafana 적용, 오류 해결
TIL

[TIL - 20230525] Prometheus, Grafana 적용, 오류 해결

2023. 5. 25. 22:01

 

💻문제점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 으로 변경해주었다. 

그랬더니 정상적으로 연결된 것을 확인할 수 있었다.

728x90

'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
    'TIL' 카테고리의 다른 글
    • [TIL - 20230530] Webflux + RSocket 채팅
    • [TIL - 20230526] Github Actions Jacoco&Codecov
    • [TIL - 20230524] WebFlux 예제 구현
    • [TIL - 20230522] EC2 도커 이미지 한 번에 배포.. OBS 연결 실패
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바