Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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
SortieFormeAcces
GET /metricstexte Prometheus 0.0.4public ; sur [server] probes_listen ou control_listen seulement s’ils sont poses
GET /admin/resourcesle meme instantane en JSON, plus sessions, bans actifs, backends, seuilspermission overview
export OTLPles 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 (null en JSON, aucun point en OTLP), jamais 0 : la colonne « Absente quand » dit quand.
  • Le nom OTLP est le nom Prometheus sans _total.

Catalogue

Serie PrometheusInstrument OTLPTypeLabelsAbsente quandSens
craftfilegate_connections_totalcraftfilegate_connectionscountersessions SSH ouvertes apres une authentification reussie
craftfilegate_connections_rejected_totalcraftfilegate_connections_rejectedcounterrefus de la porte SFTP, un par tentative (lignes connection_rejected de source=sftp, resumes compris)
craftfilegate_sftp_operations_totalcraftfilegate_sftp_operationscounterop (21 valeurs)paquets SFTP recus, refus compris
craftfilegate_sftp_bytes_read_totalcraftfilegate_sftp_bytes_readcounteroctets servis par SFTP
craftfilegate_sftp_bytes_written_totalcraftfilegate_sftp_bytes_writtencounteroctets acceptes par SFTP
craftfilegate_api_requests_totalcraftfilegate_api_requestscounterrequetes recues par l’API de fichiers, 429 et refus compris
craftfilegate_banned_ips_totalcraftfilegate_banned_ipscounterverdicts de ban de ce pod, toutes portes
craftfilegate_sftp_accept_errors_totalcraftfilegate_sftp_accept_errorscounteraccept() en echec sur le port SFTP
craftfilegate_log_write_errors_totalcraftfilegate_log_write_errorscounterlignes de journal ou d’audit non ecrites
craftfilegate_audit_refusals_suppressed_totalcraftfilegate_audit_refusals_suppressedcountersource (sftp, api, admin)refus anonymes resumes au lieu d’etre ecrits
craftfilegate_audit_refusal_summary_overflow_totalcraftfilegate_audit_refusal_summary_overflowcounterrefus arrives table des resumes pleine
craftfilegate_otel_spans_ended_totalcraftfilegate_otel_spans_endedcountertelemetrie coupeespans termines
craftfilegate_otel_spans_exported_totalcraftfilegate_otel_spans_exportedcountertelemetrie coupeespans acceptes par le collecteur
craftfilegate_otel_spans_export_failed_totalcraftfilegate_otel_spans_export_failedcountertelemetrie coupeespans perdus
craftfilegate_admin_tls_cert_not_after_secondscraftfilegate_admin_tls_cert_not_after_secondsgaugesans TLS, date illisibleexpiration du certificat servi, secondes Unix
craftfilegate_admin_tls_cert_expiry_unreadablecraftfilegate_admin_tls_cert_expiry_unreadablegaugesans TLS1 date illisible, 0 lue
craftfilegate_sftp_rate_limit_tracked_addressescraftfilegate_sftp_rate_limit_tracked_addressesgaugesans [sftp.rate_limit], ou avant son premier balayageadresses suivies par le limiteur
craftfilegate_api_rate_limit_tracked_addressescraftfilegate_api_rate_limit_tracked_addressesgaugesans [api.rate_limit], ou avant son premier balayageidem pour l’API
craftfilegate_local_userscraftfilegate_local_usersgaugehash_formatsans magasin localcomptes locaux par format de hash
craftfilegate_reload_watch_modecraftfilegate_reload_watch_modegaugemode (inotify, poll, sighup)avant l’armement1 pour le mode en vigueur
craftfilegate_jwks_cache_age_secondscraftfilegate_jwks_cache_age_secondsgaugesans JWKS, aucun chargement reussiage du cache JWKS
craftfilegate_jwks_refresh_failures_totalcraftfilegate_jwks_refresh_failurescountersans JWKSrafraichissements en echec
craftfilegate_jwks_cached_keyscraftfilegate_jwks_cached_keysgaugesans JWKScles en cache
craftfilegate_grants_activecraftfilegate_grants_activegaugesans [admin]acces temporaires qui donnent leur role maintenant
craftfilegate_grant_sessions_cut_totalcraftfilegate_grant_sessions_cutcounterreason (expired, revoked)sans [admin]sessions SFTP et transferts REST coupes a la fin d’un acces temporaire qu’ils utilisaient
craftfilegate_grants_store_local_onlycraftfilegate_grants_store_local_onlygaugesans [admin]1 : acces temporaires en memoire alors qu’un pair du cluster repond
craftfilegate_cluster_peerscraftfilegate_cluster_peersgaugestatussans [cluster]pairs du canal entre instances par statut : reachable, unreachable, certificate_mismatch
craftfilegate_cluster_relay_totalcraftfilegate_cluster_relaycounterroute (health, sessions, bans, kick, unban), result (answered, refused, failed)sans [cluster]requetes d’operateur relayees a un pair
craftfilegate_cluster_cert_not_after_secondscraftfilegate_cluster_cert_not_after_secondsgaugesans [cluster], date illisibleexpiration du certificat partage, secondes Unix ; jamais verifiee
craftfilegate_cluster_reachable_peerscraftfilegate_cluster_reachable_peersgaugesans [cluster]pairs joignables au dernier tour
craftfilegate_cluster_isolatedcraftfilegate_cluster_isolatedgaugesans [cluster]1 : moins de min_peers pairs joignables depuis isolated_after_secs (detecteurs)
craftfilegate_unready_detectorcraftfilegate_unready_detectorgaugedetector (storage_alone, isolated, isolated_and_storage_down)sans [cluster]1 tant que le detecteur est actif
craftfilegate_withdrawncraftfilegate_withdrawngaugesans [cluster]1 : /readyz non pret a cause d’un detecteur de unready_when
craftfilegate_stale_partials_clock_skew_secondscraftfilegate_stale_partials_clock_skew_secondsgaugebackendrien mesurehorloge du stockage moins celle du serveur
craftfilegate_password_hash_pool_placescraftfilegate_password_hash_pool_placesgaugesans magasin localfils plus places de file du pool de hachage
craftfilegate_password_hash_pool_in_usecraftfilegate_password_hash_pool_in_usegaugesans magasin localplaces prises
craftfilegate_password_hash_pool_full_totalcraftfilegate_password_hash_pool_fullcountersans magasin localverifications refusees pool plein
craftfilegate_jwt_refused_totalcraftfilegate_jwt_refusedcountersans JWTjetons refuses par le verificateur
craftfilegate_backend_operations_totalcraftfilegate_backend_operationscounterbackendbackend inutiliseappels au stockage
craftfilegate_backend_errors_totalcraftfilegate_backend_errorscounterbackendbackend inutilisepannes du stockage (entree-sortie, injoignable, identifiants refuses) ; pas les refus du client
craftfilegate_backend_bytes_read_totalcraftfilegate_backend_bytes_readcounterbackendbackend inutiliseoctets lus du stockage
craftfilegate_backend_bytes_written_totalcraftfilegate_backend_bytes_writtencounterbackendbackend inutiliseoctets ecrits vers le stockage
craftfilegate_backend_upcraftfilegate_backend_upgaugebackendavant la premiere visite, sonde coupee1 le stockage repond a la sonde, 0 il ne repond plus
craftfilegate_backend_probe_secondscraftfilegate_backend_probe_secondsgaugebackendidemduree de la derniere visite
craftfilegate_local_symlink_refusals_totalcraftfilegate_local_symlink_refusalscounterbackendbackend non local ou inutilisechemins refuses symlink escape
process_resident_memory_bytesprocess_resident_memory_bytesgaugehors Linux, /proc muetmemoire residente
process_peak_resident_memory_bytesprocess_peak_resident_memory_bytesgaugeidempic de memoire residente
process_cpu_seconds_totalprocess_cpu_secondscounteridemtemps CPU user + system
process_threadsprocess_threadsgaugeidemthreads

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.