Skip to main content

Metric monitoring with automatic anomaly detection

Project description

detectkit

PyPI version Python

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
  • CLIdtk 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
  suppress_until: "2026-04-11 18:00:00"  # Suppress alerts until this UTC time

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

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

detectkit-0.4.1.tar.gz (84.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

detectkit-0.4.1-py3-none-any.whl (117.0 kB view details)

Uploaded Python 3

File details

Details for the file detectkit-0.4.1.tar.gz.

File metadata

  • Download URL: detectkit-0.4.1.tar.gz
  • Upload date:
  • Size: 84.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for detectkit-0.4.1.tar.gz
Algorithm Hash digest
SHA256 f293fa9d92b0834515e0b130e2f4143f35ca862e2083ddbd397e1b01b9e95ab9
MD5 87798b44de314921b5ab5dd16552e9d7
BLAKE2b-256 dbc72bcb47441d0c9b6c5961bc883b138affb6b17e127469c22b95529d304af2

See more details on using hashes here.

File details

Details for the file detectkit-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: detectkit-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 117.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for detectkit-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6ac9ded4a2b5fc47beb4000a461c04598307110f477d2d07799d687f1be3c440
MD5 370dc89cbbdbc6a10b948b5edf789f73
BLAKE2b-256 2d95f88bfcb677f2581463caa05fb34549953fe1cfec949e7fc73d7be6c470c2

See more details on using hashes here.

Supported by

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