forked from prezhdarov/vmware-exporter
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathvmware-exporter.go
99 lines (74 loc) · 2.95 KB
/
vmware-exporter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
import (
"flag"
"net/http"
"os"
"github.com/prezhdarov/prometheus-exporter/config"
"github.com/prezhdarov/prometheus-exporter/exporter"
vmware "github.com/prezhdarov/vmware-exporter/vmware/api"
vmwareCollectors "github.com/prezhdarov/vmware-exporter/vmware/collectors"
"github.com/go-kit/log/level"
"github.com/prometheus/common/promlog"
"github.com/prometheus/exporter-toolkit/web"
)
const (
exporterName = "VMware vSphere Exporter"
namespace = "vmware"
)
var (
listenAddress = flag.String("http.address", ":9169", "Address and port to listen for http connections")
maxRequests = flag.Int("prom.maxRequests", 20, "Maximum number of parallel scrape requests. Use 0 to disable.")
disableExporterTarget = flag.Bool("disable.exporter.target", false, "Disable default target for /metrics path.")
disableExporterMetrics = flag.Bool("disable.exporter.metrics", true, "Disable exporter metrics in /metrics path. Always enabled if /metrics target disabled")
logLevel = flag.String("log.level", "debug", "Log Level minimums. Available options are: debug,info,warn and error")
logFormat = flag.String("log.format", "logfmt", "Log output format. Available options are: logfmt and json")
)
func setLogger(lf, ll *string) *promlog.Config {
promlogFormat := &promlog.AllowedFormat{}
promlogFormat.Set(*lf)
promlogLevel := &promlog.AllowedLevel{}
promlogLevel.Set(*ll)
promlogConfig := &promlog.Config{}
promlogConfig.Format = promlogFormat
promlogConfig.Level = promlogLevel
return promlogConfig
}
func usage() {
const s = `vmware-exporter collects metrics data from VMware vCenter. `
config.Usage(s)
}
func webConfig(listenAddress *string) *web.FlagConfig {
listenAddresses := []string{*listenAddress}
systemSocket := false
configFile := ""
return &web.FlagConfig{WebListenAddresses: &listenAddresses, WebSystemdSocket: &systemSocket, WebConfigFile: &configFile}
}
func main() {
flag.CommandLine.SetOutput(os.Stdout)
flag.Usage = usage
config.Parse()
logger := promlog.New(setLogger(logFormat, logLevel))
level.Debug(logger).Log("disable exporter target is", disableExporterTarget)
vmware.Load(logger)
vmwareCollectors.Load(logger)
http.Handle("/metrics", exporter.CreateHandler(!*disableExporterMetrics, *disableExporterTarget, *maxRequests, namespace, logger))
http.HandleFunc("/probe", func(w http.ResponseWriter, r *http.Request) {
exporter.CreateHandleFunc(w, r, namespace, "", logger)
})
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`
<head><title>VMware vSphere Exporter</title></head>
<body>
<h1>VMware vSphere Exporter</h1>
<p><a href="/metrics">Metrics</a></p>
<p><a href="/probe">Probe</a></p>
</body>
</html>`))
})
level.Info(logger).Log("msg", "listening on", "address", listenAddress)
server := &http.Server{}
if err := web.ListenAndServe(server, webConfig(listenAddress), logger); err != nil {
level.Error(logger).Log("err", err)
os.Exit(1)
}
}