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
app_env.py
data/
.prom_cache
config/certificates
**/*.xcuserstate
UserInterfaceState.xcuserstate

View file

@ -126,7 +126,7 @@ push_monitor:
push_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: build push_images
push: push_images
# Tasks
deploy_web:

View file

@ -28,3 +28,21 @@ if workers > 4:
if os.environ.get('DOCKERBUILD', False):
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-qurl==0.1.1
django-pipeline>=2,<3
django-prometheus>=2,<3
django-redis-cache==3.0.0
django-redis-sessions==0.6.1
django-ses==1.0.3

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,5 @@
global:
scrape_interval: 5s
scrape_interval: 30s
external_labels:
monitor: 'my-monitor'
@ -122,6 +122,13 @@ scrape_configs:
scheme: https
tls_config:
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'
# static_configs:

View file

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

View file

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

View file

@ -75,7 +75,8 @@ urlpatterns = [
{'next_page': '/'}, name='logout'),
url(r'^account/ifttt/v1/', include('apps.oauth.urls')),
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: