Skip to main content

Flask Monitoring Dashboard

A dashboard for automatic monitoring of Flask (https://flask.palletsprojects.com) web-services.

Key Features

The Flask Monitoring Dashboard is an extension for Flask applications that offers four main functionalities with little effort from the Flask developer:

  • Monitor the performance and utilization: The Dashboard allows you to see which endpoints process a lot of requests and how fast. Additionally, it provides information about the evolving performance of an endpoint throughout different versions if you’re using git.

  • Profile requests and endpoints: The execution path of every request is tracked and stored into the database. This allows you to gain insight over which functions in your code take the most time to execute. Since all requests for an endpoint are also merged together, the Dashboard provides an overview of which functions are used in which endpoint.

  • Collect extra information about outliers: Outliers are requests that take much longer to process than regular requests. The Dashboard automatically detects that a request is an outlier and stores extra information about it (stack trace, request values, Request headers, Request environment).

  • Collect additional information about your Flask-application: Suppose you have an User-table and you want to know how many users are registered on your Flask-application. Then, you can run the following query: ‘SELECT Count(*) FROM USERS;’. But this is just annoying to do regularly. Therefore, you can configure this in the Flask-MonitoringDashboard, which will provide you this information per day (or other time interval).

  • Track exceptions: If your application has unhandled exceptions they will automatically be captured together with full stack traces and displayed in the dashboard, if you have monitoring level 1 or above. You can also explicitly capture individual exceptions with the capture_exception function.

The dashboard is automatically added to your existing Flask application. You can view the results by default using the default endpoint (this can be configured to another route):

http://localhost:5000/dashboard

For more advanced documentation, take a look at the information on this site

How to use

Installation

To install from source, download the source code, then run this:

python setup.py install

Or install with pip:

pip install flask_monitoringdashboard

Setup

Adding the extension to your Flask app is simple:

from flask import Flask import flask_monitoringdashboard as dashboard

app = Flask(__name__) dashboard.bind(app)

Feedback

In order to improve our Flask-MonitoringDashboard, we would like to hear from you! Therefore, we made a questionnaire with a few questions. Filling in this form takes less than 3 minutes. You can find the form here.

Alternatively, feel free to write to our email-address.

Documentation

For more advanced documentation, see this site If you run into trouble migrating from version 1.X.X to version 2.0.0, this site will help you solve this too. The migration from 2.X.X to 3.0.0 should be easier.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning. Please note that the changes before version 1.10.0 have not been documented.

v5.0.4

Bug Fix Release

Fixed

  • Pruning: prune_database_older_than_weeks (the scheduled job and the “prune now” button) deletes old requests in batches of 10,000, each in its own transaction, with set-based deletes of their outliers, stack lines and exception occurrences. It used to load every old request into memory and delete their rows one query at a time in a single transaction, which could not finish on a large backlog

v5.0.3

Bug Fix Release

Fixed

  • Timestamps: Request.time_requested and four other timestamp columns were set once, when the models were imported, so every row got the worker’s boot time. They are evaluated per row again. Regression from 5.0.2; affected rows cannot be recovered (#564)

  • Performance: Two indexes on Request, (endpoint_id, duration) and (time_requested, endpoint_id, status_code, duration). On a 4.4M-row table, the per-worker startup query went from 94s to 0.7s and the overview page’s time-windowed counts from 36s to 0.1s each. Existing databases get the indexes on the first startup after upgrading, which takes as long as building them (#565)

  • Performance: The overview page counts exceptions for all endpoints in one query instead of one query per endpoint (#565)

Changed

  • Release: Published to PyPI with trusted publishing instead of an API token (#566)

v5.0.2

Bug Fix Release

Note: v5.0.1 publish to PyPI failed due to test failures. This release includes all fixes from 5.0.1 plus additional corrections.

Fixed

  • Build: Fixed broken 5.0.0 release - Angular frontend is now properly built before publishing to PyPI

  • Deprecation: Replaced deprecated datetime.utcnow() with datetime.now(timezone.utc) throughout codebase

  • Deprecation: Replaced deprecated datetime.utcfromtimestamp() with datetime.fromtimestamp(..., tz=timezone.utc)

  • Deprecation: Replaced datetime.UTC with datetime.timezone.utc for Python 3.11+ compatibility

  • Timezone: Fixed timezone-aware datetime handling in reporting and database operations

  • Timezone: Fixed missing timezone info in hourly load heatmap calculations (controllers/requests.py)

  • Tests: Updated test fixtures to properly handle timezone-aware datetimes

Contributors

Special thanks to: Alex Knop (@aknopper) for identifying and fixing the deprecated datetime usage, and @klnyzzz33 for fixing datetime conversion errors

v5.0.0

Major Release - Exception Monitoring & Stability Improvements

Added

  • Exception Monitoring

    • Automatic capture of uncaught exceptions across all endpoints

    • User-defined exception capture with context

    • Exception grouping by stack trace and endpoint

    • Detailed stack trace visualization with syntax highlighting

    • Exception occurrence tracking and statistics

    • Database schema additions: ExceptionInfo, ExceptionFrame, FunctionLocation, FilePath, ExceptionType, ExceptionMessage

  • Exception dashboard with filterable views

  • Endpoint-specific exception pages

  • Exception pruning as part of database maintenance

Changed

  • BREAKING: Minimum Python version raised from 3.8 to 3.10

  • Security: Updated requests dependency from 2.32.0 to 2.32.4 (addresses CVE-2024-35195)

  • Database: UTF-8 collation support for exception messages with emoji and special characters

  • Timezone: Fixed UTC timezone handling issues

  • UI: Improved sorting on Overview table (now works correctly with median request durations)

  • UI: Resolved sorting issues in Google Chrome browser

  • UI: Enhanced pagination on Overview page

  • Performance: Optimized exception stack trace storage to reduce redundancy

  • Flask 2.3+ compatibility (replaced deprecated before_app_first_request)

  • SQLAlchemy 2.0 compatibility improvements

Fixed

  • Telemetry consent can be properly dismissed

  • MySQL query compatibility for exception monitoring

  • Loading spinner placement on Overview page

  • Sorting now compares numbers correctly (not as strings)

  • Password hash column size increased to support newer Werkzeug versions

Contributors

Special thanks to: Natalie, Carmen, Albert, and all community contributors

v4.0.5

Changed

  • Security: Updated requests dependency from 2.32.0 (yanked) to 2.32.4 to address CVE-2024-35195

  • Fixed: Removed hard pin on requests dependency to allow for security updates

v4.0.4

Changed

Natalie, Carmen, and Albert - Bugfix: the “fixed” sorting from last version compared numbers as strings.

v4.0.3

Changed

Natalie, Carmen, and Albert - Bugfix: the sorting on the Overview table works for median request durations. - Bugfix: resolved sorting issues with the Overview table in Google Chrome. - Fixed placement of loading spinner on Overview page.

v4.0.2

Changed

Natalie, Carmen, and Albert - Bugfix: the telemetry consent can be dismissed again - New and nicer pagination of the Overview table

v4.0.1

Changed

Natalie, Carmen, and Albert - Bugfix: queries work also with MySQL now

v4.0.0

Changed

  • Natalie, Carmen and Albert added support for monitoring exceptions

v3.3.2

Changed

  • Changed functools.cache to lru_cache to support python 3.8

  • Added python version to telemetry

v3.3.1

Changed

  • Telemetry now uses dynamic server-ip

  • Removed survey

  • FollowUp questions refactored

v3.3.0

Changed

  • Added database pruning feature

v3.2.2

Changed

  • Fixed Sphinx documentation

v3.2.1

Changed

  • Removed sentry artifacts in code

v3.2.0

Changed

  • Upgraded multiple frontend packages for enhanced security and performance.

  • Added survey alert

  • Added telemetry alert and functionality

v3.1.2

Changed

  • Compatibility with Flask>=2.x Removed the call to before_app_first_request and replaced it with record_once as per the PR of [@FlorianRhiem](https://github.com/FlorianRhiem).

v3.1.0

Changed

  • Added support for Python 3.8

  • Started using pytest instead of python’s unittest

  • Started using Webpack for frontend packaging

  • Improved reports

  • Moved to Github Actions from Travis for CI/CD

  • Improved docstrings

  • Various bug fixes

v3.0.9

Changed

  • Fixed upgrade message bug

  • Fixed Heroku deployment

v3.0.8

Changed

  • Fixed the changelog; functionality is the same as 3.0.7 :)

v3.0.7

Changed

  • Added a first version of the Reporting functionality

  • Improved usability of the overview table

  • Fixed the issue with some table columns being sorted as text as opposed to numbers

  • A few other bug fixes

v3.0.6

Changed

  • Removed profiler feature from monitoring level 2

  • Added outlier detection feature to monitoring level 3

  • Configurable profiler sampling period, with 5 ms default

  • Implemented an in-memory cache for performance improvements

v3.0.0

Changed

  • Tracking also status codes

  • Display times as numbers to make them sortable

  • Add leading slash to blueprint paths

  • Added status codes with corresponding views

v2.1.1

Changed

  • Default monitoring level is now 1

  • Fixed bug causing config file not being parsed

  • Monitoring level can be set from the ‘detail’ section

  • Improved README

v2.1.0

Changed

  • Frontend is now using AngularJS

  • Removed TestMonitor

  • Added Custom graphs

  • Fixed Issue #206

  • Added support for Python 3.7

  • Updated documentation

  • Updated unit tests

v2.0.7

Changed

  • Fixed Issue #174

  • Fixed issue with profiler not going into code

  • Implemented a Sunburst visualization of the Grouped Profiler

  • Improved test coverage

  • Improved python-doc

  • Added functionality to download the outlier data

  • Dropped support for Python 3.3 and 3.4

v2.0.0

Changed

  • Added a configuration option to prefix a table in the database

  • Optimize queries, such that viewing data is faster

  • Updated database scheme

  • Implemented functionality to customize time window of graphs

  • Implemented a profiler for Request profiling

  • Implemented a profiler for Endpoint profiling

  • Refactored current code, which improves readability

  • Refactoring of Test-Monitoring page

  • Identify testRun by Travis build number

v1.13.0

Changed

  • Added boxplot of CPU loads

  • Updated naming scheme of all graphs

  • Implemented two configuration options: the local timezone and the option to automatically monitor new endpoints

  • Updated the Test-Monitoring initialization

  • Updated Database support for MySQL

v1.12.0

Changed

  • Removed two graphs: hits per hour and execution time per hour

  • New template design

  • Refactored backhand of the code

  • Updated Bootstrap 3.0 to 4.0

  • Setup of Code coverage

v1.11.0

Changed

  • Added new graph: Version usage

  • Added column (Hits in past 7 days) in Measurements Overview

  • Fixed bug with configuration

  • Changed rows and column in outlier-table

  • Added TODO List

  • Updated functionality to retrieve the stacktrace of an Outlier

  • Fixed bug with white colors from the config option

v1.10.0

Changed

  • Added security for automatic endpoint-data retrieval.

  • Added test for export_data-endpoints

  • Added MIT License.

  • Added documentation

Metadata

Release files for Flask-MonitoringDashboard 5.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Flask-MonitoringDashboard 5.0.4
File Size Uploaded
flask_monitoringdashboard-5.0.4.tar.gz 6.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for Flask-MonitoringDashboard 5.0.4
File Interpreter ABI Platform
flask_monitoringdashboard-5.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 7.5 MB

Release files / flask_monitoringdashboard-5.0.4.tar.gz

Download URL flask_monitoringdashboard-5.0.4.tar.gz
Size 6.3 MB
Tags Source
SHA-256 checksum
How to use checksums
c872b4ea6cd5762fab3ef32ea6c64e6d49c688cd273e5f5f731e2d88bd870bb6
BLAKE2b-256 checksum
How to use checksums
53fffcb33ffe928d9f82bbb404dc09f9e6a660e0974a54debeb196346225732b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / flask_monitoringdashboard-5.0.4-py3-none-any.whl

Download URL flask_monitoringdashboard-5.0.4-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
104681e6ffff19cfbada0ce4eb6c60f68dc5a75d83b763d7fb3dd41e1de83b8c
BLAKE2b-256 checksum
How to use checksums
61ae59430705d29fc5922aac2db6be33dafc0193ad9a7d9d810f2d3d90781272
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release history Release notifications | RSS feed

5.1.0

2 release files

This release

5.0.4 This release

2 release files

5.0.3

2 release files

5.0.2

2 release files

5.0.0

2 release files

4.0.5

2 release files

4.0.4

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.3.2

3 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.3

2 release files

3.2.2

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.9

1 release file

3.0.8

1 release file

3.0.7

1 release file

3.0.6

1 release file

3.0.5

1 release file

3.0.4

1 release file

3.0.3

1 release file

3.0.2

1 release file

3.0.1

1 release file

2.1.4

1 release file

2.1.3

1 release file

2.1.2

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.7

1 release file

2.0.6

1 release file

2.0.5

1 release file

2.0.4

1 release file

2.0.3

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.13.1

1 release file

1.13.0

1 release file

1.12.5

1 release file

1.12.3

1 release file

1.12.2

1 release file

1.12.1

1 release file

1.12.0

1 release file

1.11.5

1 release file

1.11.4

1 release file

1.11.3

1 release file

1.11.2

1 release file

1.11.1

1 release file

1.10.9

1 release file

1.10.8

1 release file

1.10.7

1 release file

1.10.6

1 release file

1.10.5

1 release file

1.10.4

1 release file

1.10.3

1 release file

1.10.1

1 release file

1.10.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page