141 lines
4.6 KiB
Python
141 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
import json
|
|
import requests
|
|
|
|
# UID de la datasource Prometheus (smart-city-prometheus-brokers)
|
|
# À récupérer via l'API Grafana
|
|
try:
|
|
resp = requests.get('https://grafana.digitribe.fr/api/datasources',
|
|
auth=('admin', 'Digitribe972'), verify=False)
|
|
ds_uid = None
|
|
if resp.ok:
|
|
for ds in resp.json():
|
|
if 'prometheus' in ds['type'].lower() and 'broker' in ds['name'].lower():
|
|
ds_uid = ds['uid']
|
|
print(f"Datasource Prometheus trouvée: {ds['name']} (UID: {ds_uid})")
|
|
break
|
|
except:
|
|
pass
|
|
|
|
if not ds_uid:
|
|
ds_uid = 'f9ddd651-33ec-4dad-a950-e1375a964315' # Fallback Prometheus Brokers
|
|
print(f"Utilisation UID par défaut: {ds_uid}")
|
|
|
|
dashboard = {
|
|
"annotations": {"list": []},
|
|
"editable": True,
|
|
"fiscalYearStartMonth": 0,
|
|
"graphTooltip": 1,
|
|
"id": None,
|
|
"links": [],
|
|
"panels": [
|
|
# CPU Usage
|
|
{
|
|
"title": "CPU Usage (Docker Containers)",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0},
|
|
"datasource": {"type": "prometheus", "uid": ds_uid},
|
|
"targets": [
|
|
{
|
|
"expr": 'rate(docker_container_cpu_usage_seconds_total[5m]) * 100',
|
|
"legendFormat": "{{container}}",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"unit": "percent"
|
|
}
|
|
}
|
|
},
|
|
# Memory Usage
|
|
{
|
|
"title": "Memory Usage (Docker Containers)",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 0},
|
|
"datasource": {"type": "prometheus", "uid": ds_uid},
|
|
"targets": [
|
|
{
|
|
"expr": 'docker_container_memory_usage_bytes / 1024 / 1024 / 1024',
|
|
"legendFormat": "{{container}} (GB)",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"unit": "decbytes"
|
|
}
|
|
}
|
|
},
|
|
# Network Traffic (RX)
|
|
{
|
|
"title": "Network Receive (Docker Containers)",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 16},
|
|
"datasource": {"type": "prometheus", "uid": ds_uid},
|
|
"targets": [
|
|
{
|
|
"expr": 'rate(docker_container_network_receive_bytes_total[5m]) * 8',
|
|
"legendFormat": "{{container}} RX",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"unit": "bps"
|
|
}
|
|
}
|
|
},
|
|
# Network Traffic (TX)
|
|
{
|
|
"title": "Network Transmit (Docker Containers)",
|
|
"type": "timeseries",
|
|
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 16},
|
|
"datasource": {"type": "prometheus", "uid": ds_uid},
|
|
"targets": [
|
|
{
|
|
"expr": 'rate(docker_container_network_transmit_bytes_total[5m]) * 8',
|
|
"legendFormat": "{{container}} TX",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"unit": "bps"
|
|
}
|
|
}
|
|
},
|
|
# Container Status
|
|
{
|
|
"title": "Container Status (1=Running, 0=Stopped)",
|
|
"type": "state-timeline",
|
|
"gridPos": {"h": 8, "w": 24, "x": 0, "y": 32},
|
|
"datasource": {"type": "prometheus", "uid": ds_uid},
|
|
"targets": [
|
|
{
|
|
"expr": 'docker_container_status',
|
|
"legendFormat": "{{container}}",
|
|
"refId": "A"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"schemaVersion": 38,
|
|
"style": "dark",
|
|
"tags": ["docker", "containers", "metrics", "prometheus"],
|
|
"templating": {"list": []},
|
|
"time": {"from": "now-1h", "to": "now"},
|
|
"title": "Smart City - Docker Containers Metrics",
|
|
"uid": "smartcity-docker-metrics",
|
|
"version": 1
|
|
}
|
|
|
|
# Sauvegarder localement
|
|
with open('/home/eric/smart-city-digital-twin-martinique/grafana-dashboard-docker-metrics.json', 'w') as f:
|
|
json.dump(dashboard, f, indent=2)
|
|
|
|
print("✅ Dashboard Docker Metrics généré")
|
|
print(f" Fichier: grafana-dashboard-docker-metrics.json")
|
|
print(f" UID: {dashboard['uid']}")
|
|
print(f" Datasource Prometheus: {ds_uid}")
|