대상
- 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= 접속