// 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 } }