forked from TrueCloudLab/distribution
Add storagedriver section to health check configuration
Add default storagedriver health check to example configuration files with parameters matching the previous hardcoded configuration. Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
parent
b09b0ffcf9
commit
216df32510
6 changed files with 117 additions and 7 deletions
|
@ -48,3 +48,8 @@ proxy:
|
||||||
remoteurl: https://registry-1.docker.io
|
remoteurl: https://registry-1.docker.io
|
||||||
username: username
|
username: username
|
||||||
password: password
|
password: password
|
||||||
|
health:
|
||||||
|
storagedriver:
|
||||||
|
enabled: true
|
||||||
|
interval: 10s
|
||||||
|
threshold: 3
|
||||||
|
|
|
@ -59,4 +59,8 @@ notifications:
|
||||||
threshold: 10
|
threshold: 10
|
||||||
backoff: 1s
|
backoff: 1s
|
||||||
disabled: true
|
disabled: true
|
||||||
|
health:
|
||||||
|
storagedriver:
|
||||||
|
enabled: true
|
||||||
|
interval: 10s
|
||||||
|
threshold: 3
|
||||||
|
|
|
@ -11,3 +11,8 @@ http:
|
||||||
addr: :5000
|
addr: :5000
|
||||||
headers:
|
headers:
|
||||||
X-Content-Type-Options: [nosniff]
|
X-Content-Type-Options: [nosniff]
|
||||||
|
health:
|
||||||
|
storagedriver:
|
||||||
|
enabled: true
|
||||||
|
interval: 10s
|
||||||
|
threshold: 3
|
||||||
|
|
|
@ -210,6 +210,17 @@ type Health struct {
|
||||||
FileCheckers []FileChecker `yaml:"file,omitempty"`
|
FileCheckers []FileChecker `yaml:"file,omitempty"`
|
||||||
// HTTPChecker is a list of URIs to check
|
// HTTPChecker is a list of URIs to check
|
||||||
HTTPCheckers []HTTPChecker `yaml:"http,omitempty"`
|
HTTPCheckers []HTTPChecker `yaml:"http,omitempty"`
|
||||||
|
// StorageDriver configures a health check on the configured storage
|
||||||
|
// driver
|
||||||
|
StorageDriver struct {
|
||||||
|
// Enabled turns on the health check for the storage driver
|
||||||
|
Enabled bool `yaml:"enabled,omitempty"`
|
||||||
|
// Interval is the number of seconds in between checks
|
||||||
|
Interval time.Duration `yaml:"interval,omitempty"`
|
||||||
|
// Threshold is the number of times a check must fail to trigger an
|
||||||
|
// unhealthy state
|
||||||
|
Threshold int `yaml:"threshold,omitempty"`
|
||||||
|
} `yaml:"storagedriver,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// v0_1Configuration is a Version 0.1 Configuration struct
|
// v0_1Configuration is a Version 0.1 Configuration struct
|
||||||
|
|
|
@ -196,6 +196,10 @@ information about each option that appears later in this page.
|
||||||
maxactive: 64
|
maxactive: 64
|
||||||
idletimeout: 300s
|
idletimeout: 300s
|
||||||
health:
|
health:
|
||||||
|
storagedriver:
|
||||||
|
enabled: true
|
||||||
|
interval: 10s
|
||||||
|
threshold: 3
|
||||||
file:
|
file:
|
||||||
- file: /path/to/checked/file
|
- file: /path/to/checked/file
|
||||||
interval: 10s
|
interval: 10s
|
||||||
|
@ -1600,6 +1604,10 @@ Configure the behavior of the Redis connection pool.
|
||||||
## health
|
## health
|
||||||
|
|
||||||
health:
|
health:
|
||||||
|
storagedriver:
|
||||||
|
enabled: true
|
||||||
|
interval: 10s
|
||||||
|
threshold: 3
|
||||||
file:
|
file:
|
||||||
- file: /path/to/checked/file
|
- file: /path/to/checked/file
|
||||||
interval: 10s
|
interval: 10s
|
||||||
|
@ -1609,8 +1617,72 @@ Configure the behavior of the Redis connection pool.
|
||||||
interval: 10s
|
interval: 10s
|
||||||
threshold: 3
|
threshold: 3
|
||||||
|
|
||||||
The health option is **optional**. It may contain lists of file checkers
|
The health option is **optional**. It may contain preferences for a periodic
|
||||||
and/or HTTP checkers.
|
health check on the storage driver's backend storage, and optional periodic
|
||||||
|
checks on local files and/or HTTP URIs. The results of the health checks are
|
||||||
|
available at /debug/health on the debug HTTP server if the debug HTTP server is
|
||||||
|
enabled (see http section).
|
||||||
|
|
||||||
|
### storagedriver
|
||||||
|
|
||||||
|
storagedriver contains options for a health check on the configured storage
|
||||||
|
driver's backend storage. enabled must be set to true for this health check to
|
||||||
|
be active.
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Parameter</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>enabled</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
yes
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
"true" to enable the storage driver health check or "false" to disable it.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>interval</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
no
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
The length of time to wait between repetitions of the check. This field
|
||||||
|
takes a positive integer and an optional suffix indicating the unit of
|
||||||
|
time. Possible units are:
|
||||||
|
<ul>
|
||||||
|
<li><code>ns</code> (nanoseconds)</li>
|
||||||
|
<li><code>us</code> (microseconds)</li>
|
||||||
|
<li><code>ms</code> (milliseconds)</li>
|
||||||
|
<li><code>s</code> (seconds)</li>
|
||||||
|
<li><code>m</code> (minutes)</li>
|
||||||
|
<li><code>h</code> (hours)</li>
|
||||||
|
</ul>
|
||||||
|
If you omit the suffix, the system interprets the value as nanoseconds.
|
||||||
|
The default value is 10 seconds if this field is omitted.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>threshold</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
no
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
An integer specifying the number of times the check must fail before the
|
||||||
|
check triggers an unhealthy state. If this filed is not specified, a
|
||||||
|
single failure will trigger an unhealthy state.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
### file
|
### file
|
||||||
|
|
||||||
|
|
|
@ -235,10 +235,23 @@ func NewApp(ctx context.Context, configuration configuration.Configuration) *App
|
||||||
// implementing this properly will require a refactor. This method may panic
|
// implementing this properly will require a refactor. This method may panic
|
||||||
// if called twice in the same process.
|
// if called twice in the same process.
|
||||||
func (app *App) RegisterHealthChecks() {
|
func (app *App) RegisterHealthChecks() {
|
||||||
health.RegisterPeriodicThresholdFunc("storagedriver_"+app.Config.Storage.Type(), defaultCheckInterval, 3, func() error {
|
if app.Config.Health.StorageDriver.Enabled {
|
||||||
_, err := app.driver.List(app, "/") // "/" should always exist
|
interval := app.Config.Health.StorageDriver.Interval
|
||||||
return err // any error will be treated as failure
|
if interval == 0 {
|
||||||
})
|
interval = defaultCheckInterval
|
||||||
|
}
|
||||||
|
|
||||||
|
storageDriverCheck := func() error {
|
||||||
|
_, err := app.driver.List(app, "/") // "/" should always exist
|
||||||
|
return err // any error will be treated as failure
|
||||||
|
}
|
||||||
|
|
||||||
|
if app.Config.Health.StorageDriver.Threshold != 0 {
|
||||||
|
health.RegisterPeriodicThresholdFunc("storagedriver_"+app.Config.Storage.Type(), interval, app.Config.Health.StorageDriver.Threshold, storageDriverCheck)
|
||||||
|
} else {
|
||||||
|
health.RegisterPeriodicFunc("storagedriver_"+app.Config.Storage.Type(), interval, storageDriverCheck)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, fileChecker := range app.Config.Health.FileCheckers {
|
for _, fileChecker := range app.Config.Health.FileCheckers {
|
||||||
interval := fileChecker.Interval
|
interval := fileChecker.Interval
|
||||||
|
|
Loading…
Reference in a new issue