Skip to content

Commit 9e48c68

Browse files
committed
Make es.uri optional by setting default to empty string check if it's empty and if so, don't parse it
Signed-off-by: pincher95 <[email protected]>
1 parent 94732c6 commit 9e48c68

File tree

1 file changed

+93
-89
lines changed

1 file changed

+93
-89
lines changed

main.go

Lines changed: 93 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func main() {
6161
toolkitFlags = webflag.AddFlags(kingpin.CommandLine, ":9114")
6262
esURI = kingpin.Flag("es.uri",
6363
"HTTP API address of an Elasticsearch node.").
64-
Default("http://localhost:9200").String()
64+
Default("").String()
6565
esTimeout = kingpin.Flag("es.timeout",
6666
"Timeout for trying to get stats from Elasticsearch.").
6767
Default("5s").Duration()
@@ -143,114 +143,118 @@ func main() {
143143
promslogConfig.Writer = w
144144
logger := promslog.New(promslogConfig)
145145

146-
esURL, err := url.Parse(*esURI)
147-
if err != nil {
148-
logger.Error("failed to parse es.uri", "err", err)
149-
os.Exit(1)
150-
}
146+
// version metric
147+
prometheus.MustRegister(versioncollector.NewCollector(name))
151148

152-
esUsername := os.Getenv("ES_USERNAME")
153-
esPassword := os.Getenv("ES_PASSWORD")
149+
// Create a context that is cancelled on SIGKILL or SIGINT.
150+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
151+
defer cancel()
154152

155-
if esUsername != "" && esPassword != "" {
156-
esURL.User = url.UserPassword(esUsername, esPassword)
157-
}
153+
if *esURI != "" {
154+
esURL, err := url.Parse(*esURI)
155+
if err != nil {
156+
logger.Error("failed to parse es.uri", "err", err)
157+
os.Exit(1)
158+
}
158159

159-
// returns nil if not provided and falls back to simple TCP.
160-
tlsConfig := createTLSConfig(*esCA, *esClientCert, *esClientPrivateKey, *esInsecureSkipVerify)
160+
esUsername := os.Getenv("ES_USERNAME")
161+
esPassword := os.Getenv("ES_PASSWORD")
161162

162-
var httpTransport http.RoundTripper
163+
if esUsername != "" && esPassword != "" {
164+
esURL.User = url.UserPassword(esUsername, esPassword)
165+
}
163166

164-
httpTransport = &http.Transport{
165-
TLSClientConfig: tlsConfig,
166-
Proxy: http.ProxyFromEnvironment,
167-
}
167+
// returns nil if not provided and falls back to simple TCP.
168+
tlsConfig := createTLSConfig(*esCA, *esClientCert, *esClientPrivateKey, *esInsecureSkipVerify)
168169

169-
esAPIKey := os.Getenv("ES_API_KEY")
170+
var httpTransport http.RoundTripper
170171

171-
if esAPIKey != "" {
172-
httpTransport = &transportWithAPIKey{
173-
underlyingTransport: httpTransport,
174-
apiKey: esAPIKey,
172+
httpTransport = &http.Transport{
173+
TLSClientConfig: tlsConfig,
174+
Proxy: http.ProxyFromEnvironment,
175175
}
176-
}
177176

178-
httpClient := &http.Client{
179-
Timeout: *esTimeout,
180-
Transport: httpTransport,
181-
}
177+
esAPIKey := os.Getenv("ES_API_KEY")
182178

183-
if *awsRegion != "" {
184-
httpClient.Transport, err = roundtripper.NewAWSSigningTransport(httpTransport, *awsRegion, *awsRoleArn, logger)
185-
if err != nil {
186-
logger.Error("failed to create AWS transport", "err", err)
187-
os.Exit(1)
179+
if esAPIKey != "" {
180+
httpTransport = &transportWithAPIKey{
181+
underlyingTransport: httpTransport,
182+
apiKey: esAPIKey,
183+
}
188184
}
189-
}
190185

191-
// version metric
192-
prometheus.MustRegister(versioncollector.NewCollector(name))
186+
httpClient := &http.Client{
187+
Timeout: *esTimeout,
188+
Transport: httpTransport,
189+
}
193190

194-
// create the exporter
195-
exporter, err := collector.NewElasticsearchCollector(
196-
logger,
197-
[]string{},
198-
collector.WithElasticsearchURL(esURL),
199-
collector.WithHTTPClient(httpClient),
200-
)
201-
if err != nil {
202-
logger.Error("failed to create Elasticsearch collector", "err", err)
203-
os.Exit(1)
204-
}
205-
prometheus.MustRegister(exporter)
206-
207-
// TODO(@sysadmind): Remove this when we have a better way to get the cluster name to down stream collectors.
208-
// cluster info retriever
209-
clusterInfoRetriever := clusterinfo.New(logger, httpClient, esURL, *esClusterInfoInterval)
210-
211-
prometheus.MustRegister(collector.NewClusterHealth(logger, httpClient, esURL))
212-
prometheus.MustRegister(collector.NewNodes(logger, httpClient, esURL, *esAllNodes, *esNode))
213-
214-
if *esExportIndices || *esExportShards {
215-
sC := collector.NewShards(logger, httpClient, esURL)
216-
prometheus.MustRegister(sC)
217-
iC := collector.NewIndices(logger, httpClient, esURL, *esExportShards, *esExportIndexAliases)
218-
prometheus.MustRegister(iC)
219-
if registerErr := clusterInfoRetriever.RegisterConsumer(iC); registerErr != nil {
220-
logger.Error("failed to register indices collector in cluster info")
221-
os.Exit(1)
191+
if *awsRegion != "" {
192+
var err error
193+
httpClient.Transport, err = roundtripper.NewAWSSigningTransport(httpTransport, *awsRegion, *awsRoleArn, logger)
194+
if err != nil {
195+
logger.Error("failed to create AWS transport", "err", err)
196+
os.Exit(1)
197+
}
222198
}
223-
if registerErr := clusterInfoRetriever.RegisterConsumer(sC); registerErr != nil {
224-
logger.Error("failed to register shards collector in cluster info")
199+
200+
// create the exporter
201+
exporter, err := collector.NewElasticsearchCollector(
202+
logger,
203+
[]string{},
204+
collector.WithElasticsearchURL(esURL),
205+
collector.WithHTTPClient(httpClient),
206+
)
207+
if err != nil {
208+
logger.Error("failed to create Elasticsearch collector", "err", err)
225209
os.Exit(1)
226210
}
227-
}
211+
prometheus.MustRegister(exporter)
228212

229-
if *esExportIndicesSettings {
230-
prometheus.MustRegister(collector.NewIndicesSettings(logger, httpClient, esURL))
231-
}
213+
// TODO(@sysadmind): Remove this when we have a better way to get the cluster name to down stream collectors.
214+
// cluster info retriever
215+
clusterInfoRetriever := clusterinfo.New(logger, httpClient, esURL, *esClusterInfoInterval)
232216

233-
if *esExportIndicesMappings {
234-
prometheus.MustRegister(collector.NewIndicesMappings(logger, httpClient, esURL))
235-
}
217+
prometheus.MustRegister(collector.NewClusterHealth(logger, httpClient, esURL))
218+
prometheus.MustRegister(collector.NewNodes(logger, httpClient, esURL, *esAllNodes, *esNode))
236219

237-
// Create a context that is cancelled on SIGKILL or SIGINT.
238-
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
239-
defer cancel()
220+
if *esExportIndices || *esExportShards {
221+
sC := collector.NewShards(logger, httpClient, esURL)
222+
prometheus.MustRegister(sC)
223+
iC := collector.NewIndices(logger, httpClient, esURL, *esExportShards, *esExportIndexAliases)
224+
prometheus.MustRegister(iC)
225+
if registerErr := clusterInfoRetriever.RegisterConsumer(iC); registerErr != nil {
226+
logger.Error("failed to register indices collector in cluster info")
227+
os.Exit(1)
228+
}
229+
if registerErr := clusterInfoRetriever.RegisterConsumer(sC); registerErr != nil {
230+
logger.Error("failed to register shards collector in cluster info")
231+
os.Exit(1)
232+
}
233+
}
240234

241-
// start the cluster info retriever
242-
switch runErr := clusterInfoRetriever.Run(ctx); runErr {
243-
case nil:
244-
logger.Info("started cluster info retriever", "interval", (*esClusterInfoInterval).String())
245-
case clusterinfo.ErrInitialCallTimeout:
246-
logger.Info("initial cluster info call timed out")
247-
default:
248-
logger.Error("failed to run cluster info retriever", "err", err)
249-
os.Exit(1)
250-
}
235+
if *esExportIndicesSettings {
236+
prometheus.MustRegister(collector.NewIndicesSettings(logger, httpClient, esURL))
237+
}
251238

252-
// register cluster info retriever as prometheus collector
253-
prometheus.MustRegister(clusterInfoRetriever)
239+
if *esExportIndicesMappings {
240+
prometheus.MustRegister(collector.NewIndicesMappings(logger, httpClient, esURL))
241+
}
242+
243+
// start the cluster info retriever
244+
switch runErr := clusterInfoRetriever.Run(ctx); runErr {
245+
case nil:
246+
logger.Info("started cluster info retriever", "interval", (*esClusterInfoInterval).String())
247+
case clusterinfo.ErrInitialCallTimeout:
248+
logger.Info("initial cluster info call timed out")
249+
default:
250+
var err error
251+
logger.Error("failed to run cluster info retriever", "err", err)
252+
os.Exit(1)
253+
}
254+
255+
// register cluster info retriever as prometheus collector
256+
prometheus.MustRegister(clusterInfoRetriever)
257+
}
254258

255259
http.HandleFunc(*metricsPath, func(w http.ResponseWriter, r *http.Request) {
256260
// If query has target param treat like probe endpoint
@@ -366,7 +370,7 @@ func main() {
366370

367371
server := &http.Server{}
368372
go func() {
369-
if err = web.ListenAndServe(server, toolkitFlags, logger); err != nil {
373+
if err := web.ListenAndServe(server, toolkitFlags, logger); err != nil {
370374
logger.Error("http server quit", "err", err)
371375
os.Exit(1)
372376
}

0 commit comments

Comments
 (0)