| 
									
										
										
										
											2019-07-17 14:19:18 +02:00
										 |  |  | { config, lib, pkgs, options }: | 
					
						
							| 
									
										
										
										
											2018-03-28 17:21:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   cfg = config.services.prometheus.exporters.dovecot; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   port = 9166; | 
					
						
							|  |  |  |   extraOpts = { | 
					
						
							|  |  |  |     telemetryPath = mkOption { | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |       default = "/metrics"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Path under which to expose metrics. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     socketPath = mkOption { | 
					
						
							|  |  |  |       type = types.path; | 
					
						
							|  |  |  |       default = "/var/run/dovecot/stats"; | 
					
						
							| 
									
										
										
										
											2019-01-15 15:01:23 +01:00
										 |  |  |       example = "/var/run/dovecot2/old-stats"; | 
					
						
							| 
									
										
										
										
											2018-03-28 17:21:09 +02:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         Path under which the stats socket is placed. | 
					
						
							|  |  |  |         The user/group under which the exporter runs, | 
					
						
							|  |  |  |         should be able to access the socket in order | 
					
						
							|  |  |  |         to scrape the metrics successfully. | 
					
						
							| 
									
										
										
										
											2019-01-15 15:01:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Please keep in mind that the stats module has changed in | 
					
						
							|  |  |  |         <link xlink:href="https://wiki2.dovecot.org/Upgrading/2.3">Dovecot 2.3+</link> which | 
					
						
							|  |  |  |         is not <link xlink:href="https://github.com/kumina/dovecot_exporter/issues/8">compatible with this exporter</link>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The following extra config has to be passed to Dovecot to ensure that recent versions | 
					
						
							|  |  |  |         work with this exporter: | 
					
						
							|  |  |  |         <programlisting> | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           <xref linkend="opt-services.prometheus.exporters.dovecot.enable" /> = true; | 
					
						
							|  |  |  |           <xref linkend="opt-services.prometheus.exporters.dovecot.socketPath" /> = "/var/run/dovecot2/old-stats"; | 
					
						
							|  |  |  |           <xref linkend="opt-services.dovecot2.extraConfig" /> = '''
 | 
					
						
							|  |  |  |             mail_plugins = $mail_plugins old_stats | 
					
						
							|  |  |  |             service old-stats { | 
					
						
							|  |  |  |               unix_listener old-stats { | 
					
						
							| 
									
										
										
										
											2019-08-02 15:10:27 +02:00
										 |  |  |                 user = dovecot-exporter | 
					
						
							|  |  |  |                 group = dovecot-exporter | 
					
						
							| 
									
										
										
										
											2019-01-15 15:01:23 +01:00
										 |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           ''';
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         </programlisting> | 
					
						
							| 
									
										
										
										
											2018-03-28 17:21:09 +02:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     scopes = mkOption { | 
					
						
							|  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = [ "user" ]; | 
					
						
							|  |  |  |       example = [ "user" "global" ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Stats scopes to query. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   serviceOpts = { | 
					
						
							|  |  |  |     serviceConfig = { | 
					
						
							| 
									
										
										
										
											2019-08-02 15:23:23 +02:00
										 |  |  |       DynamicUser = false; | 
					
						
							| 
									
										
										
										
											2018-03-28 17:21:09 +02:00
										 |  |  |       ExecStart = ''
 | 
					
						
							|  |  |  |         ${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \ | 
					
						
							|  |  |  |           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \ | 
					
						
							|  |  |  |           --web.telemetry-path ${cfg.telemetryPath} \ | 
					
						
							| 
									
										
										
										
											2020-03-06 00:22:15 +01:00
										 |  |  |           --dovecot.socket-path ${escapeShellArg cfg.socketPath} \ | 
					
						
							| 
									
										
										
										
											2018-03-28 17:21:09 +02:00
										 |  |  |           --dovecot.scopes ${concatStringsSep "," cfg.scopes} \ | 
					
						
							|  |  |  |           ${concatStringsSep " \\\n  " cfg.extraFlags} | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |