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