Un exporteur Prometheus écrit en Python pour récupérer les statistiques depuis l'API de CTFd.
-
Créez un fichier
.enven vous basant sur le.env.exampledu repo. -
Éditez le fichier
.env:CTFD_URL: L'URL racine de votre instance CTFd.CTFD_TOKEN: Un token d'accès administrateur de CTFd.POLL_INTERVAL: Temps d'attente (en secondes) entre deux requêtes successives de scrapping vers l'API. (Par défaut : 30).
-
Créez un fichier
docker-compose.ymlen vous basant sur ledocker-compose.ymldu repo. -
Déployez l'application via Docker Compose avec la commande suivante :
docker-compose up -d
L'exporteur sera accessible à l'adresse suivante :
http://localhost:8000/metrics. -
Le fichier
dashboard.jsonprésent dans le repo peut être importé dans Grafana pour créer le tableau de bord correspondant.
Ajoutez la cible dans votre configuration prometheus.yml :
scrape_configs:
- job_name: 'ctfd_exporter'
scrape_interval: 10s
static_configs:
- targets: ['votre-serveur:8000']Informations générales :
ctfd_challenges_total: Nombre total de challengesctfd_challenges_points_total: Total des points disponiblesctfd_teams_total: Nombre de d'équipes enregistréesctfd_team_info: Métrique contenant les informations de l'équipe dans ses labels (team_id,team_name,email,website,affiliation,country,members)ctfd_users_total: Nombre d'utilisateurs enregistrésctfd_user_info: Métrique contenant les informations de l'utilisateur dans ses labels (user_id,user_name,email,website,affiliation,country,team_id)ctfd_unique_ips: Nombre d'IPs uniques ayant interagi
Scoreboard :
ctfd_user_score: Score par utilisateur (avec labels:user_name,team_name)ctfd_team_score: Score par équipe (avec labels:team_name)
Soumissions :
ctfd_challenge_solves: Nombre de validations par challenge (labels:category,id,challenge_name,value)ctfd_submission_fails: Échecs (incorrect) par tâche (labels:category,id,challenge_name)ctfd_submission_solves: Validations (correct) par tâche (labels:category,id,challenge_name)ctfd_submissions_fails_total: Total global incorrectctfd_submissions_solves_total: Total global correctctfd_submissions_total: Total des soumissions globalesctfd_submissions_detailed: Combine tout ! Comptabilise les essais avec les labels croisés suivants pour chaque métrique :challenge_idetchallenge_nameteam_idetteam_nameuser_idetuser_nametype(correctouincorrect)
Contenu Avancé CTFd (Points manuels et Indices) :
ctfd_hints_total: Le nombre total d'indices créés sur la plateformectfd_hint_info: Métrique contenant les IDs, challenge associés et le coût en points d'un indice (avec labels:hint_id,challenge_id,cost)ctfd_award_points: Les points additionnels donnés manuellement (Awards), par exemple pour les Writeups (avec labels:name,team_id,team_name,user_id,user_name)