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 |   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 New Issue