API Insight est un bundle Symfony ultra-léger qui ajoute des métriques, de la visibilité et un point d'observation (/metrics) à toutes tes routes API
composer require api-insight/metrics-bundle
Ajouter le bundle dans config/bundles.php:
return [
// ...
ApiInsight\ApiInsightBundle::class => ['all' => true],
];
Créer le fichier de configuration config/packages/api_insight.yaml:
api_insight:
enabled: true
storage: memory # Options: memory, redis, database (Pro)
auth:
enabled: false
type: token # Options: token, jwt (Pro)
token: null # Votre token secret
prometheus:
enabled: false # Disponible en version Pro
dashboard:
enabled: false # Disponible en version Pro
Importer les routes dans config/routes.yaml:
api_insight:
resource: '@ApiInsightBundle/Resources/config/routes.yaml'
Une fois installé, API Insight commence automatiquement à collecter des métriques sur toutes les requêtes API.
Accédez à vos métriques via l'endpoint /metrics:
curl http://votre-api.com/metrics
Exemple de réponse:
{
"global": {
"total_calls": 325,
"total_errors": 12,
"error_rate": 3.69,
"routes_count": 8
},
"routes": {
"api_users_get": {
"total_calls": 120,
"avg_duration": 0.056,
"min_duration": 0.012,
"max_duration": 0.234,
"status_codes": {
"200": 118,
"404": 2
},
"errors": 2,
"error_rate": 1.67
},
// ... autres routes
}
}
Vous pouvez également accéder aux métriques réparties dans le temps via l'endpoint /metrics/time:
# Métriques journalières (par défaut)
curl http://votre-api.com/metrics/time
# Métriques period= {minute, hour, day, month, year}
curl http://votre-api.com/metrics/time?period=hour
# Métriques pour une route spécifique
curl http://votre-api.com/metrics/time?route=api_users_get
Exemple de réponse pour les métriques temporelles:
{
"period": "day",
"metrics": {
"2023-11-15": {
"api_users_get": {
"total_calls": 45,
"errors": 2,
"avg_duration": 0.067,
"error_rate": 4.44
},
"api_products_list": {
"total_calls": 38,
"errors": 0,
"avg_duration": 0.123,
"error_rate": 0
}
},
"2023-11-16": {
// ... métriques pour ce jour
}
}
}
Exemple de réponse pour les métriques mensuelles:
{
"period": "month",
"metrics": {
"2023-11": {
"api_users_get": {
"total_calls": 1245,
"errors": 23,
"avg_duration": 0.062,
"error_rate": 1.85
},
// ... autres routes
},
"2023-12": {
// ... métriques pour ce mois
}
}
}
curl -X POST http://votre-api.com/metrics/reset
Pour protéger l'accès à vos métriques, activez l'authentification:
api_insight:
auth:
enabled: true
type: token
token: "votre-token-secret"
Puis accédez aux métriques avec l'en-tête d'authentification:
curl http://votre-api.com/metrics -H "X-API-Insight-Token: votre-token-secret"
| Fonction | Version gratuite | Version Pro |
|---|---|---|
| Compteur de requêtes API (par route) | ✅ | ✅ |
| Suivi des erreurs HTTP (4xx/5xx) | ✅ | ✅ |
| Latence moyenne par endpoint | ✅ | ✅ |
| Route /metrics en JSON | ✅ | ✅ |
| Métriques temporelles (minute/heure/jour/mois/année) | ✅ | ✅ |
| Export Prometheus | ❌ | ✅ |
| Export vers Grafana/Influx/Elastic | ❌ | ✅ |
| Authentification JWT ou Token | ❌ | ✅ |
| Dashboard web intégré | ❌ | ✅ |
| Limitation de débit & alertes | ❌ | ✅ |
MIT
Pour toute question ou assistance, ouvrez une issue.
How can I help you explore Laravel packages today?