Prometheus
<https://prometheus.io/>
도커로 열어보기
Django-prometheus
<https://github.com/korfuri/django-prometheus>
프로메테우스가 장고를 모니터링하게 만들기 위해서는 몇가지 설정을 변경해주어야 한다.
장고 프로메테우스 설치
pip install django-prometheus
파이썬 settings.py 에 설치내용과 미들웨어 추가
INSTALLED_APPS = [
...
'django_prometheus',
...
]
MIDDLEWARE = [
'django_prometheus.middleware.PrometheusBeforeMiddleware',
# All your other middlewares go here, including the default
# middlewares like SessionMiddleware, CommonMiddleware,
# CsrfViewmiddleware, SecurityMiddleware, etc.
'django_prometheus.middleware.PrometheusAfterMiddleware',
]
DATABASES = {
'default': {
'ENGINE': 'django_prometheus.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
}
프로메테우스의 미들웨어로 다른 미들웨어를 감싸야 한다. 데이터베이스는 장고엔진이 아닌 장고-프로메테우스 엔진으로 변경해서 db 정보도 모니터링 할 수 있게 한다. 데이터베이스는 적용되는 데이터베이스 종류가 있으니 확인하고 적용해야한다.
그리고 project/urls.py 에서 장고-프로메테우스 라이브러리에서 제공하는 urls 소스를 사용하게 끔 설정한다.
urlpatterns = [
...
path('', include('django_prometheus.urls')),
]
docker-compose 를 사용할 예정이니, requirements.txt 에 새로 설치한 내용을 넣어주고
django-prometheus==2.3.1
docker-compose.yml 파일에도 내용을 추가해 준다.
...
...
prome:
container_name: lion-prome
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./monitoring:/etc/prometheus
- prometheus-data:/prometheus
volumes:
staticfiles:
postgres_data:
prometheus-data:
docker-compose 파일에 볼륨을 보면 알겠지만, prometheus.yml 파일을 매핑해주는데 이부분이 설정파일이다.
오픈 소스의 내용을 보면,
# examples/prometheus/prometheus.yml
global:
scrape_interval: 10s
evaluation_interval: 10s
external_labels:
monitor: django-monitor
rule_files:
- "django.rules"
scrape_configs:
- job_name: "django"
static_configs:
- targets: ["localhost:8000"]
rules_file 과 scrape_configs 에 설정값들이 있다. 이 내용들을 가져와서 내 모니터링 기능으로 적용시켜야 한다.
프로젝트 최상위 경로에 모니터링을 새롭게 구성했고, 그 안쪽에 example 에 명시되어 있는 파일들을 가져와 수정했다.
django.rules 는 그대로 두었고, prometheus.yml 에서 한가지를 변경했는데,
global:
scrape_interval: 10s
evaluation_interval: 10s
external_labels:
monitor: django-monitor
rule_files:
- "django.rules"
scrape_configs:
- job_name: "django"
static_configs:
- targets: ["lion-app:8000"]
docker-compose 파일에서는 서비스 이름으로 참조가 가능하기 때문에 이렇게 해서 내 앱을 모니터링 하게 끔 설정했다.
docker-compose up --build -d
#
⠿ Network dev_django_app_default Created 0.0s
⠿ Volume "dev_django_app_prometheus-data" Created 0.0s
⠿ Container lion-prome Started 0.7s
⠿ Container postgres-db Started 0.7s
⠿ Container lion-app-dc Started 1.0s
⠿ Container lion-nginx-dc Started 1.2s
(venv) kimminhyeok@Ivans-Mac dev_django_app %
prometheus 접속 후 잘 연결이 되었는지 확인
<http://localhost:9090/>
# status >> Configuration
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 10s
external_labels:
monitor: django-monitor
rule_files:
- /etc/prometheus/django.rules
scrape_configs:
- job_name: django
honor_timestamps: true
scrape_interval: 10s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
enable_http2: true
static_configs:
- targets:
- lion-app:8000
# status >> Rules
# status >> Targets
만약 타겟에서 계속 400 에러가 나고 있다면 allowed host 부분을 확인하고 와일드카드를 심어주자. 프로메테우스에서 로컬로 URL 이 설정되어 있는 것 처럼 보이나 이는 컨테이너에서 띄운 로컬 호스트이기 때문에 실제 장고 컨테이너에서는 호스트정보가 로컬 호스트는 아니기 때문이다.
댓글