๐บ ๋ชฉ์ฐจ ๐บ(๋ณด์๋ ค๋ฉด ์๋ ๋๋ณด๊ธฐ ๋ฅผ ๋๋ฌ์ฃผ์ธ์.)
์ด๋ฒ ๊ธ์์๋ ์ ๊ธ์์ ์ค์นํ grafana, prometheus, nodeexporter, cadvisor, alertmanager ์๋ค๊ฐ mysql_cname๊ณผ front_nginx_cname ์ปจํ ์ด๋์ ์ข๋ ์์ธํ ์ ๋ณด๋ฅผ grafana์์ ๋ณผ ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ mysqld-exporter, nginx-pormetheus-exporter ๋ฅผ ๋ ์ค์นํ ๊ฒ์ ๋๋ค.
1. ์ค์นํ๊ธฐ ์ ์์์ผ ํ ๋ด์ฉ
๊ฐ. nginx-pormetheus-exporter
์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ nginx์ --with-http_stub_status_module ๋ชจ๋์ด ํ์ฑํ ๋์ด ์์ด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ front_nginx_cname ์ปจํ ์ด๋์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ ์ด๋ฏธ ์ ๋ชจ๋์ด ํฌํจ๋์ด ์์ผ๋ ๋ฐ๋ก ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
๋. mysqld-exporter
์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ mysql์ ์ ์ํด์ ๊ฐ์ข ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ณ๋ ๊ณ์ ์ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ์ง๋ง, ๋ณธ ๊ธ์์๋ ๊ทธ๋ฅ ๊ฐ๋จํ root ๊ณ์ ์ผ๋ก ์ด์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
2. nginx-pormetheus-exporter ์ฌ์ฉ์ ์ํด ์ค์ ํ ๊ฒ
๊ฐ. nginx ์ค์ ์์
docker\front\default.conf ํ์ผ์ ๋งจ ์ฒ์ 80ํฌํธ์ ํด๋น๋๋ server ๋ธ๋ญ์ ์๋์ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
server {
listen 80;
modsecurity on;
modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
location /metrics { ##๐ด ์ด ๋ถ๋ถ ์ถ๊ฐ
stub_status on; ##๐ด ์ด ๋ถ๋ถ ์ถ๊ฐ
access_log off; ##๐ด ์ด ๋ถ๋ถ ์ถ๊ฐ
}
location / {
limit_req zone=hello burst=10 nodelay;
limit_req_status 429;
proxy_pass http://web;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
๋. ์ด์ ์ปจํ ์ด๋๋ฅผ ์๋ก ์์ฑํ ํ http://์๋ฒ์์ดํผ/metrics ๋ก ์ ์์ ํ์ ๋ ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์์ผ ํฉ๋๋ค.
3. docker-compose.yml ์์
### ๋งจ ์๋ volumes: ๋ฐ๋ก ์์ ์ถ๊ฐํ๊ธฐ ###
nginx-prometheus-exporter:
image: nginx/nginx-prometheus-exporter:0.11.0
container_name: nginx-prometheus-exporter
restart: unless-stopped
expose:
- 9113
command:
- -nginx.scrape-uri=http://front_nginx/metrics #๋ฐ๋ก ์์์ ์ค์ ํ ๊ฒฝ๋ก
- -nginx.retries=10
depends_on:
- prometheus
networks:
- mung_net
mysqld-exporter:
image: quay.io/prometheus/mysqld-exporter
container_name: mysqld-exporter
restart: unless-stopped
environment: #๐ด์ฌ๊ธฐ์๋ ๊ฐ๋จํ root ๊ณ์ ์ ๋ณด ์ฌ์ฉ
- DATA_SOURCE_NAME=root:password@(mysql_serv:3306)/testdb
expose:
- "9104"
depends_on:
- mysql_serv
networks:
- mung_net
4. prom\prometheus\prometheus.yml ๋ด์ฉ ์ถ๊ฐ
### scrape_configs: ์๋ซ ๋ถ๋ถ์ ๋ค์ ๋ด์ฉ ์ถ๊ฐํ๊ธฐ ###
- job_name: 'mysqld-exporter'
scrape_interval: 15s
static_configs:
- targets: ['mysqld-exporter:9104']
- job_name: 'nginx-prometheus-exporter'
scrape_interval: 15s
static_configs:
- targets: ['nginx-prometheus-exporter:9113']
=> ์ฌ๊ธฐ ๊น์ง ์์ ์ ํ์ผ๋ฉด ์ปจํ ์ด๋๋ฅผ ์๋ก ์์ฑํฉ๋๋ค.
5. grafana dashboard ์ถ๊ฐํ๊ธฐ
๊ฐ. http://์๋ฒ์์ดํผ:3000 ๋ก ์ ์ํด์ grafana์ ๋ก๊ทธ์ธ ํฉ๋๋ค.
๋. Dashboard๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์๋ ๊ทธ๋ฆผ์ฒ๋ผ Import ๋ฅผ ๋๋ฌ์ค๋๋ค.
๋ค. Dashboard๋ฅผ ์ง์ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ์ฌ๊ธฐ์๋ ์ฝ๊ฒ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ Dashboard๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์๋ ๋งํฌ๋ฅผ ๋๋ฌ grafana Dashboard ํํ์ด์ง๋ก ์ด๋ํ ํ ๊ฒ์์ฐฝ์ nginx ๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค.
https://grafana.com/grafana/dashboards/
๋ผ. ๋ชฉ๋ก ์ค์์ NGINX exporter ๋ฅผ ์ฐพ์ ๋๋ฌ์ค๋๋ค.
๋ง. ํ๋ฉด์์ Copy ID to clipboard ๋ฅผ ๋๋ฌ์ค๋๋ค. ๊ทธ๋ผ ์์ด๋ ๊ฐ์ด ๋ณต์ฌ๋ฉ๋๋ค.
๋ฐ. ๋ค์ grafana ํ๋ฉด์ผ๋ก ๋์์์ ๊ทธ๋ฆผ ๋ถ๋ถ์ ๋๋ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ ํ Load ๋ฒํผ์ ๋๋ฆ ๋๋ค.
์ฌ. ์๋ ๊ทธ๋ฆผ ๋ถ๋ถ์ ๋๋ฌ Prometheus (default)๋ฅผ ์ ํํ ํ Import ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
์. ๊ทธ๋ผ ์๋์ ๊ฐ์ด ์๋จ์ ์๋ nginx ์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์. ์์ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก mysql์ ์ํ Dashboard๋ฅผ ์ค์นํ๋ฉด ๋ฉ๋๋ค. ์ ๋ ์๋์ ๊ฐ์ด ์ฒซ๋ฒ์งธ๋ก ๋์ค๋ MySQL Overview๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
์ฐจ. ์ MySQL Overview Dashboard๋ฅผ ์ค์นํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค.
๐บ๐บ ์์ ํ ๋ชจ๋ ์์ค๋ ์๋ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๐บ๐บ
https://github.com/mmssem/ServerMonitoring