You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.2 KiB

package main
import (
"flag"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
log "github.com/sirupsen/logrus"
"net/http"
"sreExporter/collector"
"strings"
)
var (
metricsPath string = "https://github.com/strive-after/demo-exporter"
version string = "v1.0"
listenAddress string
help bool
disable string //命令行传入的需要关闭的指标
disables []string //处理命令行传入的根据,分割为一个切片做处理
)
func init() {
flag.StringVar(&listenAddress, "addr", ":9100", "addr")
flag.BoolVar(&help, "h", false, "help")
flag.StringVar(&disable, "disable", "", "关闭的指标收集器")
}
// main函数作为总入口 提供web url /metrices以及访问/的时候提供一些基本介绍
func main() {
flag.Parse()
if help {
flag.Usage()
return
}
disables = strings.Split(disable, ",")
//手动开关
//通过用户输入的我们做关闭
for scraper, _ := range collector.Scrapers {
for _, v := range disables {
if v == scraper.Name() {
collector.Scrapers[scraper] = false
break
}
}
}
//访问/的时候返回一些基础提示
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<html>
<head><title>` + collector.Name() + `</title></head>
<body>
<h1><a style="text-decoration:none" href=''>` + collector.Name() + `</a></h1>
<p><a href='` + metricsPath + `'>Metrics</a></p>
<h2>Build</h2>
<pre>` + version + `</pre>
</body>
</html>`))
})
//根据开关来判断指标的是否需要收集 这里只有代码里面的判断 用户手动开关还未做
enabledScrapers := []collector.Scraper{}
for scraper, enabled := range collector.Scrapers {
if enabled {
log.Info("Scraper enabled ", scraper.Name())
enabledScrapers = append(enabledScrapers, scraper)
}
}
//注册自身采集器
exporter := collector.New(collector.NewMetrics(), enabledScrapers)
prometheus.MustRegister(exporter)
http.Handle("/metrics", promhttp.Handler())
//监听端口
if err := http.ListenAndServe(listenAddress, nil); err != nil {
log.Printf("Error occur when start server %v", err)
}
}