func init() { prometheus.MustRegister(dnsDurations) prometheus.MustRegister(storeCounts) prometheus.MustRegister(storeDurations) prometheus.MustRegister(storeErrors) prometheus.MustRegister( prometheus.NewProcessCollectorPIDFn(consulAgentPid, "consul"), ) }
func main() { var ( bindURI = flag.String("bind.stats-url", "http://localhost:8053/", "HTTP XML API address of an Bind server.") bindTimeout = flag.Duration("bind.timeout", 10*time.Second, "Timeout for trying to get stats from Bind.") bindPidFile = flag.String("bind.pid-file", "", "Path to Bind's pid file to export process information.") bindVersion = flag.String("bind.stats-version", "auto", "BIND statistics version. Can be detected automatically. Available: [xml.v2, xml.v3, auto]") showVersion = flag.Bool("version", false, "Print version information.") listenAddress = flag.String("web.listen-address", ":9119", "Address to listen on for web interface and telemetry.") metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") groups = statisticGroups{bind.ServerStats, bind.ViewStats} ) flag.Var(&groups, "bind.stats-groups", "Comma-separated list of statistics to collect. Available: [server, view, tasks]") flag.Parse() if *showVersion { fmt.Fprintln(os.Stdout, version.Print("bind_exporter")) os.Exit(0) } log.Infoln("Starting bind_exporter", version.Info()) log.Infoln("Build context", version.BuildContext()) log.Infoln("Configured to collect statistics", groups.String()) prometheus.MustRegister(NewExporter(*bindVersion, *bindURI, *bindTimeout, groups)) if *bindPidFile != "" { procExporter := prometheus.NewProcessCollectorPIDFn( func() (int, error) { content, err := ioutil.ReadFile(*bindPidFile) if err != nil { return 0, fmt.Errorf("Can't read pid file: %s", err) } value, err := strconv.Atoi(strings.TrimSpace(string(content))) if err != nil { return 0, fmt.Errorf("Can't parse pid file: %s", err) } return value, nil }, namespace) prometheus.MustRegister(procExporter) } log.Info("Starting Server: ", *listenAddress) http.Handle(*metricsPath, prometheus.Handler()) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`<html> <head><title>Bind Exporter</title></head> <body> <h1>Bind Exporter</h1> <p><a href='` + *metricsPath + `'>Metrics</a></p> </body> </html>`)) }) log.Fatal(http.ListenAndServe(*listenAddress, nil)) }
func main() { var ( listenAddress = flag.String("web.listen-address", ":9101", "Address to listen on for web interface and telemetry.") metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") haProxyScrapeURI = flag.String("haproxy.scrape-uri", "http://localhost/;csv", "URI on which to scrape HAProxy.") haProxyServerMetricFields = flag.String("haproxy.server-metric-fields", serverMetrics.String(), "Comma-seperated list of exported server metrics. See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#9.1") haProxyTimeout = flag.Duration("haproxy.timeout", 5*time.Second, "Timeout for trying to get stats from HAProxy.") haProxyPidFile = flag.String("haproxy.pid-file", "", "Path to haproxy's pid file.") ) flag.Parse() selectedServerMetrics, err := filterServerMetrics(*haProxyServerMetricFields) if err != nil { log.Fatal(err) } exporter := NewExporter(*haProxyScrapeURI, selectedServerMetrics, *haProxyTimeout) prometheus.MustRegister(exporter) if *haProxyPidFile != "" { procExporter := prometheus.NewProcessCollectorPIDFn( func() (int, error) { content, err := ioutil.ReadFile(*haProxyPidFile) if err != nil { return 0, fmt.Errorf("Can't read pid file: %s", err) } value, err := strconv.Atoi(strings.TrimSpace(string(content))) if err != nil { return 0, fmt.Errorf("Can't parse pid file: %s", err) } return value, nil }, namespace) prometheus.MustRegister(procExporter) } log.Infof("Starting Server: %s", *listenAddress) http.Handle(*metricsPath, prometheus.Handler()) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`<html> <head><title>Haproxy Exporter</title></head> <body> <h1>Haproxy Exporter</h1> <p><a href='` + *metricsPath + `'>Metrics</a></p> </body> </html>`)) }) log.Fatal(http.ListenAndServe(*listenAddress, nil)) }