test pg_stat
This commit is contained in:
parent
3105cc3da0
commit
95f4bab9a4
35
config.json
35
config.json
@ -32,6 +32,18 @@
|
|||||||
"ports": [{"internal": 9187, "external": 9187}]
|
"ports": [{"internal": 9187, "external": 9187}]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "pgadmin",
|
||||||
|
"image": "dpage/pgadmin4:latest",
|
||||||
|
"envs": {
|
||||||
|
"PGADMIN_DEFAULT_EMAIL": "admin@admin.com",
|
||||||
|
"PGADMIN_DEFAULT_PASSWORD": "admin"
|
||||||
|
},
|
||||||
|
"network_mode": "testNetwork",
|
||||||
|
"ports": [{"internal": 80, "external": 5050}]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "odoo",
|
"name": "odoo",
|
||||||
@ -108,7 +120,30 @@
|
|||||||
"volume_name": "backup-data"
|
"volume_name": "backup-data"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "postgres_metrics_exporter",
|
||||||
|
"image": "python:3.9-slim",
|
||||||
|
"command": [
|
||||||
|
"python",
|
||||||
|
"-u",
|
||||||
|
"/scripts/prometheus_exporter.py"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
{
|
||||||
|
"host_path": "./prometheus_exporter.py",
|
||||||
|
"container_path": "/scripts/prometheus_exporter.py"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"network_mode": "testNetwork",
|
||||||
|
"ports": [
|
||||||
|
{
|
||||||
|
"internal": 8000,
|
||||||
|
"external": 8000
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,23 +1,13 @@
|
|||||||
global:
|
global:
|
||||||
scrape_interval: 15s # How often to scrape metrics (every 15 seconds)
|
scrape_interval: 15s
|
||||||
|
|
||||||
scrape_configs:
|
scrape_configs:
|
||||||
- job_name: 'postgres' # For scraping PostgreSQL
|
|
||||||
static_configs:
|
|
||||||
- targets: ['postgres:5432']
|
|
||||||
|
|
||||||
- job_name: 'odoo' # For scraping Odoo
|
|
||||||
static_configs:
|
|
||||||
- targets: ['odoo:8069']
|
|
||||||
|
|
||||||
- job_name: 'grafana' # For scraping Grafana
|
|
||||||
static_configs:
|
|
||||||
- targets: ['grafana:3000']
|
|
||||||
|
|
||||||
- job_name: 'postgres_exporter'
|
- job_name: 'postgres_exporter'
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['postgres_exporter:9187']
|
- targets: ['postgres_exporter:9187']
|
||||||
|
|
||||||
|
- job_name: 'pg_stat_statements'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['postgres_metrics_exporter:8000']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
50
prometheus_exporter.py
Normal file
50
prometheus_exporter.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
from prometheus_client import start_http_server, Gauge
|
||||||
|
import psycopg2
|
||||||
|
import time
|
||||||
|
|
||||||
|
# Configuration de la connexion à la base de données
|
||||||
|
conn_params = {
|
||||||
|
"host": "admin",
|
||||||
|
"database": "admin",
|
||||||
|
"user": "admin",
|
||||||
|
"password": "admin"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Définition des métriques Prometheus
|
||||||
|
QUERY_CALLS = Gauge('postgresql_query_calls', 'Nombre d\'appels de requêtes PostgreSQL', ['query'])
|
||||||
|
QUERY_TOTAL_TIME = Gauge('postgresql_query_total_time_ms', 'Temps total des requêtes PostgreSQL en millisecondes', ['query'])
|
||||||
|
|
||||||
|
def generate_metrics():
|
||||||
|
try:
|
||||||
|
# Connexion à la base de données
|
||||||
|
conn = psycopg2.connect(**conn_params)
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
# Exécution de la requête pour récupérer les informations sur les requêtes
|
||||||
|
cur.execute("""
|
||||||
|
SELECT
|
||||||
|
query,
|
||||||
|
calls,
|
||||||
|
total_time
|
||||||
|
FROM pg_stat_statements
|
||||||
|
ORDER BY total_time DESC;
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Mise à jour des métriques Prometheus
|
||||||
|
for row in cur:
|
||||||
|
query = row[0].replace("\\", "\\\\").replace('"', '\\"') # échappement pour Prometheus
|
||||||
|
QUERY_CALLS.labels(query=query).set(row[1])
|
||||||
|
QUERY_TOTAL_TIME.labels(query=query).set(row[2] * 1000) # Convertir le temps en millisecondes
|
||||||
|
|
||||||
|
cur.close()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
except psycopg2.Error as e:
|
||||||
|
print(f"Erreur de connexion à la base de données: {e}")
|
||||||
|
|
||||||
|
# Fonction principale pour démarrer l'exporteur
|
||||||
|
if __name__ == '__main__':
|
||||||
|
start_http_server(8000) # Démarre un serveur HTTP sur le port 8000 pour exposer les métriques
|
||||||
|
while True:
|
||||||
|
generate_metrics() # Génére les métriques
|
||||||
|
time.sleep(60) # Intervalle d'exécution, ici toutes les 60 secondes
|
Loading…
Reference in New Issue
Block a user