Metric monitoring with automatic anomaly detection
Project description
detectkit
Metric monitoring with automatic anomaly detection.
detectkit is a Python library for data analysts and engineers to monitor time-series metrics with automatic anomaly detection and alerting. dbt-like project structure and CLI.
Features
- Pure numpy arrays — no pandas dependency in core logic
- Statistical detectors — Z-Score, MAD, IQR, Manual Bounds
- Multi-channel alerting — Mattermost, Slack, Telegram, Email, Webhook
- @mentions — tag users/groups in alerts, each channel formats natively
- Alert lifecycle — consecutive anomalies, cooldown, recovery notifications
- Database agnostic — ClickHouse, PostgreSQL, MySQL
- Idempotent — resume from interruptions, no duplicate processing
- CLI —
dtk init,dtk run --select, tag-based selectors
Installation
pip install detectkit
With database drivers:
pip install detectkit[clickhouse] # ClickHouse
pip install detectkit[all-db] # All databases
Quick Start
CLI (Recommended)
# Create project
dtk init my_monitoring
cd my_monitoring
# Configure database in profiles.yml, then:
dtk run --select cpu_usage
dtk run --select tag:critical
dtk run --select cpu_usage --steps load,detect
dtk run --select cpu_usage --from 2024-01-01
Metric Configuration
# metrics/api_errors.yml
name: api_error_rate
interval: "5min"
query: |
SELECT
toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS timestamp,
countIf(status_code >= 500) / count() * 100 AS value
FROM http_requests
WHERE timestamp >= %(from_date)s AND timestamp < %(to_date)s
GROUP BY timestamp ORDER BY timestamp
detectors:
- type: mad
params:
threshold: 3.0
window_size: 2016 # 7 days
alerting:
enabled: true
channels: [mattermost_ops]
consecutive_anomalies: 3
direction: "up"
mentions: [oncall_engineer, here]
alert_cooldown: "30min"
notify_on_recovery: true
Python API
import numpy as np
from detectkit.detectors.statistical import ZScoreDetector
detector = ZScoreDetector(threshold=3.0, window_size=100)
results = detector.detect({
'timestamp': np.array([...], dtype='datetime64[ms]'),
'value': np.array([1.0, 2.0, 1.5, 10.0, 1.8]),
})
for r in results:
if r.is_anomaly:
print(f"Anomaly at {r.timestamp}: {r.value}")
Documentation
- Getting Started — 5-minute quickstart
- Configuration Guide — all config options
- Detectors Guide — choosing the right detector
- Alerting Guide — channels, mentions, cooldown, recovery
- CLI Reference — command-line documentation
- Examples — real-world monitoring scenarios
- Changelog — version history
Requirements
- Python 3.10+
- numpy >= 1.24.0
- pydantic >= 2.0.0
- click >= 8.0
- PyYAML >= 6.0
- Jinja2 >= 3.0
License
MIT License — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file detectkit-0.3.9.tar.gz.
File metadata
- Download URL: detectkit-0.3.9.tar.gz
- Upload date:
- Size: 80.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad75e2d4a596eab645ef164da8bdef911e373ae0478455b18fa5785fc0987c47
|
|
| MD5 |
92cc93f089cb2254eea4a4642db48397
|
|
| BLAKE2b-256 |
253674e566339995f40cceb1dc02defb5dd9c759e0fef673223bfc6357d9e077
|
File details
Details for the file detectkit-0.3.9-py3-none-any.whl.
File metadata
- Download URL: detectkit-0.3.9-py3-none-any.whl
- Upload date:
- Size: 104.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
536b31e4de0154385fb4229f02d3f33db8285c649760283d33879bf877174f21
|
|
| MD5 |
f6c04b3b5eb3d66a1c166b079c72eda5
|
|
| BLAKE2b-256 |
4daa867291840022fc2c282c6c4674885bd74391c8333938154ed7ec72c0dfcc
|