| 
									
										
										
										
											2018-06-17 19:24:57 +02:00
										 |  |  | # This module implements a systemd service for running journaldriver, | 
					
						
							|  |  |  | # a log forwarding agent that sends logs from journald to Stackdriver | 
					
						
							|  |  |  | # Logging. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # It can be enabled without extra configuration when running on GCP. | 
					
						
							|  |  |  | # On machines hosted elsewhere, the other configuration options need | 
					
						
							|  |  |  | # to be set. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # For further information please consult the documentation in the | 
					
						
							| 
									
										
										
										
											2018-10-09 23:45:43 +02:00
										 |  |  | # upstream repository at: https://github.com/tazjin/journaldriver/ | 
					
						
							| 
									
										
										
										
											2018-06-17 19:24:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | { config, lib, pkgs, ...}: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; let cfg = config.services.journaldriver; | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  |   options.services.journaldriver = { | 
					
						
							|  |  |  |     enable = mkOption { | 
					
						
							|  |  |  |       type        = types.bool; | 
					
						
							|  |  |  |       default     = false; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Whether to enable journaldriver to forward journald logs to | 
					
						
							|  |  |  |         Stackdriver Logging. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logLevel = mkOption { | 
					
						
							|  |  |  |       type        = types.str; | 
					
						
							|  |  |  |       default     = "info"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Log level at which journaldriver logs its own output. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logName = mkOption { | 
					
						
							|  |  |  |       type        = with types; nullOr str; | 
					
						
							|  |  |  |       default     = null; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Configures the name of the target log in Stackdriver Logging. | 
					
						
							|  |  |  |         This option can be set to, for example, the hostname of a | 
					
						
							|  |  |  |         machine to improve the user experience in the logging | 
					
						
							|  |  |  |         overview. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     googleCloudProject = mkOption { | 
					
						
							|  |  |  |       type        = with types; nullOr str; | 
					
						
							|  |  |  |       default     = null; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Configures the name of the Google Cloud project to which to | 
					
						
							|  |  |  |         forward journald logs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This option is required on non-GCP machines, but should not be | 
					
						
							|  |  |  |         set on GCP instances. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logStream = mkOption { | 
					
						
							|  |  |  |       type        = with types; nullOr str; | 
					
						
							|  |  |  |       default     = null; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Configures the name of the Stackdriver Logging log stream into | 
					
						
							|  |  |  |         which to write journald entries. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This option is required on non-GCP machines, but should not be | 
					
						
							|  |  |  |         set on GCP instances. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     applicationCredentials = mkOption { | 
					
						
							|  |  |  |       type        = with types; nullOr path; | 
					
						
							|  |  |  |       default     = null; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Path to the service account private key (in JSON-format) used | 
					
						
							|  |  |  |         to forward log entries to Stackdriver Logging on non-GCP | 
					
						
							|  |  |  |         instances. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This option is required on non-GCP machines, but should not be | 
					
						
							|  |  |  |         set on GCP instances. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |     systemd.services.journaldriver = { | 
					
						
							|  |  |  |       description = "Stackdriver Logging journal forwarder"; | 
					
						
							|  |  |  |       script      = "${pkgs.journaldriver}/bin/journaldriver"; | 
					
						
							|  |  |  |       after       = [ "network-online.target" ]; | 
					
						
							|  |  |  |       wantedBy    = [ "multi-user.target" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Restart        = "always"; | 
					
						
							|  |  |  |         DynamicUser    = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # This directive lets systemd automatically configure | 
					
						
							|  |  |  |         # permissions on /var/lib/journaldriver, the directory in | 
					
						
							|  |  |  |         # which journaldriver persists its cursor state. | 
					
						
							|  |  |  |         StateDirectory = "journaldriver"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # This group is required for accessing journald. | 
					
						
							|  |  |  |         SupplementaryGroups = "systemd-journal"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       environment = { | 
					
						
							|  |  |  |         RUST_LOG                       = cfg.logLevel; | 
					
						
							|  |  |  |         LOG_NAME                       = cfg.logName; | 
					
						
							|  |  |  |         LOG_STREAM                     = cfg.logStream; | 
					
						
							|  |  |  |         GOOGLE_CLOUD_PROJECT           = cfg.googleCloudProject; | 
					
						
							|  |  |  |         GOOGLE_APPLICATION_CREDENTIALS = cfg.applicationCredentials; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |