Adding django prometheus metrics.

This commit is contained in:
Samuel Clay 2022-03-31 15:34:33 -04:00
parent 9e086a0caa
commit 893619596b
12 changed files with 47 additions and 7 deletions

1
.gitignore vendored
View file

@ -19,6 +19,7 @@ certbot.conf
task_env.py task_env.py
app_env.py app_env.py
data/ data/
.prom_cache
config/certificates config/certificates
**/*.xcuserstate **/*.xcuserstate
UserInterfaceState.xcuserstate UserInterfaceState.xcuserstate

View file

@ -126,7 +126,7 @@ push_monitor:
push_deploy: push_deploy:
- docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/newsblur_deploy.Dockerfile --tag=newsblur/newsblur_deploy - docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/newsblur_deploy.Dockerfile --tag=newsblur/newsblur_deploy
push_images: push_web push_node push_monitor push_deploy push_images: push_web push_node push_monitor push_deploy
push: build push_images push: push_images
# Tasks # Tasks
deploy_web: deploy_web:

View file

@ -28,3 +28,21 @@ if workers > 4:
if os.environ.get('DOCKERBUILD', False): if os.environ.get('DOCKERBUILD', False):
workers = 2 workers = 2
prom_folder = '/srv/newsblur/.prom_cache'
os.makedirs(prom_folder, exist_ok=True)
os.environ['PROMETHEUS_MULTIPROC_DIR'] = prom_folder
for filename in os.listdir(prom_folder):
file_path = os.path.join(prom_folder, filename)
try:
if os.path.isfile(file_path) or os.path.islink(file_path):
os.unlink(file_path)
elif os.path.isdir(file_path):
shutil.rmtree(file_path)
except Exception as e:
print('Failed to delete %s. Reason: %s' % (file_path, e))
from prometheus_client import multiprocess
def child_exit(server, worker):
multiprocess.mark_process_dead(worker.pid)

View file

@ -27,6 +27,7 @@ django-oauth-toolkit==1.3.3
django-paypal==1.1.2 django-paypal==1.1.2
django-qurl==0.1.1 django-qurl==0.1.1
django-pipeline>=2,<3 django-pipeline>=2,<3
django-prometheus>=2,<3
django-redis-cache==3.0.0 django-redis-cache==3.0.0
django-redis-sessions==0.6.1 django-redis-sessions==0.6.1
django-ses==1.0.3 django-ses==1.0.3

View file

@ -33,6 +33,7 @@ services:
container_name: grafana container_name: grafana
image: grafana/grafana:8.2.6 image: grafana/grafana:8.2.6
environment: environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=pass - GF_SECURITY_ADMIN_PASSWORD=pass
depends_on: depends_on:
- prometheus - prometheus

View file

@ -5,6 +5,9 @@ services:
hostname: nb.com hostname: nb.com
container_name: newsblur_web container_name: newsblur_web
image: newsblur/newsblur_${NEWSBLUR_BASE:-python3}:latest image: newsblur/newsblur_${NEWSBLUR_BASE:-python3}:latest
# build:
# context: /srv/newsblur
# dockerfile: docker/newsblur_base_image.Dockerfile
user: "${CURRENT_UID}:${CURRENT_GID}" user: "${CURRENT_UID}:${CURRENT_GID}"
environment: environment:
- DOCKERBUILD=True - DOCKERBUILD=True

View file

@ -57,7 +57,7 @@ router_logging = false
static_root_path = public static_root_path = public
# enable gzip # enable gzip
enable_gzip = false enable_gzip = true
# https certs & key file # https certs & key file
cert_file = cert_file =
@ -937,4 +937,4 @@ default_timezone = browser
[expressions] [expressions]
# Enable or disable the expressions functionality. # Enable or disable the expressions functionality.
enabled = true enabled = true

View file

@ -1,5 +1,5 @@
global: global:
scrape_interval: 5s scrape_interval: 30s
scrape_configs: scrape_configs:
- job_name: 'node_exporter' - job_name: 'node_exporter'
consul_sd_configs: consul_sd_configs:
@ -115,6 +115,11 @@ scrape_configs:
- targets: ['{{ monitor_server }}'] - targets: ['{{ monitor_server }}']
metrics_path: /monitor/users metrics_path: /monitor/users
scheme: https scheme: https
- job_name: 'django'
static_configs:
- targets: ['{{ monitor_server }}']
metrics_path: /metrics
scheme: https
#- job_name: 'mongo heap usage' #- job_name: 'mongo heap usage'
# consul_sd_configs: # consul_sd_configs:

View file

@ -1,5 +1,5 @@
global: global:
scrape_interval: 5s scrape_interval: 30s
external_labels: external_labels:
monitor: 'my-monitor' monitor: 'my-monitor'
@ -122,6 +122,13 @@ scrape_configs:
scheme: https scheme: https
tls_config: tls_config:
insecure_skip_verify: true insecure_skip_verify: true
- job_name: 'django'
static_configs:
- targets: ['haproxy']
metrics_path: /metrics
scheme: https
tls_config:
insecure_skip_verify: true
#- job_name: 'mongo heap usage' #- job_name: 'mongo heap usage'
# static_configs: # static_configs:

View file

@ -93,7 +93,7 @@ YOUTUBE_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DATABASES = { DATABASES = {
'default': { 'default': {
'NAME': 'newsblur', 'NAME': 'newsblur',
'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ENGINE': 'django_prometheus.db.backends.postgresql',
#'ENGINE': 'django.db.backends.mysql', #'ENGINE': 'django.db.backends.mysql',
'USER': 'newsblur', 'USER': 'newsblur',
'PASSWORD': 'newsblur', 'PASSWORD': 'newsblur',

View file

@ -104,6 +104,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # 5 MB
MIDDLEWARE = ( MIDDLEWARE = (
'django_prometheus.middleware.PrometheusBeforeMiddleware',
'django.middleware.gzip.GZipMiddleware', 'django.middleware.gzip.GZipMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'subdomains.middleware.SubdomainMiddleware', 'subdomains.middleware.SubdomainMiddleware',
@ -123,6 +124,7 @@ MIDDLEWARE = (
'apps.profile.middleware.SQLLogToConsoleMiddleware', 'apps.profile.middleware.SQLLogToConsoleMiddleware',
'utils.mongo_raw_log_middleware.MongoDumpMiddleware', 'utils.mongo_raw_log_middleware.MongoDumpMiddleware',
'utils.redis_raw_log_middleware.RedisDumpMiddleware', 'utils.redis_raw_log_middleware.RedisDumpMiddleware',
'django_prometheus.middleware.PrometheusAfterMiddleware',
) )
AUTHENTICATION_BACKENDS = ( AUTHENTICATION_BACKENDS = (
@ -314,6 +316,7 @@ INSTALLED_APPS = (
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django_extensions', 'django_extensions',
'django_prometheus',
'paypal.standard.ipn', 'paypal.standard.ipn',
'apps.rss_feeds', 'apps.rss_feeds',
'apps.reader', 'apps.reader',

View file

@ -75,7 +75,8 @@ urlpatterns = [
{'next_page': '/'}, name='logout'), {'next_page': '/'}, name='logout'),
url(r'^account/ifttt/v1/', include('apps.oauth.urls')), url(r'^account/ifttt/v1/', include('apps.oauth.urls')),
url(r'^account/', include('oauth2_provider.urls', namespace='oauth2_provider')), url(r'^account/', include('oauth2_provider.urls', namespace='oauth2_provider')),
url(r'^monitor/', include('apps.monitor.urls'), name="monitor") url(r'^monitor/', include('apps.monitor.urls'), name="monitor"),
url('', include('django_prometheus.urls')),
] ]
if settings.DEBUG: if settings.DEBUG: