Metriques
curl http://serveur:8081/metrics # texte Prometheus, sans credential
# prometheus.yml
scrape_configs:
- job_name: craftfilegate
static_configs:
- targets: ['serveur:8081'] # probes_listen, sinon control_listen, sinon admin.listen
| Sortie | Forme | Acces |
|---|---|---|
GET /metrics | texte Prometheus 0.0.4 | public ; sur [server] probes_listen ou control_listen seulement s’ils sont poses |
GET /admin/resources | le meme instantane en JSON, plus sessions, bans actifs, backends, seuils | permission overview |
| export OTLP | les memes nombres, un instantane par intervalle | [telemetry] metrics = true, voir Telemetrie |
- Valeurs cumulees depuis le demarrage, par pod ; un debit se calcule entre
deux lectures (
rate()). - Une valeur inconnue est absente (
nullen JSON, aucun point en OTLP), jamais0: la colonne « Absente quand » dit quand. - Le nom OTLP est le nom Prometheus sans
_total.
Catalogue
| Serie Prometheus | Instrument OTLP | Type | Labels | Absente quand | Sens |
|---|---|---|---|---|---|
craftfilegate_connections_total | craftfilegate_connections | counter | sessions SSH ouvertes apres une authentification reussie | ||
craftfilegate_connections_rejected_total | craftfilegate_connections_rejected | counter | refus de la porte SFTP, un par tentative (lignes connection_rejected de source=sftp, resumes compris) | ||
craftfilegate_sftp_operations_total | craftfilegate_sftp_operations | counter | op (21 valeurs) | paquets SFTP recus, refus compris | |
craftfilegate_sftp_bytes_read_total | craftfilegate_sftp_bytes_read | counter | octets servis par SFTP | ||
craftfilegate_sftp_bytes_written_total | craftfilegate_sftp_bytes_written | counter | octets acceptes par SFTP | ||
craftfilegate_api_requests_total | craftfilegate_api_requests | counter | requetes recues par l’API de fichiers, 429 et refus compris | ||
craftfilegate_banned_ips_total | craftfilegate_banned_ips | counter | verdicts de ban de ce pod, toutes portes | ||
craftfilegate_sftp_accept_errors_total | craftfilegate_sftp_accept_errors | counter | accept() en echec sur le port SFTP | ||
craftfilegate_log_write_errors_total | craftfilegate_log_write_errors | counter | lignes de journal ou d’audit non ecrites | ||
craftfilegate_audit_refusals_suppressed_total | craftfilegate_audit_refusals_suppressed | counter | source (sftp, api, admin) | refus anonymes resumes au lieu d’etre ecrits | |
craftfilegate_audit_refusal_summary_overflow_total | craftfilegate_audit_refusal_summary_overflow | counter | refus arrives table des resumes pleine | ||
craftfilegate_otel_spans_ended_total | craftfilegate_otel_spans_ended | counter | telemetrie coupee | spans termines | |
craftfilegate_otel_spans_exported_total | craftfilegate_otel_spans_exported | counter | telemetrie coupee | spans acceptes par le collecteur | |
craftfilegate_otel_spans_export_failed_total | craftfilegate_otel_spans_export_failed | counter | telemetrie coupee | spans perdus | |
craftfilegate_admin_tls_cert_not_after_seconds | craftfilegate_admin_tls_cert_not_after_seconds | gauge | sans TLS, date illisible | expiration du certificat servi, secondes Unix | |
craftfilegate_admin_tls_cert_expiry_unreadable | craftfilegate_admin_tls_cert_expiry_unreadable | gauge | sans TLS | 1 date illisible, 0 lue | |
craftfilegate_sftp_rate_limit_tracked_addresses | craftfilegate_sftp_rate_limit_tracked_addresses | gauge | sans [sftp.rate_limit], ou avant son premier balayage | adresses suivies par le limiteur | |
craftfilegate_api_rate_limit_tracked_addresses | craftfilegate_api_rate_limit_tracked_addresses | gauge | sans [api.rate_limit], ou avant son premier balayage | idem pour l’API | |
craftfilegate_local_users | craftfilegate_local_users | gauge | hash_format | sans magasin local | comptes locaux par format de hash |
craftfilegate_reload_watch_mode | craftfilegate_reload_watch_mode | gauge | mode (inotify, poll, sighup) | avant l’armement | 1 pour le mode en vigueur |
craftfilegate_jwks_cache_age_seconds | craftfilegate_jwks_cache_age_seconds | gauge | sans JWKS, aucun chargement reussi | age du cache JWKS | |
craftfilegate_jwks_refresh_failures_total | craftfilegate_jwks_refresh_failures | counter | sans JWKS | rafraichissements en echec | |
craftfilegate_jwks_cached_keys | craftfilegate_jwks_cached_keys | gauge | sans JWKS | cles en cache | |
craftfilegate_grants_active | craftfilegate_grants_active | gauge | sans [admin] | acces temporaires qui donnent leur role maintenant | |
craftfilegate_grant_sessions_cut_total | craftfilegate_grant_sessions_cut | counter | reason (expired, revoked) | sans [admin] | sessions SFTP et transferts REST coupes a la fin d’un acces temporaire qu’ils utilisaient |
craftfilegate_grants_store_local_only | craftfilegate_grants_store_local_only | gauge | sans [admin] | 1 : acces temporaires en memoire alors qu’un pair du cluster repond | |
craftfilegate_cluster_peers | craftfilegate_cluster_peers | gauge | status | sans [cluster] | pairs du canal entre instances par statut : reachable, unreachable, certificate_mismatch |
craftfilegate_cluster_relay_total | craftfilegate_cluster_relay | counter | route (health, sessions, bans, kick, unban), result (answered, refused, failed) | sans [cluster] | requetes d’operateur relayees a un pair |
craftfilegate_cluster_cert_not_after_seconds | craftfilegate_cluster_cert_not_after_seconds | gauge | sans [cluster], date illisible | expiration du certificat partage, secondes Unix ; jamais verifiee | |
craftfilegate_cluster_reachable_peers | craftfilegate_cluster_reachable_peers | gauge | sans [cluster] | pairs joignables au dernier tour | |
craftfilegate_cluster_isolated | craftfilegate_cluster_isolated | gauge | sans [cluster] | 1 : moins de min_peers pairs joignables depuis isolated_after_secs (detecteurs) | |
craftfilegate_unready_detector | craftfilegate_unready_detector | gauge | detector (storage_alone, isolated, isolated_and_storage_down) | sans [cluster] | 1 tant que le detecteur est actif |
craftfilegate_withdrawn | craftfilegate_withdrawn | gauge | sans [cluster] | 1 : /readyz non pret a cause d’un detecteur de unready_when | |
craftfilegate_stale_partials_clock_skew_seconds | craftfilegate_stale_partials_clock_skew_seconds | gauge | backend | rien mesure | horloge du stockage moins celle du serveur |
craftfilegate_password_hash_pool_places | craftfilegate_password_hash_pool_places | gauge | sans magasin local | fils plus places de file du pool de hachage | |
craftfilegate_password_hash_pool_in_use | craftfilegate_password_hash_pool_in_use | gauge | sans magasin local | places prises | |
craftfilegate_password_hash_pool_full_total | craftfilegate_password_hash_pool_full | counter | sans magasin local | verifications refusees pool plein | |
craftfilegate_jwt_refused_total | craftfilegate_jwt_refused | counter | sans JWT | jetons refuses par le verificateur | |
craftfilegate_backend_operations_total | craftfilegate_backend_operations | counter | backend | backend inutilise | appels au stockage |
craftfilegate_backend_errors_total | craftfilegate_backend_errors | counter | backend | backend inutilise | pannes du stockage (entree-sortie, injoignable, identifiants refuses) ; pas les refus du client |
craftfilegate_backend_bytes_read_total | craftfilegate_backend_bytes_read | counter | backend | backend inutilise | octets lus du stockage |
craftfilegate_backend_bytes_written_total | craftfilegate_backend_bytes_written | counter | backend | backend inutilise | octets ecrits vers le stockage |
craftfilegate_backend_up | craftfilegate_backend_up | gauge | backend | avant la premiere visite, sonde coupee | 1 le stockage repond a la sonde, 0 il ne repond plus |
craftfilegate_backend_probe_seconds | craftfilegate_backend_probe_seconds | gauge | backend | idem | duree de la derniere visite |
craftfilegate_local_symlink_refusals_total | craftfilegate_local_symlink_refusals | counter | backend | backend non local ou inutilise | chemins refuses symlink escape |
process_resident_memory_bytes | process_resident_memory_bytes | gauge | hors Linux, /proc muet | memoire residente | |
process_peak_resident_memory_bytes | process_peak_resident_memory_bytes | gauge | idem | pic de memoire residente | |
process_cpu_seconds_total | process_cpu_seconds | counter | idem | temps CPU user + system | |
process_threads | process_threads | gauge | idem | threads |
craftfilegate_connections_rejected_total compte par tentative, plusieurs
par connexion : son rapport a craftfilegate_connections_total n’est pas un
taux d’echec par connexion.
Seuils de la console
[admin.metrics_thresholds] decide seulement ou l’onglet Metrics marque une
tuile ; le serveur n’alerte pas. Les cles et leurs defauts :
reference.
Alertes
groups:
- name: craftfilegate
rules:
- alert: CraftFileGateAdminCertExpiringSoon
expr: craftfilegate_admin_tls_cert_not_after_seconds - time() < 30 * 86400
for: 1h
- alert: CraftFileGateAdminCertExpiryUnknown
expr: craftfilegate_admin_tls_cert_expiry_unreadable == 1
- alert: CraftFileGateBackendErrors
expr: increase(craftfilegate_backend_errors_total[5m]) > 0
- alert: CraftFileGateBackendDown
expr: craftfilegate_backend_up == 0
- alert: CraftFileGateStorageAlone
expr: craftfilegate_unready_detector{detector="storage_alone"} == 1
- alert: CraftFileGateIsolated
expr: craftfilegate_cluster_isolated == 1
Alerter sur la peremption du cache JWKS
- alert: CraftFileGateJwksStale
expr: craftfilegate_jwks_cache_age_seconds > 2 * 3600 # 2 x jwks_refresh_interval_secs
for: 5m
- alert: CraftFileGateJwksNeverLoaded
expr: absent(craftfilegate_jwks_cache_age_seconds) and on() craftfilegate_jwks_cached_keys >= 0
for: 5m
Un cache perime garde ses cles : les jetons signes par une cle tournee depuis
sont refuses. jwks_age_secs fait le meme jugement pour /admin/status.