A Python-based application to backup Grafana settings using the Grafana API
—
InfluxDB integration for backup operation monitoring and metrics collection, enabling operational visibility into backup processes. The monitoring system tracks backup operations, performance metrics, and operational health indicators.
Comprehensive metrics collection and reporting to InfluxDB for backup operation monitoring.
def main(args, settings):
"""
Send backup operation metrics to InfluxDB
Module: grafana_backup.influx
Args:
args (dict): Command line arguments from backup operation
settings (dict): Configuration settings including InfluxDB connection details
Features: Operation metrics, timing data, success/failure tracking
Metrics: Backup duration, component counts, operation status
"""# InfluxDB configuration settings
INFLUXDB_MEASUREMENT: str # InfluxDB measurement name (default: "grafana_backup")
INFLUXDB_HOST: str # InfluxDB server hostname
INFLUXDB_PORT: int # InfluxDB server port (default: 8086)
INFLUXDB_USERNAME: str # InfluxDB username for authentication
INFLUXDB_PASSWORD: str # InfluxDB password for authentication
INFLUXDB_DATABASE: str # InfluxDB database name for metrics storage{
"influxdb": {
"measurement": "grafana_backup",
"host": "localhost",
"port": 8086,
"username": "monitoring",
"password": "monitoring_password",
"database": "grafana_metrics"
}
}export INFLUXDB_MEASUREMENT="grafana_backup"
export INFLUXDB_HOST="influxdb.example.com"
export INFLUXDB_PORT=8086
export INFLUXDB_USERNAME="monitoring"
export INFLUXDB_PASSWORD="secure_password"
export INFLUXDB_DATABASE="grafana_metrics"Metrics collection is automatically triggered after successful backup completion when InfluxDB is configured:
# Backup workflow with automatic metrics collection
from grafana_backup.save import main as save_backup
# Configure InfluxDB in settings
settings['INFLUXDB_HOST'] = 'influxdb.example.com'
settings['INFLUXDB_DATABASE'] = 'grafana_metrics'
# Backup process automatically sends metrics if InfluxDB is configured
save_args = {
'save': True,
'--components': None,
'--no-archive': False,
'--config': None
}
save_backup(save_args, settings)
# 1. Performs backup operations
# 2. Creates archive (if enabled)
# 3. Uploads to cloud storage (if configured)
# 4. Sends metrics to InfluxDB (if configured)The monitoring system collects comprehensive metrics about backup operations:
from grafana_backup.save import main as save_backup
from grafana_backup.grafanaSettings import main as load_config
# Load configuration with InfluxDB settings
settings = load_config('/path/to/grafanaSettings.json')
# Ensure InfluxDB is configured
settings.update({
'INFLUXDB_HOST': 'influxdb.example.com',
'INFLUXDB_PORT': 8086,
'INFLUXDB_USERNAME': 'monitoring',
'INFLUXDB_PASSWORD': 'secure_password',
'INFLUXDB_DATABASE': 'grafana_metrics',
'INFLUXDB_MEASUREMENT': 'grafana_backup'
})
# Perform backup with automatic metrics collection
save_args = {
'save': True,
'--components': None,
'--no-archive': False,
'--config': None
}
save_backup(save_args, settings)from grafana_backup.influx import main as send_metrics
# Send metrics manually after operations
metrics_args = {
'save': True,
'--components': 'dashboards,datasources',
'--config': None
}
send_metrics(metrics_args, settings)# Backup operations automatically collect metrics
save_backup(save_args, settings)
# Restore operations can also collect metrics (if implemented)
from grafana_backup.restore import main as restore_backup
restore_args = {
'restore': True,
'<archive_file>': 'backup_202501011200.tar.gz',
'--components': None,
'--config': None
}
restore_backup(restore_args, settings)
# Delete operations can collect metrics (if implemented)
from grafana_backup.delete import main as delete_components
delete_args = {
'delete': True,
'--components': 'snapshots',
'--config': None
}
delete_components(delete_args, settings)Metrics are stored in InfluxDB using a structured measurement format:
measurement: grafana_backup (configurable via INFLUXDB_MEASUREMENT)
tags:
- operation_type: "backup" | "restore" | "delete"
- operation_status: "success" | "failure" | "partial"
- grafana_host: Grafana server hostname
- components: Comma-separated list of components processed
- archive_created: "true" | "false"
- cloud_upload: "s3" | "azure" | "gcs" | "none"
fields:
- duration: Operation duration in seconds (float)
- start_time: Operation start timestamp (string)
- end_time: Operation end timestamp (string)
- dashboard_count: Number of dashboards processed (integer)
- datasource_count: Number of datasources processed (integer)
- folder_count: Number of folders processed (integer)
- user_count: Number of users processed (integer)
- team_count: Number of teams processed (integer)
- alert_count: Number of alerts processed (integer)
- snapshot_count: Number of snapshots processed (integer)
- annotation_count: Number of annotations processed (integer)
- library_element_count: Number of library elements processed (integer)
- archive_size_bytes: Size of created archive in bytes (integer)
- total_files: Total number of files created (integer)
- error_count: Number of errors encountered (integer)
- api_calls: Number of Grafana API calls made (integer)
- avg_api_response_time: Average API response time in milliseconds (float)Query backup operation metrics:
-- Get recent backup operations
SELECT * FROM grafana_backup
WHERE time > now() - 24h
AND operation_type = 'backup'
-- Calculate average backup duration by component set
SELECT MEAN(duration) as avg_duration
FROM grafana_backup
WHERE time > now() - 7d
AND operation_type = 'backup'
GROUP BY components
-- Monitor backup success rate
SELECT COUNT(*) as total_operations,
SUM(CASE WHEN operation_status = 'success' THEN 1 ELSE 0 END) as successful_operations
FROM grafana_backup
WHERE time > now() - 30dCreate Grafana dashboards to visualize backup metrics:
Set up alerts based on backup metrics:
-- Alert on backup failures
SELECT COUNT(*) FROM grafana_backup
WHERE time > now() - 6h
AND operation_status != 'success'
-- Alert on backup duration anomalies
SELECT duration FROM grafana_backup
WHERE time > now() - 1h
AND duration > (SELECT MEAN(duration) * 2 FROM grafana_backup WHERE time > now() - 7d)
-- Alert on missing backups
SELECT COUNT(*) FROM grafana_backup
WHERE time > now() - 25h
AND operation_type = 'backup'
HAVING COUNT(*) = 0InfluxDB integration provides comprehensive operational visibility:
Enable automated monitoring and alerting:
The monitoring integration provides essential operational visibility for production backup operations, enabling proactive management and continuous improvement of backup processes.
Install with Tessl CLI
npx tessl i tessl/pypi-grafana-backup