@@ -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