Skip to content

Commit 581b94c

Browse files
author
lupx
committed
集中式pg
1 parent 3d7edd4 commit 581b94c

File tree

4 files changed

+70
-38
lines changed

4 files changed

+70
-38
lines changed

cmd/postgres_exporter/main.go

Lines changed: 67 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@
1414
package main
1515

1616
import (
17+
//"context"
18+
"fmt"
1719
"net/http"
1820
"os"
21+
//"strconv"
22+
//"strings"
23+
//"time"
1924

2025
"github.com/go-kit/log"
2126
"github.com/go-kit/log/level"
@@ -28,6 +33,7 @@ import (
2833
"github.com/prometheus/exporter-toolkit/web"
2934
webflag "github.com/prometheus/exporter-toolkit/web/kingpinflag"
3035
"gopkg.in/alecthomas/kingpin.v2"
36+
"net/url"
3137
)
3238

3339
var (
@@ -61,6 +67,63 @@ const (
6167
serverLabelName = "server"
6268
)
6369

70+
71+
func newHandler() http.HandlerFunc {
72+
return func(w http.ResponseWriter, r *http.Request) {
73+
74+
v := r.URL.Query()
75+
//params := v["collect[]"]
76+
insname := v.Get("target")
77+
dbname := v.Get("dbname")
78+
user :=v.Get("user")
79+
password :=v.Get("password")
80+
ui := url.UserPassword(user, password).String()
81+
dsn := fmt.Sprintf("postgresql://" + ui + "@" + insname+"/"+dbname+"?sslmode=disable")
82+
// Use request context for cancellation when connection gets closed.
83+
level.Info(logger).Log(dsn)
84+
85+
if len(dsn) == 0 {
86+
level.Error(logger).Log("msg", "Couldn't find environment variables describing the datasource to use")
87+
//dsn, err := getDataSources()
88+
//if err != nil {
89+
// level.Error(logger).Log("msg", "Failed reading data sources", "err", err.Error())
90+
// os.Exit(1)
91+
//}
92+
}
93+
94+
opts := []ExporterOpt{
95+
DisableDefaultMetrics(*disableDefaultMetrics),
96+
DisableSettingsMetrics(*disableSettingsMetrics),
97+
AutoDiscoverDatabases(*autoDiscoverDatabases),
98+
WithUserQueriesPath(*queriesPath),
99+
WithConstantLabels(*constantLabelsList),
100+
ExcludeDatabases(*excludeDatabases),
101+
IncludeDatabases(*includeDatabases),
102+
}
103+
104+
exporter := NewExporter([]string{dsn}, opts...)
105+
defer func() {
106+
exporter.servers.Close()
107+
}()
108+
109+
prometheus.MustRegister(version.NewCollector(exporterName))
110+
111+
prometheus.MustRegister(exporter)
112+
113+
pe, err := collector.NewPostgresCollector(logger, []string{dsn})
114+
if err != nil {
115+
level.Error(logger).Log("msg", "Failed to create PostgresCollector", "err", err.Error())
116+
os.Exit(1)
117+
}
118+
prometheus.MustRegister(pe)
119+
120+
// Delegate http serving to Prometheus client library, which will call collector.Collect.
121+
h := promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{})
122+
h.ServeHTTP(w, r)
123+
}
124+
}
125+
126+
64127
func main() {
65128
kingpin.Version(version.Print(exporterName))
66129
promlogConfig := &promlog.Config{}
@@ -85,50 +148,16 @@ func main() {
85148
return
86149
}
87150

88-
dsn, err := getDataSources()
89-
if err != nil {
90-
level.Error(logger).Log("msg", "Failed reading data sources", "err", err.Error())
91-
os.Exit(1)
92-
}
93-
94-
if len(dsn) == 0 {
95-
level.Error(logger).Log("msg", "Couldn't find environment variables describing the datasource to use")
96-
os.Exit(1)
97-
}
98-
99-
opts := []ExporterOpt{
100-
DisableDefaultMetrics(*disableDefaultMetrics),
101-
DisableSettingsMetrics(*disableSettingsMetrics),
102-
AutoDiscoverDatabases(*autoDiscoverDatabases),
103-
WithUserQueriesPath(*queriesPath),
104-
WithConstantLabels(*constantLabelsList),
105-
ExcludeDatabases(*excludeDatabases),
106-
IncludeDatabases(*includeDatabases),
107-
}
108-
109-
exporter := NewExporter(dsn, opts...)
110-
defer func() {
111-
exporter.servers.Close()
112-
}()
113-
114-
prometheus.MustRegister(version.NewCollector(exporterName))
115-
116-
prometheus.MustRegister(exporter)
117-
118-
pe, err := collector.NewPostgresCollector(logger, dsn)
119-
if err != nil {
120-
level.Error(logger).Log("msg", "Failed to create PostgresCollector", "err", err.Error())
121-
os.Exit(1)
122-
}
123-
prometheus.MustRegister(pe)
124151

125-
http.Handle(*metricPath, promhttp.Handler())
152+
//http.Handle(*metricPath, promhttp.Handler())
153+
handlerFunc := newHandler()
154+
http.Handle(*metricPath, promhttp.InstrumentMetricHandler(prometheus.DefaultRegisterer, handlerFunc))
126155
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
127156
w.Header().Set("Content-Type", "text/html; charset=UTF-8") // nolint: errcheck
128157
w.Write(landingPage) // nolint: errcheck
129158
})
130159

131-
level.Info(logger).Log("msg", "Listening on address", "address", *listenAddress)
160+
level.Info(logger).Log("msg", "@lupuxiao Listening on address", "address", *listenAddress)
132161
srv := &http.Server{Addr: *listenAddress}
133162
if err := web.ListenAndServe(srv, *webConfig, logger); err != nil {
134163
level.Error(logger).Log("msg", "Error running HTTP server", "err", err)
14.6 MB
Binary file not shown.

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ require (
1212
github.com/prometheus/exporter-toolkit v0.7.1
1313
gopkg.in/alecthomas/kingpin.v2 v2.2.6
1414
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
15+
gopkg.in/ini.v1 v1.66.4 // indirect
1516
gopkg.in/yaml.v2 v2.4.0
1617
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
469469
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
470470
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
471471
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
472+
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
473+
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
472474
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
473475
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
474476
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

0 commit comments

Comments
 (0)