diff -Nru prometheus-elasticsearch-exporter-1.4.0/CHANGELOG.md prometheus-elasticsearch-exporter-1.5.0/CHANGELOG.md --- prometheus-elasticsearch-exporter-1.4.0/CHANGELOG.md 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/CHANGELOG.md 2022-07-28 13:27:55.000000000 +0000 @@ -1,3 +1,9 @@ +## 1.5.0 / 2022-07-28 + +* [FEATURE] Add metrics collection for data stream statistics #592 +* [FEATURE] Support for AWS Elasticsearch using AWS SDK v2 #597 +* [BUGFIX] Fix cluster settings collection when max_shards_per_node is manually set. #603 + ## 1.4.0 / 2022-06-29 * [BREAKING] Remove ENV var support for most non-sensitive options. #518 diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/cluster_info.go prometheus-elasticsearch-exporter-1.5.0/collector/cluster_info.go --- prometheus-elasticsearch-exporter-1.4.0/collector/cluster_info.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/cluster_info.go 2022-07-28 13:27:55.000000000 +0000 @@ -20,7 +20,7 @@ "net/http" "net/url" - "github.com/blang/semver" + "github.com/blang/semver/v4" "github.com/go-kit/log" "github.com/prometheus/client_golang/prometheus" ) diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings.go prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings.go --- prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings.go 2022-07-28 13:27:55.000000000 +0000 @@ -174,8 +174,10 @@ cs.shardAllocationEnabled.Set(float64(shardAllocationMap[csr.Cluster.Routing.Allocation.Enabled])) - maxShardsPerNode, err := strconv.ParseInt(csr.Cluster.MaxShardsPerNode, 10, 64) - if err == nil { - cs.maxShardsPerNode.Set(float64(maxShardsPerNode)) + if maxShardsPerNodeString, ok := csr.Cluster.MaxShardsPerNode.(string); ok { + maxShardsPerNode, err := strconv.ParseInt(maxShardsPerNodeString, 10, 64) + if err == nil { + cs.maxShardsPerNode.Set(float64(maxShardsPerNode)) + } } } diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings_response.go prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings_response.go --- prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings_response.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings_response.go 2022-07-28 13:27:55.000000000 +0000 @@ -27,8 +27,9 @@ // Cluster is a representation of a Elasticsearch Cluster Settings type Cluster struct { - Routing Routing `json:"routing"` - MaxShardsPerNode string `json:"max_shards_per_node"` + Routing Routing `json:"routing"` + // This can be either a JSON object (which does not contain the value we are interested in) or a string + MaxShardsPerNode interface{} `json:"max_shards_per_node"` } // Routing is a representation of a Elasticsearch Cluster shard routing configuration diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings_test.go prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings_test.go --- prometheus-elasticsearch-exporter-1.4.0/collector/cluster_settings_test.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/cluster_settings_test.go 2022-07-28 13:27:55.000000000 +0000 @@ -53,7 +53,7 @@ if nsr.Cluster.Routing.Allocation.Enabled != "ALL" { t.Errorf("Wrong setting for cluster routing allocation enabled") } - if nsr.Cluster.MaxShardsPerNode != "" { + if nsr.Cluster.MaxShardsPerNode != nil { t.Errorf("MaxShardsPerNode should be empty on older releases") } } @@ -61,10 +61,14 @@ } func TestClusterMaxShardsPerNode(t *testing.T) { - // Testcases created using: + // settings-7.3.0.json testcase created using: // docker run -d -p 9200:9200 elasticsearch:VERSION-alpine // curl http://localhost:9200/_cluster/settings/?include_defaults=true - files := []string{"../fixtures/settings-7.3.0.json"} + // settings-persistent-clustermaxshartspernode-7.17.json testcase created using: + // docker run -d -p 9200:9200 elasticsearch:VERSION + // curl -X PUT http://localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{"persistent":{"cluster.max_shards_per_node":1000}}' + // curl http://localhost:9200/_cluster/settings/?include_defaults=true + files := []string{"../fixtures/settings-7.3.0.json", "../fixtures/settings-persistent-clustermaxshartspernode-7.17.5.json"} for _, filename := range files { f, _ := os.Open(filename) defer f.Close() diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/data_stream.go prometheus-elasticsearch-exporter-1.5.0/collector/data_stream.go --- prometheus-elasticsearch-exporter-1.4.0/collector/data_stream.go 1970-01-01 00:00:00.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/data_stream.go 2022-07-28 13:27:55.000000000 +0000 @@ -0,0 +1,185 @@ +// Copyright 2022 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package collector + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "path" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/prometheus/client_golang/prometheus" +) + +type dataStreamMetric struct { + Type prometheus.ValueType + Desc *prometheus.Desc + Value func(dataStreamStats DataStreamStatsDataStream) float64 + Labels func(dataStreamStats DataStreamStatsDataStream) []string +} + +var ( + defaultDataStreamLabels = []string{"data_stream"} + defaultDataStreamLabelValues = func(dataStreamStats DataStreamStatsDataStream) []string { + return []string{dataStreamStats.DataStream} + } +) + +// DataStream Information Struct +type DataStream struct { + logger log.Logger + client *http.Client + url *url.URL + + up prometheus.Gauge + totalScrapes, jsonParseFailures prometheus.Counter + + dataStreamMetrics []*dataStreamMetric +} + +// NewDataStream defines DataStream Prometheus metrics +func NewDataStream(logger log.Logger, client *http.Client, url *url.URL) *DataStream { + return &DataStream{ + logger: logger, + client: client, + url: url, + + up: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: prometheus.BuildFQName(namespace, "data_stream_stats", "up"), + Help: "Was the last scrape of the ElasticSearch Data Stream stats endpoint successful.", + }), + totalScrapes: prometheus.NewCounter(prometheus.CounterOpts{ + Name: prometheus.BuildFQName(namespace, "data_stream_stats", "total_scrapes"), + Help: "Current total ElasticSearch Data STream scrapes.", + }), + jsonParseFailures: prometheus.NewCounter(prometheus.CounterOpts{ + Name: prometheus.BuildFQName(namespace, "data_stream_stats", "json_parse_failures"), + Help: "Number of errors while parsing JSON.", + }), + dataStreamMetrics: []*dataStreamMetric{ + { + Type: prometheus.CounterValue, + Desc: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "data_stream", "backing_indices_total"), + "Number of backing indices", + defaultDataStreamLabels, nil, + ), + Value: func(dataStreamStats DataStreamStatsDataStream) float64 { + return float64(dataStreamStats.BackingIndices) + }, + Labels: defaultDataStreamLabelValues, + }, + { + Type: prometheus.CounterValue, + Desc: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "data_stream", "store_size_bytes"), + "Store size of data stream", + defaultDataStreamLabels, nil, + ), + Value: func(dataStreamStats DataStreamStatsDataStream) float64 { + return float64(dataStreamStats.StoreSizeBytes) + }, + Labels: defaultDataStreamLabelValues, + }, + }, + } +} + +// Describe adds DataStream metrics descriptions +func (ds *DataStream) Describe(ch chan<- *prometheus.Desc) { + for _, metric := range ds.dataStreamMetrics { + ch <- metric.Desc + } + + ch <- ds.up.Desc() + ch <- ds.totalScrapes.Desc() + ch <- ds.jsonParseFailures.Desc() +} + +func (ds *DataStream) fetchAndDecodeDataStreamStats() (DataStreamStatsResponse, error) { + var dsr DataStreamStatsResponse + + u := *ds.url + u.Path = path.Join(u.Path, "/_data_stream/*/_stats") + res, err := ds.client.Get(u.String()) + if err != nil { + return dsr, fmt.Errorf("failed to get data stream stats health from %s://%s:%s%s: %s", + u.Scheme, u.Hostname(), u.Port(), u.Path, err) + } + + defer func() { + err = res.Body.Close() + if err != nil { + _ = level.Warn(ds.logger).Log( + "msg", "failed to close http.Client", + "err", err, + ) + } + }() + + if res.StatusCode != http.StatusOK { + return dsr, fmt.Errorf("HTTP Request failed with code %d", res.StatusCode) + } + + bts, err := ioutil.ReadAll(res.Body) + if err != nil { + ds.jsonParseFailures.Inc() + return dsr, err + } + + if err := json.Unmarshal(bts, &dsr); err != nil { + ds.jsonParseFailures.Inc() + return dsr, err + } + + return dsr, nil +} + +// Collect gets DataStream metric values +func (ds *DataStream) Collect(ch chan<- prometheus.Metric) { + ds.totalScrapes.Inc() + defer func() { + ch <- ds.up + ch <- ds.totalScrapes + ch <- ds.jsonParseFailures + }() + + dataStreamStatsResp, err := ds.fetchAndDecodeDataStreamStats() + if err != nil { + ds.up.Set(0) + _ = level.Warn(ds.logger).Log( + "msg", "failed to fetch and decode data stream stats", + "err", err, + ) + return + } + + ds.up.Set(1) + + for _, metric := range ds.dataStreamMetrics { + for _, dataStream := range dataStreamStatsResp.DataStreamStats { + fmt.Printf("Metric: %+v", dataStream) + ch <- prometheus.MustNewConstMetric( + metric.Desc, + metric.Type, + metric.Value(dataStream), + metric.Labels(dataStream)..., + ) + } + } +} diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/data_stream_response.go prometheus-elasticsearch-exporter-1.5.0/collector/data_stream_response.go --- prometheus-elasticsearch-exporter-1.4.0/collector/data_stream_response.go 1970-01-01 00:00:00.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/data_stream_response.go 2022-07-28 13:27:55.000000000 +0000 @@ -0,0 +1,38 @@ +// Copyright 2022 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package collector + +// DataStreamStatsResponse is a representation of the Data Stream stats +type DataStreamStatsResponse struct { + Shards DataStreamStatsShards `json:"_shards"` + DataStreamCount int64 `json:"data_stream_count"` + BackingIndices int64 `json:"backing_indices"` + TotalStoreSizeBytes int64 `json:"total_store_size_bytes"` + DataStreamStats []DataStreamStatsDataStream `json:"data_streams"` +} + +// DataStreamStatsShards defines data stream stats shards information structure +type DataStreamStatsShards struct { + Total int64 `json:"total"` + Successful int64 `json:"successful"` + Failed int64 `json:"failed"` +} + +// DataStreamStatsDataStream defines the structure of per data stream stats +type DataStreamStatsDataStream struct { + DataStream string `json:"data_stream"` + BackingIndices int64 `json:"backing_indices"` + StoreSizeBytes int64 `json:"store_size_bytes"` + MaximumTimestamp int64 `json:"maximum_timestamp"` +} diff -Nru prometheus-elasticsearch-exporter-1.4.0/collector/data_stream_test.go prometheus-elasticsearch-exporter-1.5.0/collector/data_stream_test.go --- prometheus-elasticsearch-exporter-1.4.0/collector/data_stream_test.go 1970-01-01 00:00:00.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/collector/data_stream_test.go 2022-07-28 13:27:55.000000000 +0000 @@ -0,0 +1,57 @@ +// Copyright 2022 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package collector + +import ( + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/go-kit/log" +) + +func TestDataStream(t *testing.T) { + tcs := map[string]string{ + "7.15.0": `{"_shards":{"total":30,"successful":30,"failed":0},"data_stream_count":2,"backing_indices":7,"total_store_size_bytes":1103028116,"data_streams":[{"data_stream":"foo","backing_indices":5,"store_size_bytes":429205396,"maximum_timestamp":1656079894000},{"data_stream":"bar","backing_indices":2,"store_size_bytes":673822720,"maximum_timestamp":1656028796000}]}`, + } + for ver, out := range tcs { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, out) + })) + defer ts.Close() + + u, err := url.Parse(ts.URL) + if err != nil { + t.Fatalf("Failed to parse URL: %s", err) + } + s := NewDataStream(log.NewNopLogger(), http.DefaultClient, u) + stats, err := s.fetchAndDecodeDataStreamStats() + if err != nil { + t.Fatalf("Failed to fetch or decode data stream stats: %s", err) + } + t.Logf("[%s] Data Stream Response: %+v", ver, stats) + dataStreamStats := stats.DataStreamStats[0] + + if dataStreamStats.BackingIndices != 5 { + t.Errorf("Bad number of backing indices") + } + + if dataStreamStats.StoreSizeBytes != 429205396 { + t.Errorf("Bad store size bytes valuee") + } + } + +} diff -Nru prometheus-elasticsearch-exporter-1.4.0/debian/changelog prometheus-elasticsearch-exporter-1.5.0/debian/changelog --- prometheus-elasticsearch-exporter-1.4.0/debian/changelog 2023-01-10 00:00:56.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/debian/changelog 2023-01-30 23:23:22.000000000 +0000 @@ -1,3 +1,11 @@ +prometheus-elasticsearch-exporter (1.5.0-1) unstable; urgency=medium + + * Team upload + * New upstream release + * Add new build-dep golang-github-aws-aws-sdk-go-v2-dev + + -- Daniel Swarbrick Mon, 30 Jan 2023 23:23:22 +0000 + prometheus-elasticsearch-exporter (1.4.0-2) unstable; urgency=medium * Team upload diff -Nru prometheus-elasticsearch-exporter-1.4.0/debian/control prometheus-elasticsearch-exporter-1.5.0/debian/control --- prometheus-elasticsearch-exporter-1.4.0/debian/control 2023-01-09 23:57:22.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/debian/control 2023-01-30 23:23:22.000000000 +0000 @@ -7,6 +7,7 @@ Build-Depends: debhelper-compat (= 13), dh-sequence-golang, golang-any, + golang-github-aws-aws-sdk-go-v2-dev, golang-github-blang-semver-dev, golang-github-go-kit-log-dev, golang-github-imdario-mergo-dev, diff -Nru prometheus-elasticsearch-exporter-1.4.0/fixtures/settings-persistent-clustermaxshartspernode-7.17.5.json prometheus-elasticsearch-exporter-1.5.0/fixtures/settings-persistent-clustermaxshartspernode-7.17.5.json --- prometheus-elasticsearch-exporter-1.4.0/fixtures/settings-persistent-clustermaxshartspernode-7.17.5.json 1970-01-01 00:00:00.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/fixtures/settings-persistent-clustermaxshartspernode-7.17.5.json 2022-07-28 13:27:55.000000000 +0000 @@ -0,0 +1,1527 @@ +{ + "persistent": { + "cluster": { + "max_shards_per_node": "1000" + } + }, + "transient": {}, + "defaults": { + "cluster": { + "max_voting_config_exclusions": "10", + "auto_shrink_voting_configuration": "true", + "election": { + "duration": "500ms", + "initial_timeout": "100ms", + "max_timeout": "10s", + "back_off_time": "100ms", + "strategy": "supports_voting_only" + }, + "no_master_block": "write", + "persistent_tasks": { + "allocation": { + "enable": "all", + "recheck_interval": "30s" + } + }, + "blocks": { + "read_only_allow_delete": "false", + "read_only": "false" + }, + "remote": { + "node": { + "attr": "" + }, + "initial_connect_timeout": "30s", + "connect": "true", + "connections_per_cluster": "3" + }, + "follower_lag": { + "timeout": "90000ms" + }, + "routing": { + "use_adaptive_replica_selection": "true", + "rebalance": { + "enable": "all" + }, + "allocation": { + "enforce_default_tier_preference": "false", + "node_concurrent_incoming_recoveries": "2", + "include": { + "_tier": "" + }, + "node_initial_primaries_recoveries": "4", + "same_shard": { + "host": "false" + }, + "total_shards_per_node": "-1", + "require": { + "_tier": "" + }, + "shard_state": { + "reroute": { + "priority": "NORMAL" + } + }, + "type": "balanced", + "disk": { + "threshold_enabled": "true", + "watermark": { + "flood_stage.frozen.max_headroom": "20GB", + "flood_stage": "95%", + "high": "90%", + "low": "85%", + "enable_for_single_data_node": "false", + "flood_stage.frozen": "95%" + }, + "include_relocations": "true", + "reroute_interval": "60s" + }, + "awareness": { + "attributes": [] + }, + "balance": { + "index": "0.55", + "threshold": "1.0", + "shard": "0.45" + }, + "enable": "all", + "node_concurrent_outgoing_recoveries": "2", + "allow_rebalance": "indices_all_active", + "cluster_concurrent_rebalance": "2", + "node_concurrent_recoveries": "2", + "exclude": { + "_tier": "" + } + } + }, + "indices": { + "tombstones": { + "size": "500" + }, + "close": { + "enable": "true" + } + }, + "nodes": { + "reconnect_interval": "10s" + }, + "service": { + "master_service_starvation_logging_threshold": "5m", + "slow_master_task_logging_threshold": "10s", + "slow_task_logging_threshold": "30s" + }, + "publish": { + "timeout": "30000ms", + "info_timeout": "10000ms" + }, + "name": "docker-cluster", + "fault_detection": { + "leader_check": { + "interval": "1000ms", + "timeout": "10000ms", + "retry_count": "3" + }, + "follower_check": { + "interval": "1000ms", + "timeout": "10000ms", + "retry_count": "3" + } + }, + "join": { + "timeout": "60000ms" + }, + "max_shards_per_node": { + "frozen": "3000" + }, + "initial_master_nodes": [], + "deprecation_indexing": { + "enabled": "true", + "x_opaque_id_used": { + "enabled": "true" + } + }, + "snapshot": { + "info": { + "max_concurrent_fetches": "5" + } + }, + "info": { + "update": { + "interval": "30s", + "timeout": "15s" + } + } + }, + "stack": { + "templates": { + "enabled": "true" + } + }, + "logger": { + "level": "INFO" + }, + "bootstrap": { + "memory_lock": "false", + "system_call_filter": "true", + "ctrlhandler": "true" + }, + "processors": "12", + "ingest": { + "user_agent": { + "cache_size": "1000" + }, + "geoip": { + "cache_size": "1000", + "downloader": { + "enabled": "true", + "endpoint": "https://geoip.elastic.co/v1/database", + "poll": { + "interval": "3d" + } + } + }, + "grok": { + "watchdog": { + "max_execution_time": "1s", + "interval": "1s" + } + } + }, + "network": { + "host": [ + "0.0.0.0" + ], + "tcp": { + "reuse_address": "true", + "keep_count": "-1", + "connect_timeout": "30s", + "keep_interval": "-1", + "no_delay": "true", + "keep_alive": "true", + "receive_buffer_size": "-1b", + "keep_idle": "-1", + "send_buffer_size": "-1b" + }, + "bind_host": [ + "0.0.0.0" + ], + "server": "true", + "breaker": { + "inflight_requests": { + "limit": "100%", + "overhead": "2.0" + } + }, + "publish_host": [ + "0.0.0.0" + ] + }, + "pidfile": "", + "searchable_snapshots": { + "blob_cache": { + "periodic_cleanup": { + "interval": "1h", + "batch_size": "100", + "pit_keep_alive": "10m", + "retention_period": "1h" + } + } + }, + "path": { + "data": [], + "logs": "/usr/share/elasticsearch/logs", + "shared_data": "", + "home": "/usr/share/elasticsearch", + "repo": [] + }, + "search": { + "default_search_timeout": "-1", + "max_open_scroll_context": "500", + "max_buckets": "65536", + "max_async_search_response_size": "-1b", + "keep_alive_interval": "1m", + "remote": { + "node": { + "attr": "" + }, + "initial_connect_timeout": "30s", + "connect": "true", + "connections_per_cluster": "3" + }, + "max_keep_alive": "24h", + "highlight": { + "term_vector_multi_value": "true" + }, + "default_allow_partial_results": "true", + "low_level_cancellation": "true", + "allow_expensive_queries": "true", + "default_keep_alive": "5m", + "aggs": { + "rewrite_to_filter_by_filter": "true" + } + }, + "security": { + "manager": { + "filter_bad_defaults": "true" + } + }, + "ccr": { + "wait_for_metadata_timeout": "60s", + "indices": { + "recovery": { + "recovery_activity_timeout": "60s", + "chunk_size": "1mb", + "internal_action_timeout": "60s", + "max_bytes_per_sec": "40mb", + "max_concurrent_file_chunks": "5" + } + }, + "auto_follow": { + "wait_for_metadata_timeout": "60s" + } + }, + "repositories": { + "fs": { + "compress": "false", + "chunk_size": "9223372036854775807b", + "location": "" + }, + "url": { + "supported_protocols": [ + "http", + "https", + "ftp", + "file", + "jar" + ], + "allowed_urls": [], + "url": "http:" + } + }, + "action": { + "auto_create_index": "true", + "search": { + "pre_filter_shard_size": { + "default": "128" + }, + "shard_count": { + "limit": "9223372036854775807" + } + }, + "destructive_requires_name": "false" + }, + "client": { + "type": "node", + "transport": { + "ignore_cluster_name": "false", + "nodes_sampler_interval": "5s", + "sniff": "false", + "ping_timeout": "5s" + } + }, + "enrich": { + "max_force_merge_attempts": "3", + "cleanup_period": "15m", + "fetch_size": "10000", + "cache_size": "1000", + "coordinator_proxy": { + "max_concurrent_requests": "8", + "max_lookups_per_request": "128", + "queue_capacity": "1024" + }, + "max_concurrent_policy_executions": "50" + }, + "xpack": { + "flattened": { + "enabled": "true" + }, + "watcher": { + "execution": { + "scroll": { + "size": "0", + "timeout": "" + }, + "default_throttle_period": "5s" + }, + "internal": { + "ops": { + "bulk": { + "default_timeout": "" + }, + "index": { + "default_timeout": "" + }, + "search": { + "default_timeout": "" + } + } + }, + "thread_pool": { + "queue_size": "1000", + "size": "50" + }, + "index": { + "rest": { + "direct_access": "" + } + }, + "use_ilm_index_management": "true", + "history": { + "cleaner_service": { + "enabled": "true" + } + }, + "trigger": { + "schedule": { + "ticker": { + "tick_interval": "500ms" + } + } + }, + "enabled": "true", + "input": { + "search": { + "default_timeout": "" + } + }, + "encrypt_sensitive_data": "false", + "transform": { + "search": { + "default_timeout": "" + } + }, + "stop": { + "timeout": "30s" + }, + "watch": { + "scroll": { + "size": "0" + } + }, + "bulk": { + "concurrent_requests": "0", + "flush_interval": "1s", + "size": "1mb", + "actions": "1" + }, + "actions": { + "bulk": { + "default_timeout": "" + }, + "index": { + "default_timeout": "" + } + } + }, + "eql": { + "enabled": "true" + }, + "data_frame": { + "enabled": "true" + }, + "ilm": { + "enabled": "true" + }, + "monitoring": { + "migration": { + "decommission_alerts": "false" + }, + "collection": { + "cluster": { + "stats": { + "timeout": "10s" + } + }, + "node": { + "stats": { + "timeout": "10s" + } + }, + "indices": [], + "ccr": { + "stats": { + "timeout": "10s" + } + }, + "enrich": { + "stats": { + "timeout": "10s" + } + }, + "index": { + "stats": { + "timeout": "10s" + }, + "recovery": { + "active_only": "false", + "timeout": "10s" + } + }, + "interval": "10s", + "enabled": "false", + "ml": { + "job": { + "stats": { + "timeout": "10s" + } + } + } + }, + "history": { + "duration": "168h" + }, + "elasticsearch": { + "collection": { + "enabled": "true" + } + }, + "enabled": "true" + }, + "graph": { + "enabled": "true" + }, + "searchable": { + "snapshot": { + "allocate_on_rolling_restart": "false", + "cache": { + "range_size": "32mb", + "sync": { + "max_files": "10000", + "interval": "60s", + "shutdown_timeout": "10s" + }, + "recovery_range_size": "128kb" + }, + "shared_cache": { + "recovery_range_size": "128kb", + "region_size": "16mb", + "size": "0", + "min_time_delta": "60s", + "decay": { + "interval": "60s" + }, + "size.max_headroom": "-1", + "range_size": "16mb", + "max_freq": "100" + } + } + }, + "rollup": { + "enabled": "true", + "task_thread_pool": { + "queue_size": "-1", + "size": "1" + } + }, + "sql": { + "enabled": "true" + }, + "searchable_snapshots": { + "cache_fetch_async_thread_pool": { + "core": "0", + "max": "36", + "keep_alive": "30s" + }, + "cache_prewarming_thread_pool": { + "core": "0", + "max": "16", + "keep_alive": "30s" + } + }, + "license": { + "upload": { + "types": [ + "standard", + "gold", + "platinum", + "enterprise", + "trial" + ] + }, + "self_generated": { + "type": "basic" + } + }, + "logstash": { + "enabled": "true" + }, + "notification": { + "pagerduty": { + "default_account": "" + }, + "email": { + "account": { + "domain_allowlist": [ + "*" + ] + }, + "default_account": "", + "html": { + "sanitization": { + "allow": [ + "body", + "head", + "_tables", + "_links", + "_blocks", + "_formatting", + "img:embedded" + ], + "disallow": [], + "enabled": "true" + } + } + }, + "reporting": { + "retries": "40", + "warning": { + "enabled": "true" + }, + "interval": "15s" + }, + "jira": { + "default_account": "" + }, + "slack": { + "default_account": "" + } + }, + "security": { + "operator_privileges": { + "enabled": "false" + }, + "dls_fls": { + "enabled": "true" + }, + "dls": { + "bitset": { + "cache": { + "size": "10%", + "ttl": "2h" + } + } + }, + "transport": { + "filter": { + "allow": [], + "deny": [], + "enabled": "true" + }, + "ssl": { + "enabled": "false" + } + }, + "ssl": { + "diagnose": { + "trust": "true" + } + }, + "enabled": "true", + "crypto": { + "thread_pool": { + "queue_size": "1000", + "size": "6" + } + }, + "filter": { + "always_allow_bound_address": "true" + }, + "encryption": { + "algorithm": "AES/CTR/NoPadding" + }, + "audit": { + "enabled": "false", + "logfile": { + "emit_node_id": "true", + "emit_node_host_name": "false", + "emit_node_name": "false", + "events": { + "emit_request_body": "false", + "include": [ + "ACCESS_DENIED", + "ACCESS_GRANTED", + "ANONYMOUS_ACCESS_DENIED", + "AUTHENTICATION_FAILED", + "CONNECTION_DENIED", + "TAMPERED_REQUEST", + "RUN_AS_DENIED", + "RUN_AS_GRANTED", + "SECURITY_CONFIG_CHANGE" + ], + "exclude": [] + }, + "emit_node_host_address": "false" + } + }, + "authc": { + "password_hashing": { + "algorithm": "bcrypt" + }, + "success_cache": { + "size": "10000", + "enabled": "true", + "expire_after_access": "1h" + }, + "api_key": { + "doc_cache": { + "ttl": "5m" + }, + "cache": { + "hash_algo": "ssha256", + "max_keys": "25000", + "ttl": "24h" + }, + "delete": { + "interval": "24h", + "timeout": "-1" + }, + "enabled": "false", + "hashing": { + "algorithm": "pbkdf2" + } + }, + "anonymous": { + "authz_exception": "true", + "roles": [], + "username": "_anonymous" + }, + "run_as": { + "enabled": "true" + }, + "reserved_realm": { + "enabled": "true" + }, + "service_token": { + "cache": { + "hash_algo": "ssha256", + "max_tokens": "100000", + "ttl": "20m" + } + }, + "token": { + "delete": { + "interval": "30m", + "timeout": "-1" + }, + "enabled": "false", + "thread_pool": { + "queue_size": "1000", + "size": "1" + }, + "timeout": "20m" + } + }, + "fips_mode": { + "enabled": "false" + }, + "encryption_key": { + "length": "128", + "algorithm": "AES" + }, + "http": { + "filter": { + "allow": [], + "deny": [], + "enabled": "true" + }, + "ssl": { + "enabled": "false" + } + }, + "automata": { + "max_determinized_states": "100000", + "cache": { + "size": "10000", + "ttl": "48h", + "enabled": "true" + } + }, + "user": null, + "authz": { + "timer": { + "indices": { + "enabled": "false", + "threshold": { + "warn": "200ms", + "debug": "20ms", + "info": "100ms" + } + } + }, + "store": { + "privileges": { + "cache": { + "ttl": "24h", + "max_size": "10000" + } + }, + "roles": { + "index": { + "cache": { + "ttl": "20m", + "max_size": "10000" + } + }, + "cache": { + "max_size": "10000" + }, + "negative_lookup_cache": { + "max_size": "10000" + }, + "field_permissions": { + "cache": { + "max_size_in_bytes": "104857600" + } + } + } + } + } + }, + "transform": { + "num_transform_failure_retries": "10", + "enabled": "true" + }, + "vectors": { + "enabled": "true" + }, + "ccr": { + "enabled": "true", + "ccr_thread_pool": { + "queue_size": "100", + "size": "32" + } + }, + "idp": { + "privileges": { + "application": "", + "cache": { + "size": "100", + "ttl": "90m" + } + }, + "metadata": { + "signing": { + "keystore": { + "alias": "" + } + } + }, + "slo_endpoint": { + "post": "https:", + "redirect": "https:" + }, + "defaults": { + "nameid_format": "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", + "authn_expiry": "5m" + }, + "allowed_nameid_formats": [ + "urn:oasis:names:tc:SAML:2.0:nameid-format:transient" + ], + "contact": { + "given_name": "", + "email": "", + "surname": "" + }, + "organization": { + "display_name": "", + "name": "", + "url": "http:" + }, + "sso_endpoint": { + "post": "https:", + "redirect": "https:" + }, + "entity_id": "", + "signing": { + "keystore": { + "alias": "" + } + }, + "sp": { + "cache": { + "size": "1000", + "ttl": "60m" + }, + "wildcard": { + "path": "wildcard_services.json" + } + }, + "enabled": "false" + }, + "slm": { + "enabled": "true" + }, + "enrich": { + "enabled": "true" + }, + "http": { + "tcp": { + "keep_alive": "true" + }, + "default_connection_timeout": "10s", + "proxy": { + "host": "", + "scheme": "", + "port": "0" + }, + "connection_pool_ttl": "-1", + "max_response_size": "10mb", + "whitelist": [ + "*" + ], + "default_read_timeout": "10s" + }, + "autoscaling": { + "memory": { + "monitor": { + "timeout": "15s" + } + } + }, + "ml": { + "utility_thread_pool": { + "core": "1", + "max": "2048", + "keep_alive": "10m" + }, + "max_anomaly_records": "500", + "enable_config_migration": "true", + "max_open_jobs": "512", + "delayed_data_check_freq": "15m", + "min_disk_space_off_heap": "5gb", + "use_auto_machine_memory_percent": "false", + "inference_model": { + "cache_size": "40%", + "time_to_live": "5m" + }, + "nightly_maintenance_requests_per_second": "-1.0", + "node_concurrent_job_allocations": "2", + "max_model_memory_limit": "0b", + "enabled": "true", + "max_lazy_ml_nodes": "0", + "max_ml_node_size": "0b", + "max_machine_memory_percent": "30", + "persist_results_max_retries": "20", + "autodetect_process": "true", + "datafeed_thread_pool": { + "core": "1", + "max": "512", + "keep_alive": "1m" + }, + "max_inference_processors": "50", + "process_connect_timeout": "10s", + "job_comms_thread_pool": { + "core": "4", + "max": "2048", + "keep_alive": "1m" + } + } + }, + "rest": { + "action": { + "multi": { + "allow_explicit_index": "true" + } + } + }, + "cache": { + "recycler": { + "page": { + "limit": { + "heap": "10%" + }, + "type": "CONCURRENT", + "weight": { + "longs": "1.0", + "ints": "1.0", + "bytes": "1.0", + "objects": "0.1" + } + } + } + }, + "async_search": { + "index_cleanup_interval": "1h" + }, + "reindex": { + "remote": { + "whitelist": [] + } + }, + "resource": { + "reload": { + "enabled": "true", + "interval": { + "low": "60s", + "high": "5s", + "medium": "30s" + } + } + }, + "thread_pool": { + "force_merge": { + "queue_size": "-1", + "size": "1" + }, + "search_coordination": { + "queue_size": "1000", + "size": "5" + }, + "snapshot_meta": { + "core": "1", + "max": "36", + "keep_alive": "30s" + }, + "fetch_shard_started": { + "core": "1", + "max": "24", + "keep_alive": "5m" + }, + "listener": { + "queue_size": "-1", + "size": "6" + }, + "estimated_time_interval.warn_threshold": "5s", + "scheduler": { + "warn_threshold": "5s" + }, + "search": { + "max_queue_size": "1000", + "queue_size": "1000", + "size": "19", + "auto_queue_frame_size": "2000", + "target_response_time": "1s", + "min_queue_size": "1000" + }, + "fetch_shard_store": { + "core": "1", + "max": "24", + "keep_alive": "5m" + }, + "flush": { + "core": "1", + "max": "5", + "keep_alive": "5m" + }, + "vectortile": { + "queue_size": "-1", + "size": "1" + }, + "get": { + "queue_size": "1000", + "size": "12" + }, + "system_read": { + "queue_size": "2000", + "size": "5" + }, + "system_critical_read": { + "queue_size": "2000", + "size": "5" + }, + "estimated_time_interval": "200ms", + "write": { + "queue_size": "10000", + "size": "12" + }, + "system_critical_write": { + "queue_size": "1500", + "size": "5" + }, + "refresh": { + "core": "1", + "max": "6", + "keep_alive": "5m" + }, + "system_write": { + "queue_size": "1000", + "size": "5" + }, + "generic": { + "core": "4", + "max": "128", + "keep_alive": "30s" + }, + "warmer": { + "core": "1", + "max": "5", + "keep_alive": "5m" + }, + "auto_complete": { + "queue_size": "100", + "size": "3" + }, + "management": { + "core": "1", + "max": "5", + "keep_alive": "5m" + }, + "analyze": { + "queue_size": "16", + "size": "1" + }, + "snapshot": { + "core": "1", + "max": "5", + "keep_alive": "5m" + }, + "search_throttled": { + "max_queue_size": "100", + "queue_size": "100", + "size": "1", + "auto_queue_frame_size": "200", + "target_response_time": "1s", + "min_queue_size": "100" + } + }, + "index": { + "codec": "default", + "recovery": { + "type": "" + }, + "store": { + "type": "", + "fs": { + "fs_lock": "native" + }, + "preload": [], + "snapshot": { + "uncached_chunk_size": "-1b", + "cache": { + "excluded_file_types": [] + } + } + } + }, + "monitor": { + "jvm": { + "gc": { + "enabled": "true", + "overhead": { + "warn": "50", + "debug": "10", + "info": "25" + }, + "refresh_interval": "1s" + }, + "refresh_interval": "1s" + }, + "process": { + "refresh_interval": "1s" + }, + "os": { + "refresh_interval": "1s" + }, + "fs": { + "health": { + "enabled": "true", + "refresh_interval": "120s", + "slow_path_logging_threshold": "5s" + }, + "refresh_interval": "1s" + } + }, + "runtime_fields": { + "grok": { + "watchdog": { + "max_execution_time": "1s", + "interval": "1s" + } + } + }, + "transport": { + "tcp": { + "reuse_address": "true", + "keep_count": "-1", + "connect_timeout": "30s", + "keep_interval": "-1", + "compress": "FALSE", + "port": "9300-9400", + "no_delay": "true", + "keep_alive": "true", + "receive_buffer_size": "-1b", + "keep_idle": "-1", + "send_buffer_size": "-1b" + }, + "bind_host": [], + "connect_timeout": "30s", + "compress": "FALSE", + "ping_schedule": "-1", + "connections_per_node": { + "recovery": "2", + "state": "1", + "bulk": "3", + "reg": "6", + "ping": "1" + }, + "tracer": { + "include": [], + "exclude": [ + "internal:discovery/zen/fd*", + "internal:coordination/fault_detection/*", + "cluster:monitor/nodes/liveness" + ] + }, + "type": "security4", + "slow_operation_logging_threshold": "5s", + "type.default": "netty4", + "features": { + "x-pack": "true" + }, + "port": "9300-9400", + "compression_scheme": "DEFLATE", + "host": [], + "publish_port": "-1", + "tcp_no_delay": "true", + "publish_host": [], + "netty": { + "receive_predictor_size": "64kb", + "receive_predictor_max": "64kb", + "worker_count": "12", + "receive_predictor_min": "64kb", + "boss_count": "1" + } + }, + "deprecation": { + "skip_deprecated_settings": [] + }, + "script": { + "allowed_contexts": [], + "max_compilations_rate": "150/5m", + "cache": { + "max_size": "3000", + "expire": "0ms" + }, + "painless": { + "regex": { + "enabled": "limited", + "limit-factor": "6" + } + }, + "max_size_in_bytes": "65535", + "allowed_types": [], + "disable_max_compilations_rate": "false" + }, + "indexing_pressure": { + "memory": { + "limit": "10%" + } + }, + "node": { + "data": "true", + "bandwidth": { + "recovery": { + "disk": { + "write": "-1", + "read": "-1" + }, + "operator": { + "factor.read": "0.4", + "factor.write": "0.4", + "factor": "0.4", + "factor.max_overcommit": "100.0" + }, + "network": "-1" + } + }, + "roles": [ + "data_frozen", + "data_warm", + "transform", + "data", + "remote_cluster_client", + "data_cold", + "data_content", + "data_hot", + "ingest", + "master", + "ml" + ], + "max_local_storage_nodes": "1", + "processors": "12", + "store": { + "allow_mmap": "true" + }, + "ingest": "true", + "master": "true", + "pidfile": "", + "transform": "true", + "remote_cluster_client": "true", + "enable_lucene_segment_infos_trace": "false", + "local_storage": "true", + "name": "36ac32055483", + "id": { + "seed": "0" + }, + "voting_only": "false", + "attr": { + "transform": { + "node": "true" + }, + "xpack": { + "installed": "true" + }, + "ml": { + "max_jvm_size": "8392802304", + "machine_memory": "16784928768", + "max_open_jobs": "512" + } + }, + "portsfile": "false", + "ml": "true" + }, + "indices": { + "replication": { + "retry_timeout": "60s", + "initial_retry_backoff_bound": "50ms" + }, + "cache": { + "cleanup_interval": "1m" + }, + "mapping": { + "dynamic_timeout": "30s", + "max_in_flight_updates": "10" + }, + "memory": { + "interval": "5s", + "max_index_buffer_size": "-1", + "shard_inactive_time": "5m", + "index_buffer_size": "10%", + "min_index_buffer_size": "48mb" + }, + "breaker": { + "request": { + "limit": "60%", + "type": "memory", + "overhead": "1.0" + }, + "total": { + "limit": "95%", + "use_real_memory": "true" + }, + "accounting": { + "limit": "100%", + "overhead": "1.0" + }, + "fielddata": { + "limit": "40%", + "type": "memory", + "overhead": "1.03" + }, + "type": "hierarchy" + }, + "query": { + "bool": { + "max_nested_depth": "20", + "max_clause_count": "1024" + }, + "query_string": { + "analyze_wildcard": "false", + "allowLeadingWildcard": "true" + } + }, + "id_field_data": { + "enabled": "true" + }, + "recovery": { + "internal_action_retry_timeout": "1m", + "recovery_activity_timeout": "1800000ms", + "retry_delay_network": "5s", + "internal_action_timeout": "15m", + "max_concurrent_snapshot_file_downloads_per_node": "25", + "retry_delay_state_sync": "500ms", + "max_concurrent_snapshot_file_downloads": "5", + "internal_action_long_timeout": "1800000ms", + "max_concurrent_operations": "1", + "use_snapshots": "true", + "max_bytes_per_sec": "40mb", + "max_concurrent_file_chunks": "2" + }, + "requests": { + "cache": { + "size": "1%", + "expire": "0ms" + } + }, + "store": { + "delete": { + "shard": { + "timeout": "30s" + } + } + }, + "analysis": { + "hunspell": { + "dictionary": { + "ignore_case": "false", + "lazy": "false" + } + } + }, + "queries": { + "cache": { + "count": "10000", + "size": "10%", + "all_segments": "false" + } + }, + "lifecycle": { + "history_index_enabled": "true", + "poll_interval": "10m", + "step": { + "master_timeout": "30s" + } + }, + "fielddata": { + "cache": { + "size": "-1b" + } + } + }, + "plugin": { + "mandatory": [] + }, + "slm": { + "minimum_interval": "15m", + "retention_schedule": "0 30 1 * * ?", + "retention_duration": "1h", + "history_index_enabled": "true" + }, + "discovery": { + "seed_hosts": [], + "unconfigured_bootstrap_timeout": "3s", + "request_peers_timeout": "3000ms", + "zen": { + "commit_timeout": "30s", + "no_master_block": "write", + "join_retry_delay": "100ms", + "join_retry_attempts": "3", + "ping": { + "unicast": { + "concurrent_connects": "10", + "hosts": [], + "hosts.resolve_timeout": "5s" + } + }, + "master_election": { + "ignore_non_master_pings": "false", + "wait_for_joins_timeout": "30000ms" + }, + "send_leave_request": "true", + "ping_timeout": "3s", + "bwc_ping_timeout": "3s", + "join_timeout": "60000ms", + "publish_diff": { + "enable": "true" + }, + "publish": { + "max_pending_cluster_states": "25" + }, + "minimum_master_nodes": "-1", + "unsafe_rolling_upgrades_enabled": "true", + "hosts_provider": [], + "publish_timeout": "30s", + "fd": { + "connect_on_network_disconnect": "false", + "ping_interval": "1s", + "ping_retries": "3", + "register_connection_listener": "true", + "ping_timeout": "30s" + }, + "max_pings_from_another_master": "3" + }, + "initial_state_timeout": "30s", + "cluster_formation_warning_timeout": "10000ms", + "seed_providers": [], + "type": "single-node", + "seed_resolver": { + "max_concurrent_resolvers": "10", + "timeout": "5s" + }, + "find_peers_interval": "1000ms", + "probe": { + "connect_timeout": "30s", + "handshake_timeout": "30s" + } + }, + "http": { + "cors": { + "max-age": "1728000", + "allow-origin": "", + "allow-headers": "X-Requested-With,Content-Type,Content-Length", + "allow-credentials": "false", + "allow-methods": "OPTIONS,HEAD,GET,POST,PUT,DELETE", + "enabled": "false" + }, + "max_chunk_size": "8kb", + "compression_level": "3", + "max_initial_line_length": "4kb", + "type": "security4", + "pipelining": { + "max_events": "10000" + }, + "type.default": "netty4", + "content_type": { + "required": "true" + }, + "host": [], + "publish_port": "-1", + "read_timeout": "0ms", + "max_content_length": "100mb", + "netty": { + "receive_predictor_size": "64kb", + "max_composite_buffer_components": "69905", + "worker_count": "0" + }, + "tcp": { + "reuse_address": "true", + "keep_count": "-1", + "keep_interval": "-1", + "no_delay": "true", + "keep_alive": "true", + "receive_buffer_size": "-1b", + "keep_idle": "-1", + "send_buffer_size": "-1b" + }, + "bind_host": [], + "client_stats": { + "enabled": "true", + "closed_channels": { + "max_age": "5m", + "max_count": "10000" + } + }, + "reset_cookies": "false", + "max_warning_header_count": "-1", + "tracer": { + "include": [], + "exclude": [] + }, + "max_warning_header_size": "-1b", + "detailed_errors": { + "enabled": "true" + }, + "port": "9200-9300", + "max_header_size": "8kb", + "tcp_no_delay": "true", + "compression": "true", + "publish_host": [] + }, + "gateway": { + "recover_after_master_nodes": "0", + "expected_nodes": "-1", + "recover_after_data_nodes": "-1", + "expected_data_nodes": "-1", + "write_dangling_indices_info": "true", + "slow_write_logging_threshold": "10s", + "recover_after_time": "0ms", + "expected_master_nodes": "-1", + "recover_after_nodes": "-1", + "auto_import_dangling_indices": "false" + }, + "snapshot": { + "refresh_repo_uuid_on_restore": "true", + "max_concurrent_operations": "1000" + } + } +} diff -Nru prometheus-elasticsearch-exporter-1.4.0/go.mod prometheus-elasticsearch-exporter-1.5.0/go.mod --- prometheus-elasticsearch-exporter-1.4.0/go.mod 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/go.mod 2022-07-28 13:27:55.000000000 +0000 @@ -3,17 +3,28 @@ go 1.17 require ( - github.com/blang/semver v3.5.2-0.20180723201105-3c1074078d32+incompatible + github.com/aws/aws-sdk-go-v2 v1.16.7 + github.com/aws/aws-sdk-go-v2/config v1.15.14 + github.com/blang/semver/v4 v4.0.0 github.com/go-kit/log v0.2.1 github.com/imdario/mergo v0.3.13 github.com/prometheus/client_golang v1.12.2 - github.com/prometheus/common v0.35.0 + github.com/prometheus/common v0.37.0 gopkg.in/alecthomas/kingpin.v2 v2.2.6 ) require ( github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.12.9 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.12 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 // indirect + github.com/aws/smithy-go v1.12.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect diff -Nru prometheus-elasticsearch-exporter-1.4.0/go.sum prometheus-elasticsearch-exporter-1.5.0/go.sum --- prometheus-elasticsearch-exporter-1.4.0/go.sum 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/go.sum 2022-07-28 13:27:55.000000000 +0000 @@ -40,12 +40,34 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/aws/aws-sdk-go-v2 v1.16.7 h1:zfBwXus3u14OszRxGcqCDS4MfMCv10e8SMJ2r8Xm0Ns= +github.com/aws/aws-sdk-go-v2 v1.16.7/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw= +github.com/aws/aws-sdk-go-v2/config v1.15.14 h1:+BqpqlydTq4c2et9Daury7gE+o67P4lbk7eybiCBNc4= +github.com/aws/aws-sdk-go-v2/config v1.15.14/go.mod h1:CQBv+VVv8rR5z2xE+Chdh5m+rFfsqeY4k0veEZeq6QM= +github.com/aws/aws-sdk-go-v2/credentials v1.12.9 h1:DloAJr0/jbvm0iVRFDFh8GlWxrOd9XKyX82U+dfVeZs= +github.com/aws/aws-sdk-go-v2/credentials v1.12.9/go.mod h1:2Vavxl1qqQXJ8MUcQZTsIEW8cwenFCWYXtLRPba3L/o= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 h1:VfBdn2AxwMbFyJN/lF/xuT3SakomJ86PZu3rCxb5K0s= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8/go.mod h1:oL1Q3KuCq1D4NykQnIvtRiBGLUXhcpY5pl6QZB2XEPU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 h1:2C0pYHcUBmdzPj+EKNC4qj97oK6yjrUhc1KoSodglvk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14/go.mod h1:kdjrMwHwrC3+FsKhNcCMJ7tUVj/8uSD5CZXeQ4wV6fM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 h1:2J+jdlBJWEmTyAwC82Ym68xCykIvnSnIN18b8xHGlcc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8/go.mod h1:ZIV8GYoC6WLBW5KGs+o4rsc65/ozd+eQ0L31XF5VDwk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 h1:QquxR7NH3ULBsKC+NoTpilzbKKS+5AELfNREInbhvas= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15/go.mod h1:Tkrthp/0sNBShQQsamR7j/zY4p19tVTAs+nnqhH6R3c= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8 h1:oKnAXxSF2FUvfgw8uzU/v9OTYorJJZ8eBmWhr9TWVVQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8/go.mod h1:rDVhIMAX9N2r8nWxDUlbubvvaFMnfsm+3jAV7q+rpM4= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.12 h1:760bUnTX/+d693FT6T6Oa7PZHfEQT9XMFZeM5IQIB0A= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.12/go.mod h1:MO4qguFjs3wPGcCSpQ7kOFTwRvb+eu+fn+1vKleGHUk= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 h1:yOfILxyjmtr2ubRkRJldlHDFBhf5vw4CzhbwWIBmimQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.9/go.mod h1:O1IvkYxr+39hRf960Us6j0x1P8pDqhTX+oXM5kQNl/Y= +github.com/aws/smithy-go v1.12.0 h1:gXpeZel/jPoWQ7OEmLIgCUnhkFftqNfwWUwAHSlp1v0= +github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/blang/semver v3.5.2-0.20180723201105-3c1074078d32+incompatible h1:8fBbhRkI5/0ocLFbrhPgnGUm0ogc+Gko1cRodPWDKX4= -github.com/blang/semver v3.5.2-0.20180723201105-3c1074078d32+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -116,8 +138,9 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -136,6 +159,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -182,8 +207,8 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= -github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -385,7 +410,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -473,6 +497,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff -Nru prometheus-elasticsearch-exporter-1.4.0/main.go prometheus-elasticsearch-exporter-1.5.0/main.go --- prometheus-elasticsearch-exporter-1.4.0/main.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/main.go 2022-07-28 13:27:55.000000000 +0000 @@ -26,6 +26,7 @@ "github.com/go-kit/log/level" "github.com/prometheus-community/elasticsearch_exporter/collector" "github.com/prometheus-community/elasticsearch_exporter/pkg/clusterinfo" + "github.com/prometheus-community/elasticsearch_exporter/pkg/roundtripper" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/version" @@ -88,6 +89,9 @@ esExportSLM = kingpin.Flag("es.slm", "Export stats for SLM snapshots."). Default("false").Bool() + esExportDataStream = kingpin.Flag("es.data_stream", + "Export stas for Data Streams."). + Default("false").Bool() esClusterInfoInterval = kingpin.Flag("es.clusterinfo.interval", "Cluster info update interval for the cluster label"). Default("5m").Duration() @@ -112,6 +116,9 @@ logOutput = kingpin.Flag("log.output", "Sets the log output. Valid outputs are stdout and stderr"). Default("stdout").String() + awsRegion = kingpin.Flag("aws.region", + "Region for AWS elasticsearch"). + Default("").String() ) kingpin.Version(version.Print(name)) @@ -160,6 +167,14 @@ Transport: httpTransport, } + if *awsRegion != "" { + httpClient.Transport, err = roundtripper.NewAWSSigningTransport(httpTransport, *awsRegion, logger) + if err != nil { + _ = level.Error(logger).Log("msg", "failed to create AWS transport", "err", err) + os.Exit(1) + } + } + // version metric prometheus.MustRegister(version.NewCollector(name)) @@ -201,6 +216,10 @@ prometheus.MustRegister(collector.NewSLM(logger, httpClient, esURL)) } + if *esExportDataStream { + prometheus.MustRegister(collector.NewDataStream(logger, httpClient, esURL)) + } + if *esExportClusterSettings { prometheus.MustRegister(collector.NewClusterSettings(logger, httpClient, esURL)) } diff -Nru prometheus-elasticsearch-exporter-1.4.0/pkg/clusterinfo/clusterinfo_response.go prometheus-elasticsearch-exporter-1.5.0/pkg/clusterinfo/clusterinfo_response.go --- prometheus-elasticsearch-exporter-1.4.0/pkg/clusterinfo/clusterinfo_response.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/pkg/clusterinfo/clusterinfo_response.go 2022-07-28 13:27:55.000000000 +0000 @@ -14,7 +14,7 @@ package clusterinfo import ( - "github.com/blang/semver" + "github.com/blang/semver/v4" ) // Response is the cluster info retrievable from the / endpoint diff -Nru prometheus-elasticsearch-exporter-1.4.0/pkg/clusterinfo/clusterinfo_test.go prometheus-elasticsearch-exporter-1.5.0/pkg/clusterinfo/clusterinfo_test.go --- prometheus-elasticsearch-exporter-1.4.0/pkg/clusterinfo/clusterinfo_test.go 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/pkg/clusterinfo/clusterinfo_test.go 2022-07-28 13:27:55.000000000 +0000 @@ -27,7 +27,7 @@ "github.com/go-kit/log" - "github.com/blang/semver" + "github.com/blang/semver/v4" ) const ( diff -Nru prometheus-elasticsearch-exporter-1.4.0/pkg/roundtripper/roundtripper.go prometheus-elasticsearch-exporter-1.5.0/pkg/roundtripper/roundtripper.go --- prometheus-elasticsearch-exporter-1.4.0/pkg/roundtripper/roundtripper.go 1970-01-01 00:00:00.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/pkg/roundtripper/roundtripper.go 2022-07-28 13:27:55.000000000 +0000 @@ -0,0 +1,95 @@ +// Copyright 2022 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package roundtripper + +import ( + "bytes" + "context" + "crypto/sha256" + "encoding/hex" + "io" + "io/ioutil" + "net/http" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/go-kit/log" + "github.com/go-kit/log/level" +) + +const ( + service = "es" +) + +type AWSSigningTransport struct { + t http.RoundTripper + creds aws.Credentials + region string + log log.Logger +} + +func NewAWSSigningTransport(transport http.RoundTripper, region string, log log.Logger) (*AWSSigningTransport, error) { + cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region)) + if err != nil { + _ = level.Error(log).Log("msg", "fail to load aws default config", "err", err) + return nil, err + } + + creds, err := cfg.Credentials.Retrieve(context.Background()) + if err != nil { + _ = level.Error(log).Log("msg", "fail to retrive aws credentials", "err", err) + return nil, err + } + + return &AWSSigningTransport{ + t: transport, + region: region, + creds: creds, + log: log, + }, err +} + +func (a *AWSSigningTransport) RoundTrip(req *http.Request) (*http.Response, error) { + signer := v4.NewSigner() + payloadHash, newReader, err := hashPayload(req.Body) + if err != nil { + _ = level.Error(a.log).Log("msg", "fail to hash request body", "err", err) + return nil, err + } + req.Body = newReader + err = signer.SignHTTP(context.Background(), a.creds, req, payloadHash, service, a.region, time.Now()) + if err != nil { + _ = level.Error(a.log).Log("msg", "fail to sign request body", "err", err) + return nil, err + } + return a.t.RoundTrip(req) +} + +func hashPayload(r io.ReadCloser) (string, io.ReadCloser, error) { + var newReader io.ReadCloser + payload := []byte("") + if r != nil { + defer r.Close() + payload, err := ioutil.ReadAll(r) + if err != nil { + return "", newReader, err + } + newReader = ioutil.NopCloser(bytes.NewReader(payload)) + } + hash := sha256.Sum256(payload) + payloadHash := hex.EncodeToString(hash[:]) + return payloadHash, newReader, nil +} diff -Nru prometheus-elasticsearch-exporter-1.4.0/README.md prometheus-elasticsearch-exporter-1.5.0/README.md --- prometheus-elasticsearch-exporter-1.4.0/README.md 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/README.md 2022-07-28 13:27:55.000000000 +0000 @@ -58,6 +58,7 @@ | es.shards | 1.0.3rc1 | If true, query stats for all indices in the cluster, including shard-level stats (implies `es.indices=true`). | false | | es.snapshots | 1.0.4rc1 | If true, query stats for the cluster snapshots. | false | | es.slm | | If true, query stats for SLM. | false | +| es.data_stream | | If true, query state for Data Steams. | false | | es.timeout | 1.0.2 | Timeout for trying to get stats from Elasticsearch. (ex: 20s) | 5s | | es.ca | 1.0.2 | Path to PEM file that contains trusted Certificate Authorities for the Elasticsearch connection. | | | es.client-private-key | 1.0.2 | Path to PEM file that contains the private key for client auth when connecting to Elasticsearch. | | @@ -89,6 +90,7 @@ es.shards | not sure if `indices` or `cluster` `monitor` or both | es.snapshots | `cluster:admin/snapshot/status` and `cluster:admin/repository/get` | [ES Forum Post](https://discuss.elastic.co/t/permissions-for-backup-user-with-x-pack/88057) es.slm | `read_slm` +es.data_stream | `monitor` or `manage` (per index or `*`) | Further Information - [Build in Users](https://www.elastic.co/guide/en/elastic-stack-overview/7.3/built-in-users.html) @@ -240,6 +242,11 @@ | elasticsearch_slm_stats_snapshots_deleted_total | counter | 1 | Snapshots deleted by policy | elasticsearch_slm_stats_snapshot_deletion_failures_total | counter | 1 | Snapshot deletion failures by policy | elasticsearch_slm_stats_operation_mode | gauge | 1 | SLM operation mode (Running, stopping, stopped) +| elasticsearch_data_stream_stats_up | gauge | 0 | Up metric for Data Stream collection +| elasticsearch_data_stream_stats_total_scrapes | counter | 0 | Total scrapes for Data Stream stats +| elasticsearch_data_stream_stats_json_parse_failures | counter | 0 | Number of parsing failures for Data Stream stats +| elasticsearch_data_stream_backing_indices_total | gauge | 1 | Number of backing indices for Data Stream +| elasticsearch_data_stream_store_size_bytes | gauge | 1 | Current size of data stream backing indices in bytes ### Alerts & Recording Rules diff -Nru prometheus-elasticsearch-exporter-1.4.0/VERSION prometheus-elasticsearch-exporter-1.5.0/VERSION --- prometheus-elasticsearch-exporter-1.4.0/VERSION 2022-07-13 12:47:39.000000000 +0000 +++ prometheus-elasticsearch-exporter-1.5.0/VERSION 2022-07-28 13:27:55.000000000 +0000 @@ -1 +1 @@ -1.4.0 +1.5.0