대상

  • spring boot application
  • mysql (docker)

모니터링 구성

  • prometheus
  • grafana
  • mysql_exporter

prometheus docker 설치

  • prometheus.yml boot application 설정
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: boot
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['ip:port']

ip : docker 내부에서 로컬 application 으로 접속 해야 하므로 localhost로는 접속이 안됨. ip 로 설정

port : application port

 

  • docker run
docker run -d -p 9090:9090 -v /파일경로/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

 

  • prometheus 콘솔 접속
    • http://localhost:9090/

grafana docker 설치

docker run --name grafana -d -p 80:3000 grafana/grafana
  • 접속 : http://localhost/
  • prometheus 데이터 소스 설정
    • http://localhost/connections/datasources 접속 하여 add new data source 버튼 클릭
    • prometheus 선택 
    • Name 입력
    • Prometheus Server URL 입력 : http://host.docker.internal:9090
      • localhost 로 설정 시 아래와 같은 에러로 접속 테스트 실패 
      • Post "http://localhost:9090/api/v1/query": dial tcp 127.0.0.1:9090: connect: connection refused - There was an error returned querying the Prometheus API.
    • 화면 끝에 Save & Test 버튼 클릭
  • 대시 보드 구성

mysql_exporter docker 설치

  • mysql_exporter 용 mysql 사용자(test_exp) 생성
CREATE USER 'test_exp'@'localhost' IDENTIFIED BY 'test_exp' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'test_exp'@'localhost';
flush privileges;
  • /etc/mysql/my.cnf 파일 생성 (원하는 위치에 생성)
[client]
host=ip
port=3306
socket=/home/mysql.sock
user=test_exp
password=test_exp

 

  • docker run
    • mysql 이 docker로 떠 있는 상태에서 mysql.sock을 이용해 mysql_exporter가 mysql에 접속 해야 함
    • 따라서 mysql docker의 mysql.sock 을 mysql_exporter가 참조 하도록 해야 함
    • mysql docker의 mysql.sock은 /var/lib/mysql/mysql.sock 에 있지만, 심볼릭 링크로 걸려 있음 
    • 링크 : /var/lib/mysql/mysql.sock -> /var/run/mysqld/mysqld.sock
    • 링크 : /var/run -> /run
    • 결국 이 위치 : /run/mysqld/mysqld.sock
    • 이 파일을 mysql_exporter와 공유해야 함 
    • mysql docker 실행 시 -v /mornitoring/mysql_exporter:/run/mysqld 옵션을 주어 로컬의 /mornitoring/mysql_exporter 디렉토리로 공유하고
    • 이 디렉토리의 mysqld.sock 을 mysql_exporter와 공유하도록 함
docker run -itd -p 9104:9104 -v /etc/mysql/my.cnf:/home/.my.cnf -v /mornitoring/mysql_exporter/mysqld.sock:/home/mysql.sock --name mysql_exporter prom/mysqld-exporter --config.my-cnf=/home/.my.cnf
  • prometheus.yml mysql_exporter 설정 추가 후 prometheus 재시작
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: mysql_exporter
    static_configs:
      - targets: ['ip:9104']
  • grafana 대시보드 구성

Prometheus 확인

  • http://localhost:9090/targets?search= 접속

 

 

 

 

+ Recent posts