1
+ from argparse import *
2
+ from src .prometheus_metrics_server import *
3
+ from src .metrics_source import *
4
+
5
+ class App :
6
+ args : Namespace
7
+
8
+ def __init__ (self ):
9
+ parser = ArgumentParser (description = "IPsec Prometheus exporter for Libreswan" )
10
+ parser .add_argument ("-a" , "--address" , dest = "address" , required = False , type = str , default = "0.0.0.0" , help = "Server IP address" )
11
+ parser .add_argument ("-p" , "--port" , dest = "port" , required = False , type = int , default = 9446 , help = "Server port" )
12
+ parser .add_argument ("-i" , "--interval" , dest = "interval" , required = False , type = int , default = 1 , help = "Metrics read interval (in seconds)" )
13
+ self .args = parser .parse_args ()
14
+
15
+ def main (self ):
16
+ server = PrometheusMetricsServer (self .args .port , "IPsec exporter" )
17
+ server .address = self .args .address
18
+ server .interval = self .args .interval
19
+
20
+ globalstatus_source = CommandMetricsSource ("sudo ipsec globalstatus" )
21
+ globalstatus_source .add_metric ("ipsec_current_states" , r"current\.states\.(?P<type>\w+)=(?P<VALUE>\d+)" )
22
+ globalstatus_source .add_metric ("ipsec_current_states_iketype" , r"current\.states\.iketype\.(?P<type>\w+)=(?P<VALUE>\d+)" )
23
+ globalstatus_source .add_metric ("ipsec_current_states_enumerate" , r"current\.states\.enumerate\.(?P<type>\w+)=(?P<VALUE>\d+)" )
24
+ globalstatus_source .add_metric ("ipsec_total_ipsec_type" , r"total\.ipsec\.type\.(?P<type>\w+)=(?P<VALUE>\d+)" )
25
+ globalstatus_source .add_metric ("ipsec_total_traffic" , r"total\.(?P<type>\w+)\.traffic\.(?P<direction>\w+)=(?P<VALUE>\d+)" )
26
+ globalstatus_source .add_metric ("ipsec_total_ike" , r"total\.ike\.(?P<version>\w+)\.(?P<status>\w+)=(?P<VALUE>\d+)" )
27
+ globalstatus_source .add_metric ("ipsec_total_ikev2_redirect" , r"total\.ike\.ikev2\.redirect\.(?P<status>\w+)=(?P<VALUE>\d+)" )
28
+ globalstatus_source .add_metric ("ipsec_total_pamauth" , r"total\.pamauth\.(?P<status>\w+)=(?P<VALUE>\d+)" )
29
+ globalstatus_source .add_metric ("ipsec_total_iketcp" , r"total\.iketcp\.(?P<type>\w+)\.(?P<status>\w+)=(?P<VALUE>\d+)" )
30
+ globalstatus_source .add_metric ("ipsec_total_ike_encr" , r"total\.(?P<version>\w+)\.encr\.(?P<status>\w+)=(?P<VALUE>\d+)" )
31
+ globalstatus_source .add_metric ("ipsec_total_ike_integ" , r"total\.(?P<version>\w+)\.integ\.(?P<status>\w+)=(?P<VALUE>\d+)" )
32
+ globalstatus_source .add_metric ("ipsec_total_ike_group" , r"total\.(?P<version>\w+)\.group\.(?P<status>\w+)=(?P<VALUE>\d+)" )
33
+ globalstatus_source .add_metric ("ipsec_total_ike_notifies_error" , r"total\.(?P<version>\w+)\.(?P<direction>\w+)\.notifies\.error\.(?P<status>\w+)=(?P<VALUE>\d+)" )
34
+ globalstatus_source .add_metric ("ipsec_total_ikev2_notifies_status" , r"total\.ikev2\.(?P<direction>\w+)\.notifies\.status\.(?P<status>\w+)=(?P<VALUE>\d+)" )
35
+ server .add_metrics_source (globalstatus_source )
36
+
37
+ custom_metrics_source = CustomMetricsSource ()
38
+ custom_metrics_source .add_metric (IPsecTrafficCustomMetric ("ipsec_traffic" ))
39
+ server .add_metrics_source (custom_metrics_source )
40
+
41
+ server .run ()
42
+
0 commit comments