Skip to content

Commit d641677

Browse files
authored
Merge pull request #7 from juexiaolin/master
腾讯云监控Exportv2发布
2 parents b80377c + 94e8aa9 commit d641677

File tree

690 files changed

+4015
-350570
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

690 files changed

+4015
-350570
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/go-kit/kit/log"
6+
"github.com/go-kit/kit/log/level"
7+
"github.com/prometheus/client_golang/prometheus"
8+
"github.com/prometheus/client_golang/prometheus/promhttp"
9+
"github.com/prometheus/common/promlog"
10+
"github.com/prometheus/common/promlog/flag"
11+
"github.com/prometheus/common/version"
12+
"github.com/tencentyun/tencentcloud-exporter/pkg/collector"
13+
"github.com/tencentyun/tencentcloud-exporter/pkg/config"
14+
kingpin "gopkg.in/alecthomas/kingpin.v2"
15+
"net/http"
16+
"os"
17+
)
18+
19+
func newHandler(c *config.TencentConfig, includeExporterMetrics bool, maxRequests int, logger log.Logger) (*http.Handler, error) {
20+
exporterMetricsRegistry := prometheus.NewRegistry()
21+
if includeExporterMetrics {
22+
exporterMetricsRegistry.MustRegister(
23+
prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}),
24+
prometheus.NewGoCollector(),
25+
)
26+
}
27+
28+
nc, err := collector.NewTcMonitorCollector(c, logger)
29+
if err != nil {
30+
return nil, fmt.Errorf("couldn't create collector: %s", err)
31+
}
32+
r := prometheus.NewRegistry()
33+
r.MustRegister(version.NewCollector("qcloud_exporter"))
34+
if err := r.Register(nc); err != nil {
35+
return nil, fmt.Errorf("couldn't register tencent cloud monitor collector: %s", err)
36+
}
37+
38+
handler := promhttp.HandlerFor(
39+
prometheus.Gatherers{exporterMetricsRegistry, r},
40+
promhttp.HandlerOpts{
41+
ErrorHandling: promhttp.ContinueOnError,
42+
MaxRequestsInFlight: maxRequests,
43+
Registry: exporterMetricsRegistry,
44+
},
45+
)
46+
if includeExporterMetrics {
47+
handler = promhttp.InstrumentMetricHandler(
48+
exporterMetricsRegistry, handler,
49+
)
50+
}
51+
return &handler, nil
52+
53+
}
54+
55+
func main() {
56+
var (
57+
listenAddress = kingpin.Flag(
58+
"web.listen-address",
59+
"Address on which to expose metrics and web interface.",
60+
).Default(":9123").String()
61+
metricsPath = kingpin.Flag(
62+
"web.telemetry-path",
63+
"Path under which to expose metrics.",
64+
).Default("/metrics").String()
65+
enableExporterMetrics = kingpin.Flag(
66+
"web.enable-exporter-metrics",
67+
"Include metrics about the exporter itself (promhttp_*, process_*, go_*).",
68+
).Default("false").Bool()
69+
maxRequests = kingpin.Flag(
70+
"web.max-requests",
71+
"Maximum number of parallel scrape requests. Use 0 to disable.",
72+
).Default("0").Int()
73+
configFile = kingpin.Flag(
74+
"config.file", "Tencent qcloud exporter configuration file.",
75+
).Default("qcloud.yml").String()
76+
)
77+
78+
promlogConfig := &promlog.Config{}
79+
flag.AddFlags(kingpin.CommandLine, promlogConfig)
80+
kingpin.Version(version.Print("qcloud_exporter"))
81+
kingpin.HelpFlag.Short('h')
82+
kingpin.Parse()
83+
logger := promlog.New(promlogConfig)
84+
85+
level.Info(logger).Log("msg", "Starting qcloud_exporter", "version", version.Info())
86+
level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext())
87+
88+
tencentConfig := config.NewConfig()
89+
if err := tencentConfig.LoadFile(*configFile); err != nil {
90+
level.Error(logger).Log("msg", "Load config error", "err", err)
91+
os.Exit(1)
92+
} else {
93+
level.Info(logger).Log("msg", "Load config ok")
94+
}
95+
96+
handler, err := newHandler(tencentConfig, *enableExporterMetrics, *maxRequests, logger)
97+
if err != nil {
98+
level.Error(logger).Log("msg", "Create handler fail", "err", err)
99+
os.Exit(1)
100+
}
101+
102+
http.Handle(*metricsPath, *handler)
103+
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
104+
w.Write([]byte(`<html>
105+
<head><title>QCloud Exporter</title></head>
106+
<body>
107+
<h1>QCloud Exporter</h1>
108+
<p><a href="` + *metricsPath + `">Metrics</a></p>
109+
</body>
110+
</html>`))
111+
})
112+
113+
level.Info(logger).Log("msg", "Listening on", "address", *listenAddress)
114+
err = http.ListenAndServe(*listenAddress, nil)
115+
if err != nil {
116+
level.Error(logger).Log("err", err)
117+
os.Exit(1)
118+
}
119+
}

collector/collector.go

Lines changed: 0 additions & 210 deletions
This file was deleted.

0 commit comments

Comments
 (0)