Skip to main content

Instance health

Every day the server checks each instance for the things that go quietly wrong between releases: a database that renders its PDF reports through the public address and gets refused by its own firewall, a web address without a scheme, a container that exited, a web server site that no longer matches the configuration, a certificate close to expiry, an image missing a package a module needs. The result is a report per instance on its Health tab, with a card on its overview.

What is checked​

CheckWhat it looks atAuto repair
Report addressEvery database's report.url is http://127.0.0.1:8069, the Odoo server inside the instance's own container, so PDF reports render inside the instance rather than through the public address and the firewallSets it
Web addressEvery database's web.base.url is a complete address on one of the instance's namesSets it to the main name
ContainerThe container exists and runsStarts a stopped one; an instance never installed needs the install
Web server siteThe site is present, enabled and the one the configuration generatesRebuilds the site and reloads
CertificatePresent, valid, more than two weeks from expiry, the kind the SSL options ask for, covering every nameRequests one as the SSL options say
Image packagesThe image the container runs carries every package the configuration and the add-ons needRebuilds the image and recreates the container
Pending changesThe instance runs the configuration it storesQueues the action the change needs: an apply, an image build, a certificate request or a module install
ReachabilityThe uptime probe reaches the instance. Without a result yet the row reads n/a and says why: a development instance, no host name, a server update in the last few minutes, a probe that has not run since the API started, the instance's own firewall refusing the probe, or failures not yet enough to call an outageRestarts the container
Odoo buildThe image is not further behind the newest build than the server's threshold. A build that cannot be read, or no newest build to compare with, is skipped with the reason rather than called currentBuilds a fresh image and activates it
BackupsBackups are on for a production instance, and one of the instance's enabled backup providers holds a backup from the last seven days, as the Backup tab's Latest backups lists them. A backup that failed after the newest one is an error, a run of the server-wide schedule included; so is an instance backed up on a schedule with no successful backup for longer than its schedule plus a day. See Scheduled backupsRuns a backup now
Backup encryptionOn an instance that encrypts its backups: the server has an active backup key, the license carries backup encryption, and the server holds the key. Encryption switched off when the instance arrived on a server without a key is a warning until it is on againNone: a key is created or imported on Backup storage > Encryption
Stored credentialsEvery password, key and token the instance stores can be read on this server. Each one that cannot is its own warning, naming it and where to enter it again (see Credentials this server cannot read)Removes the instance's own mail password when that is the one that cannot be read; none for the others
TuningAt least two workers (one worker freezes the instance when a PDF is rendered), and the container ceiling the workload's workers, cron threads and websocket worker need fits what the host has left after a reserve for the system, PostgreSQL, the management services and the other instances; the finding gives that ceiling, what is configured and where the memory goes, in GiB as the Workload card shows themRecalculates Auto from the workload and applies, when that would change something; by hand when even the two workers of the floor do not fit
LicenseThe license covers what the instance is set up to use, and the instance is within the license's limits: its databases, and its custom modules as installed in its fullest database or as its git modules, whichever is moreNone: a license or a setting is your decision
SubscriptionOn an Enterprise instance, every database carries its Odoo subscription code and an expiry more than 30 days away. No code and no date yet are warnings; an expired subscription is an error. Community instances are skippedNone: renewing is between you and Odoo
Scheduled actionsNo active scheduled action of any database is a day or more behind its schedule. An action Odoo will never run again (one with no runs left) does not count. When no scheduled action of a database ran in the last day, Odoo's scheduler is not running them, and that is an error. When others still run, the ones behind are a warning that names up to five of them and when each was due: look at them in Odoo under Settings > Technical > Scheduled Actions. Skipped where the tuning gives the instance no cron threadFor the error, restarts the container, which starts the scheduler afresh; a warning has none, since a restart does not change a single action
Outgoing mailNo outgoing mail of the last seven days sits in Odoo's queue with an error. A warning says how many failed, when the last one did, and the mail server's answer to it, with any e-mail address in it masked. Skipped where the mail module is not installedNone: the cause is on the mail server or in Odoo's settings
ModulesEvery module a database says is installed has its code in the image (the usual fault after a restore from elsewhere), and none is left between "to install" or "to upgrade" and doneRuns the pending install or upgrade again and restarts the instance; a missing module or one marked for removal is yours
GeoIPOn an instance with GeoIP on: the city database is in the instance's GeoIP directory, no older than 45 days, and a lookup with Odoo's own reader answers inside the containerCopies the databases from the GeoIP service again and restarts the instance
Custom modulesEvery add-on module from a git remote that is installed in at least one database is at the head of its branch, as the server's git polling last listed it. A module installed in no database is left out, and the finding says how many were; a whole repository added without a module path is always judged. When the databases cannot be read, every module is judged and the finding says so. Skipped until the remote was listedQueues the git update, only on an instance with automatic git updates on; elsewhere the Modules tab is the place
Odoo API accessThe Odoo API rule on the Firewall tab is closed or limited to at most five addresses. Open to everyone, a whole country or a continent is a warning, as is a longer address listNone: closing a rule can cut an integration, so it stays your decision
Database manager accessThe Database manager rule on the Firewall tab is closed or limited to at most five addresses. Open to everyone, a country or a continent is an errorNone: your decision on the Firewall tab
Payment provider addressesEvery payment provider a Payments rule admits by name had its list of webhook addresses read in the last day. A list that cannot be read is a warning: the addresses read before stay in force until the provider moves its webhooks. n/a when no Payments rule names a providerNone: the list comes back by itself once the server reaches the provider
Ban notificationsWith intrusion prevention on, someone is told when an address is banned: the recipients on the Threat protection page or, when those are empty, the server's own notification recipients (Append To on the E-mail tab of Configuration). With neither set the check warns; otherwise it says which list is used. Skipped when intrusion prevention is offNone: who is told is your decision

Every finding says what was observed, what was expected and why it matters, in words meant for the person running the instance. Open a row on the Health tab to read the advice in full. The result of a health check job and its alert name each finding that wants attention with what it observed, and a support bundle carries every instance's latest report.

Credentials this server cannot read​

Credentials are encrypted with keys that stay with the server that wrote them. An instance brought from another server, or a master database restored onto new hardware without its key ring, carries credentials this server cannot read. Where to enter each one again:

CredentialWhere to enter it again
A backup target's or restore source's password or keyThe Backup or Restore tab
A git credentialThe Modules tab
The DNS provider's tokenThe Certificate tab
The pre-authentication keySave the Firewall tab's Pre-authentication settings again; visitors then sign in again
The instance's database passwordNothing to enter: the server generated it, and it reads again only on the server that wrote it
The instance's own mail passwordNothing to enter: it has no field in the console and nothing on the server uses it, so the auto repair removes it and the instance sends mail as before

Running and repairing​

The daily job is Instance health check on the Maintenance page, at 05:30 UTC by default; it reports and changes nothing. Check now on the Health tab runs the checks for one instance and replaces its report.

Auto repair puts right every finding marked auto and runs the checks again, so the report shows what the repair achieved. A finding marked by hand needs a decision only you can take, and its advice says which. A single finding can be repaired on its own from the row's detail.

Remote or localagainst pelmo
$ ohm instance health --instance fanes
Remote or localagainst pelmo
$ ohm instance health --instance fanes --check
Remote or localagainst pelmo
$ ohm instance health --instance fanes --repair

The command exits non-zero when the report carries an error, so it serves as a probe from a script.

A repair is a job

Each repair is queued and followed like every other change, and several of them queue further jobs: an image build, a certificate request, an apply. The Jobs tab shows them; the report is re-read when the repair job ends.

Alerts​

Two alerting event types carry the report:

  • Instance health degraded is raised when an instance's headline changes - from fine to something wanting attention, or from a warning to an error - and resolved when every check passes again. The recommended rule Instance health delivers it at warning, once a day while it lasts.
  • Instance health report is the whole report, every run, at the informational severity. Nothing is sent until a rule asks for it; add one on that type and the daily report reaches whichever channel the rule names.