From 5c6fe8580c20e1fed13b14b3533eff84c037d3e2 Mon Sep 17 00:00:00 2001 From: spleenftw <57947900+Spleenftw@users.noreply.github.com> Date: Fri, 23 Feb 2024 00:27:05 +0100 Subject: [PATCH] Update main.go Adding a new metric :service_openvpn --- main.go | 131 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 82 insertions(+), 49 deletions(-) diff --git a/main.go b/main.go index 07a6fe0..d8c5326 100644 --- a/main.go +++ b/main.go @@ -1,59 +1,92 @@ -// Copyright 2017 Kumina, https://kumina.nl/ -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - package main import ( - "flag" - "github.com/kumina/openvpn_exporter/exporters" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" - "log" - "net/http" - "strings" +// "bytes" + "flag" + "fmt" + "github.com/kumina/openvpn_exporter/exporters" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" + "log" + "net/http" + "os/exec" + "strings" + "time" ) +var serviceOpenVPN = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "service_openvpn", + Help: "Indicates whether the OpenVPN service is up (1) or down (0).", +}) + func main() { - var ( - listenAddress = flag.String("web.listen-address", ":9176", "Address to listen on for web interface and telemetry.") - metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") - openvpnStatusPaths = flag.String("openvpn.status_paths", "examples/client.status,examples/server2.status,examples/server3.status", "Paths at which OpenVPN places its status files.") - ignoreIndividuals = flag.Bool("ignore.individuals", false, "If ignoring metrics for individuals") - ) - flag.Parse() + var ( + listenAddress = flag.String("web.listen-address", ":9176", "Address to listen on for web interface and telemetry.") + metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") + openvpnStatusPaths = flag.String("openvpn.status_paths", "/var/log/openvpn-status.log", "Paths at which OpenVPN places its status files.") + ignoreIndividuals = flag.Bool("ignore.individuals", false, "If ignoring metrics for individuals.") + ) + flag.Parse() - log.Printf("Starting OpenVPN Exporter\n") - log.Printf("Listen address: %v\n", *listenAddress) - log.Printf("Metrics path: %v\n", *metricsPath) - log.Printf("openvpn.status_path: %v\n", *openvpnStatusPaths) - log.Printf("Ignore Individuals: %v\n", *ignoreIndividuals) + log.Printf("Starting OpenVPN Exporter\n") + log.Printf("Listen address: %v\n", *listenAddress) + log.Printf("Metrics path: %v\n", *metricsPath) + log.Printf("openvpn.status_path: %v\n", *openvpnStatusPaths) + log.Printf("Ignore Individuals: %v\n", *ignoreIndividuals) - exporter, err := exporters.NewOpenVPNExporter(strings.Split(*openvpnStatusPaths, ","), *ignoreIndividuals) - if err != nil { - panic(err) - } - prometheus.MustRegister(exporter) + exporter, err := exporters.NewOpenVPNExporter(strings.Split(*openvpnStatusPaths, ","), *ignoreIndividuals) + if err != nil { + panic(err) + } + prometheus.MustRegister(exporter) + prometheus.MustRegister(serviceOpenVPN) - http.Handle(*metricsPath, promhttp.Handler()) - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte(` - -