Skip to main content

Requests time tracker from being captured by proxy (e.g. nginx) till being executed by wsgi handler

Project description

Queue time tracker

Reads time when request was processed by nginx & send time spent in queue before it was handled by wsgi.
Designed mostly for autoscaling. Instance cpu is not trustworthy enough, sometimes there can be external bottlenecks, so even if instance cpu is fine, application can hang in queue between nginx(for example) and gunicorn or another wsgi processor.

Configuration

  1. Add header with request timestamp.

    nginx:

    proxy_set_header X-RequestTime $msec;
    
  2. Read header value & send metric value

Django application

  1. Configure django settings:

aws:

  • QUEUE_TIME_TRACKER_NOTIFY_EVERY_SECONDS = 10
  • QUEUE_TIME_TRACKER_HEADER = 'HTTP_X_REQUESTTIME'
  • QUEUE_TIME_TRACKER_CACHE_NAME = 'default'
  • QUEUE_TIME_TRACKER_CACHE_KEY_PREFIX = 'foobar'
  • QUEUE_TIME_TRACKER_CLOUDWATCH_NAMESPACE = 'FooBar Web'
  • QUEUE_TIME_TRACKER_CLOUDWATCH_ACCESS_KEY = 'AK****A'
  • QUEUE_TIME_TRACKER_CLOUDWATCH_SECRET_KEY = 'so******BS'
  • QUEUE_TIME_TRACKER_CLOUDWATCH_REGION = 'us-west-1'

azure:

  • QUEUE_TIME_TRACKER_AZURE_REGION = 'eastus'
  • QUEUE_TIME_TRACKER_AZURE_SUBSCRIPTION_ID = '*****'
  • QUEUE_TIME_TRACKER_AZURE_RESOURCE_GROUP_NAME = 'example_group'
  • QUEUE_TIME_TRACKER_AZURE_PROVIDER_NAME = 'Microsoft.ContainerService'
  • QUEUE_TIME_TRACKER_AZURE_RESOURCE_TYPE = 'managedClusters'
  • QUEUE_TIME_TRACKER_AZURE_RESOURCE_ID = 'example-k8s-cluster'
  1. Wrap wsgi application with time tracker: aws:
from request_time_tracker.wsgi_django.cloudwatch import CloudWatchQueueTimeTracker

application = get_wsgi_application()

application = CloudWatchQueueTimeTracker(application)

azure:

from request_time_tracker.wsgi_django.azure import AzureMonitoringQueueTimeTracker

application = get_wsgi_application()

application = AzureMonitoringQueueTimeTracker(application)

Non-django application

  1. Wrap wsgi application with time tracker. Example:
from functools import partial
from request_time_tracker.trackers.cache.redis import RedisCacheQueueTimeTracker
from request_time_tracker.notifiers.cloudwatch import CloudWatchNotifier

tracker = partial(
    RedisCacheQueueTimeTracker, 
    queue_time_header_name='HTTP_X_REQUESTTIME',
    redis_url='redis://localhost:6379/0',
    notifier=CloudWatchNotifier(
        namespace='FooBar Web',
        aws_access_key='AK****A',
        aws_secret_key='so******BS',
        aws_region='us-west-1',
    ),
)

wsgi_application = tracker(wsgi_application)

Cloudwatch role policy:

{
    “Version”: “2012-10-17",
    “Statement”: [
        {
            “Sid”: “VisualEditor0”,
            “Effect”: “Allow”,
            “Action”: [“cloudwatch:PutMetricData”],
            “Resource”: “*”
        }
    ]
}

Azure

role definition: Monitoring Metrics Publisher https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#monitoring-metrics-publisher

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

request-time-tracker-0.0.10.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

request_time_tracker-0.0.10-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file request-time-tracker-0.0.10.tar.gz.

File metadata

  • Download URL: request-time-tracker-0.0.10.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for request-time-tracker-0.0.10.tar.gz
Algorithm Hash digest
SHA256 0e52c7818b01d46ca460f5ef93fb9bd354143711e5b972a47bb93a2ecfc463cc
MD5 4c4539f481c1237fd4a367e90e28f799
BLAKE2b-256 ad33c7dd4e40a817257f0ce91b7a5a9143b9af86dd00742926cf1bf6d523064b

See more details on using hashes here.

File details

Details for the file request_time_tracker-0.0.10-py3-none-any.whl.

File metadata

File hashes

Hashes for request_time_tracker-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 eb574e06a6345d863ccaae120ef64e85cffcbaa09b124bb48278081e5eab5478
MD5 d922e4b1b3c8e0e43d0b73d1b41c3c2a
BLAKE2b-256 7981cc102453d81ba23dbc0e1c6a217c0adc96535caa91cbd4d625036b079968

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page