Skip to main content

Metrics, alerts and logs

Use metrics and alerts to monitor repository access, mover availability and completed sweeps. Use logs to investigate failures. Coverage reports whether plans are running and backups meet their schedules. These figures are available in the console and through Prometheus.

Metrics​

Each component serves Prometheus metrics on an admin port: the manager on 9775, the mover on 9782, the compute agent on 9780. The admin ports listen on loopback unless the deployment opens them, and are never published through the load balancer. The manager's metrics are also served by the API at /metrics, to a caller with a system-scoped token in X-Auth-Token. They name every project's plans and sizes, so restrict access to operators and monitoring services.

DeploymentHow Prometheus reaches them
kolla-ansibleTwo settings open the admin ports to kolla's own Prometheus and add the scrape jobs and alert rules below to it. See Send the metrics to Prometheus.
HelmThree values open the admin ports inside the cluster and add monitors and the alert rules for the Prometheus Operator. See Send the metrics to Prometheus.
JujuOne option opens the admin ports, and a metrics-endpoint relation hands them and the alert rules to COS. See Send the metrics to Prometheus.

Without these, the manager's metrics are still reachable through the API with a system-scoped token, which the scraper has to renew as it expires.

Alerts​

Every deployment method ships the same rules, in ferry.rules.

AlertSeverityFires when
FerryNoMoverAlivecriticalNo mover has checked in for 10 minutes. Nothing is being backed up.
FerryRepositoryDowncriticalA repository has failed its health probe for 10 minutes.
FerryGuestStuckFrozencriticalA guest has stayed frozen past its deadline for a minute.
FerryThawFailedcriticalThawing a guest failed in the last 15 minutes.
FerryTargetDownwarningA component has not answered on its admin port for 10 minutes.
FerryDispatchPausedwarningBackups have been paused for 30 minutes. The alert names the cause.
FerryMissedTickswarningA scheduled backup could not start before its deadline in the last hour.
FerryPlanOverduewarningA plan's resources have been past their cadence for 30 minutes.
FerryPlanUnsatisfiedwarningA project has had plans whose policy cannot be met for an hour.
FerryJobDeadLetteredwarningJobs gave up in the last day. The alert names the error code.
FerryMoverCannotReachRepositorywarningMovers handed back more than two jobs in an hour because a repository was unreachable.
FerryLoopErrorswarningOne of the manager's loops failed more than five times in 15 minutes.
FerryGCDegradedwarningA repository's sweep has reclaimed nothing for 6 hours, because it cannot list every live backup.
FerryGCStalewarningA repository has not completed a sweep in three days.
FerryBucketRemovalGivenUpwarningA failed bucket restore still holds the bucket it created, because the job that removes it gave up. Remove the bucket manually, or run the job again.

Series for dashboards​

MetricShows
ferry_coverage_*The coverage figures, refreshed every five minutes: plans_paused, plans_on_deprecated_policy, plans_unsatisfied, plans_without_policy, points_awaiting_copy, points_not_immutably_protected and policies_below_minimum. Each is per project, except policies_below_minimum, which covers the whole cloud.
ferry_manager_plan_rpo_secondsPer plan, the largest age among its resources' newest backups.
ferry_manager_plan_resources_overduePer plan, the resources whose newest backup is older than the policy's cadence allows.
ferry_quota_in_use_bytes, ferry_quota_limit_bytes, ferry_quota_locked_bytesPer project, what it stores against its limit, and how much of it the storage's lock holds.
ferry_manager_verified_coverage_pctPer repository, the share read back and checked inside the verification window.
ferry_compute_freeze_duration_secondsHow long guests stay frozen, from freeze to thaw.
ferry_manager_point_objects_owedBackups whose record is not complete yet.

Logs​

Every component writes one JSON object per line, with the component, its version and, for a job, its id. On kolla-ansible they are in /var/log/kolla/ferry/ferry-<component>.log, rotated at 50 MiB with six files kept. Once fluentd is configured, they are shipped to OpenSearch (see Install with kolla-ansible). Every component also logs to standard error.

Use these log messages to identify why backup dispatch paused or resumed:

MessageMeaning
pausing dispatch: the cluster is not healthy enough to be readNo backup runs anywhere until Ceph recovers. See Production load.
pausing dispatch: no chunk repository at this site can be reachedNo repository at the site answers.
resuming dispatch: …The condition cleared. The message says which.

Health endpoints​

EndpointAnswers
GET /healthzLiveness: the status and the release, as {"status": "ok", "version": "…"}. No token needed.
GET /readyzReadiness: the version, the site, the cloud name, the uptime and whether the database answers. 503 when it does not. No token needed.

The manager answers both on the API and on its admin port. A mover answers /healthz on its admin port. The kolla-ansible upgrade waits on /healthz for each manager before moving to the next.