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>master
							parent
							
								
									b09b0ffcf9
								
							
						
					
					
						commit
						216df32510
					
				|  | @ -48,3 +48,8 @@ proxy: | |||
|   remoteurl: https://registry-1.docker.io | ||||
|   username: username | ||||
|   password: password | ||||
| health: | ||||
|   storagedriver: | ||||
|     enabled: true | ||||
|     interval: 10s | ||||
|     threshold: 3 | ||||
|  |  | |||
|  | @ -59,4 +59,8 @@ notifications: | |||
|           threshold: 10 | ||||
|           backoff: 1s | ||||
|           disabled: true  | ||||
| 
 | ||||
| health: | ||||
|   storagedriver: | ||||
|     enabled: true | ||||
|     interval: 10s | ||||
|     threshold: 3 | ||||
|  |  | |||
|  | @ -11,3 +11,8 @@ http: | |||
|     addr: :5000 | ||||
|     headers: | ||||
|         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"` | ||||
| 	// HTTPChecker is a list of URIs to check
 | ||||
| 	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
 | ||||
|  |  | |||
|  | @ -196,6 +196,10 @@ information about each option that appears later in this page. | |||
|         maxactive: 64 | ||||
|         idletimeout: 300s | ||||
|     health: | ||||
|       storagedriver: | ||||
|         enabled: true | ||||
|         interval: 10s | ||||
|         threshold: 3 | ||||
|       file: | ||||
|         - file: /path/to/checked/file | ||||
|           interval: 10s | ||||
|  | @ -1600,6 +1604,10 @@ Configure the behavior of the Redis connection pool. | |||
| ## health | ||||
| 
 | ||||
|     health: | ||||
|       storagedriver: | ||||
|         enabled: true | ||||
|         interval: 10s | ||||
|         threshold: 3 | ||||
|       file: | ||||
|         - file: /path/to/checked/file | ||||
|           interval: 10s | ||||
|  | @ -1609,8 +1617,72 @@ Configure the behavior of the Redis connection pool. | |||
|           interval: 10s | ||||
|           threshold: 3 | ||||
| 
 | ||||
| The health option is **optional**. It may contain lists of file checkers | ||||
| and/or HTTP checkers. | ||||
| The health option is **optional**. It may contain preferences for a periodic | ||||
| 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 | ||||
| 
 | ||||
|  |  | |||
|  | @ -235,10 +235,23 @@ func NewApp(ctx context.Context, configuration configuration.Configuration) *App | |||
| // implementing this properly will require a refactor. This method may panic
 | ||||
| // if called twice in the same process.
 | ||||
| func (app *App) RegisterHealthChecks() { | ||||
| 	health.RegisterPeriodicThresholdFunc("storagedriver_"+app.Config.Storage.Type(), defaultCheckInterval, 3, func() error { | ||||
| 		_, err := app.driver.List(app, "/") // "/" should always exist
 | ||||
| 		return err                          // any error will be treated as failure
 | ||||
| 	}) | ||||
| 	if app.Config.Health.StorageDriver.Enabled { | ||||
| 		interval := app.Config.Health.StorageDriver.Interval | ||||
| 		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 { | ||||
| 		interval := fileChecker.Interval | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue