From 86fad60ef2b217cb975983d0d08edf1dcf4ec7cf Mon Sep 17 00:00:00 2001 From: dyknon Date: Sun, 13 Jul 2025 22:42:28 +0900 Subject: Initial commit --- exporter-multiplexer.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 exporter-multiplexer.go (limited to 'exporter-multiplexer.go') diff --git a/exporter-multiplexer.go b/exporter-multiplexer.go new file mode 100644 index 0000000..c88e01b --- /dev/null +++ b/exporter-multiplexer.go @@ -0,0 +1,58 @@ +// r5f.jp/cgit/prometheus-exporter-multiplexer.git + +package main + +import ( + "fmt" + "log/slog" + "net/http" + logflag "github.com/prometheus/common/promslog/flag" + "gopkg.in/alecthomas/kingpin.v2" + "github.com/prometheus/common/promslog" + tkweb "github.com/prometheus/exporter-toolkit/web" + tkflag "github.com/prometheus/exporter-toolkit/web/kingpinflag" +) + + +var ( + relabelMap = argRelabel(kingpin.Flag( + "relabel", "name=yaml.", + ).Short('r')) + srcList = argSrcList(kingpin.Arg( + "sources", "Metric source.", + ).Required()) + logger *slog.Logger +) + +func main() { + promslogConfig := &promslog.Config{} + logflag.AddFlags(kingpin.CommandLine, promslogConfig) + tkFlag := tkflag.AddFlags(kingpin.CommandLine, ":9199") + kingpin.CommandLine.HelpFlag.Short('h') + kingpin.Parse() + + logger = promslog.New(promslogConfig) + parts, err := PartsFromArgs(*srcList, relabelMap) + if err != nil{ + logger.Error(err.Error()) + return + } + + http.HandleFunc("/metrics", func( + w http.ResponseWriter, r *http.Request, + ){ + out, err := parts.Get() + if err != nil{ + logger.Error(err.Error()) + w.WriteHeader(500) + } + w.Header()["Content-Type"] = []string{"application/openmetrics-text"} + fmt.Fprint(w, out) + }) + + err = tkweb.ListenAndServe(&http.Server{}, tkFlag, logger) + if err != nil{ + logger.Error(err.Error()) + return + } +} -- cgit v1.2.3