 5ead27394d
			
		
	
	
		5ead27394d
		
	
	
	
	
		
			
			Included changes: * upstream repository has moved, URLs changed accordingly * journaldriver bumped to new upstream release The new release includes an important workaround for an issue that could cause log-forwarding to fail after service restarts due to invalid journal cursors being persisted.
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # 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
 | |
| # upstream repository at: https://github.com/tazjin/journaldriver/
 | |
| 
 | |
| { 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;
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |