prometheus๊ฐ ์ธ์ฆ์์ด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ธ๋ถ์ ์คํํ๋ฉด ์๋๊ธฐ๋๋ฌธ์ ์ธ์ฆ์ ๋ฃ์ด์ผํ๋ค.
basic์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ๋ oauth2๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์
oauth2๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ oauth2_proxy๋ฅผ ์ฌ์ฉํ์ฌ prometheus์ ์ ๊ทผํ ์ ์๋๋ก ํด์ผ ํ๋ค.
flow diagram
nginx proxy๊ฐ ํธ๋ํฝ์ oauth2-proxy ๋ก ๋ณด๋ธ๋ค. ๋ก๊ทธ์ธ์ ๋ณด๊ฐ ์์ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค. ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด auth0.com์ผ๋ก ๊ฐ์ ๋ก๊ทธ์ธ์ ํํ ๋ค์ oauth2-proxy๋ก ๋์์จ๋ค. ์ด์ ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ์์ผ๋ฏ๋ก oauth2-proxy๋ ํธ๋ํฝ์ prometheus๋ก ๋ณด๋ธ๋ค.
nginx์์๋ ssl์ ์ถ๊ฐํด๋๊ธฐ ๋ฐ๋๋ค.
auth0.com
์ฑ์๋ง๋ค๊ณ callback url์ ์ค์ ํ๋ค.
secret/clientid๋ฅผ ์ ์ด๋๋ค.
oauth2_proxy
https://oauth2-proxy.github.io/oauth2-proxy/docs/
create OAUTH2_PROXY_COOKIE_SECRET
dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 | tr -d -- '\n' | tr -- '+/' '-_'; echo
์ด๊ฑธ ์๋ ํ์ผ์ ๋ฃ๋๋ค.
docker-compose
https://github.com/teamsmiley/devops-public/blob/main/monitoring/6.prometheus-oauth/docker-compose.yaml
version: '3'
services:
nginx:
image: nginx:1.23.3-alpine
container_name: nginx
depends_on:
- prometheus
- grafana
ports:
- 80:80
- 443:443
volumes:
- ./nginx:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
restart: always
oauth2-proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:v7.4.0
container_name: oauth2-proxy
environment:
OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
OAUTH2_PROXY_UPSTREAMS: http://prometheus:9090
OAUTH2_PROXY_PROVIDER_DISPLAY_NAME: Auth0
OAUTH2_PROXY_PROVIDER: oidc
OAUTH2_PROXY_OIDC_ISSUER_URL: https://yourdomain.us.auth0.com/
OAUTH2_PROXY_CLIENT_ID: xxxxxxxxxxxx
OAUTH2_PROXY_CLIENT_SECRET: xxxxxxxxxxxx
OAUTH2_PROXY_CODE_CHALLENGE_METHOD: S256
OAUTH2_PROXY_EMAIL_DOMAINS: '*'
OAUTH2_PROXY_REDIRECT_URL: https://prom.your-domain.com/oauth2/callback
OAUTH2_PROXY_COOKIE_SECRET: 'xxxxxxxxxx'
ports:
- 4180:4180
prometheus:
image: prom/prometheus:v2.40.7
container_name: prometheus
ports:
- '9090:9090'
volumes:
- ./prometheus/prometheus.yaml:/etc/prometheus/prometheus.yaml
- ./prometheus/k8s:/etc/prometheus/k8s
- ./prometheus/alerts:/etc/prometheus/alerts
- ./prometheus/file-sd:/etc/prometheus/file-sd
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yaml'
depends_on:
- alertmanager
restart: always
volumes:
prometheus_data:
nginx config
server {
server_name prom.your-domain.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://oauth2-proxy:4180;
}
}
ํ์ธ
๋์ปค๊ฐ ์คํ๋๊ณ ๋๋ฉด https://prom.your-domain.com์ ์ ์ํ๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋์จ๋ค.
signin์ ๋๋ฅด๋ฉด auth0์์ ๋ก๊ทธ์ธ์ ํ๊ณ ๋ค์ prometheus๋ก ๋์์จ๋ค.
์ด์ prometheusํ๋ฉด์ด ๋ณด์ธ๋ค.
error
๋ง์ฝ ๋ค์ ํ๋ฉด์ ๋ณด๊ฒ ๋๋ค๋ฉด oauth0-proxy์ prometheus๊ฐ ์๋ก ํต์ ์ด ์๋๋๊ฒ์ด๋ค.
์ค์ ์ ํ์ธํด์ ์์ ํ์.