diff --git a/NOTICE b/NOTICE index d2e2eda5fb5..6135c9c11f3 100644 --- a/NOTICE +++ b/NOTICE @@ -182,7 +182,7 @@ SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/elastic/beats Version: master -Revision: a7103d1125adfb68bdf193484c5a2aaf476516e1 +Revision: bd6981df3e461c5ae34bf62516637f7c03701efd License type (autodetected): Apache License 2.0 ./vendor/github.com/elastic/beats/LICENSE: -------------------------------------------------------------------- diff --git a/_beats/dev-tools/generate_notice.py b/_beats/dev-tools/generate_notice.py index 19b985db9a4..f2c764d655a 100644 --- a/_beats/dev-tools/generate_notice.py +++ b/_beats/dev-tools/generate_notice.py @@ -112,7 +112,7 @@ def write_notice_file(f, beat, copyright, dependencies): # it's an Apache License, so include only the NOTICE file f.write("Apache License 2.0\n\n") - # Skipe NOTICE files not needed + # Skip NOTICE files which are not needed if os.path.join(os.path.dirname(lib["license_file"])) in SKIP_NOTICE: continue diff --git a/_beats/dev-tools/packer/platforms/centos/run.sh.j2 b/_beats/dev-tools/packer/platforms/centos/run.sh.j2 index 3ac232ce569..2077ae1d24f 100644 --- a/_beats/dev-tools/packer/platforms/centos/run.sh.j2 +++ b/_beats/dev-tools/packer/platforms/centos/run.sh.j2 @@ -33,7 +33,7 @@ FPM_ARGS=( --after-install /tmp/systemd-daemon-reload.sh --config-files /etc/{{.beat_name}}/{{.beat_name}}.yml homedir/=/usr/share/{{.beat_name}} - beatname-${RUNID}.sh=/usr/bin/{{.beat_name}}.sh + beatname-${RUNID}.sh=/usr/bin/{{.beat_name}} {{.beat_name}}-linux-{{.arch}}=/usr/share/{{.beat_name}}/bin/{{.beat_name}} {{.beat_name}}-linux.yml=/etc/{{.beat_name}}/{{.beat_name}}.yml {{.beat_name}}-linux.reference.yml=/etc/{{.beat_name}}/{{.beat_name}}.reference.yml diff --git a/_beats/dev-tools/packer/platforms/debian/run.sh.j2 b/_beats/dev-tools/packer/platforms/debian/run.sh.j2 index 11f88d0cc7b..46fdc0f86d0 100644 --- a/_beats/dev-tools/packer/platforms/debian/run.sh.j2 +++ b/_beats/dev-tools/packer/platforms/debian/run.sh.j2 @@ -30,7 +30,7 @@ FPM_ARGS=( --after-install /tmp/systemd-daemon-reload.sh --config-files /etc/{{.beat_name}}/{{.beat_name}}.yml homedir/=/usr/share/{{.beat_name}} - beatname-${RUNID}.sh=/usr/bin/{{.beat_name}}.sh + beatname-${RUNID}.sh=/usr/bin/{{.beat_name}} {{.beat_name}}-linux-{{.arch}}=/usr/share/{{.beat_name}}/bin/{{.beat_name}} {{.beat_name}}-linux.yml=/etc/{{.beat_name}}/{{.beat_name}}.yml {{.beat_name}}-linux.reference.yml=/etc/{{.beat_name}}/{{.beat_name}}.reference.yml diff --git a/_beats/libbeat/_meta/config.reference.yml b/_beats/libbeat/_meta/config.reference.yml index 478a48e97cc..456d184647f 100644 --- a/_beats/libbeat/_meta/config.reference.yml +++ b/_beats/libbeat/_meta/config.reference.yml @@ -110,6 +110,19 @@ #processors: #- add_docker_metadata: ~ +#============================= Elastic Cloud ================================== + +# These settings simplify using beatname with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `:`. +#cloud.auth: + #================================ Outputs ====================================== # Configure what outputs to use when sending the data collected by the beat. @@ -144,6 +157,7 @@ output.elasticsearch: # Optional index name. The default is "beatname" plus date # and generates [beatname-]YYYY.MM.DD keys. + # In case you modify this pattern you must update setup.template.name and setup.template.pattern accordingly. #index: "beatname-%{[beat.version]}-%{+yyyy.MM.dd}" # Optional ingest node pipeline. By default no pipeline will be used. @@ -601,10 +615,14 @@ output.elasticsearch: # Set to false to disable template loading. #setup.template.enabled: true -# Template name. By default the template name is beatname. -# The version of the beat will always be appended to the given name -# so the final name is beatname-%{[beat.version]}. -#setup.template.name: "beatname" +# Template name. By default the template name is "beatname-%{[beat.version]}" +# The template name and pattern has to be set in case the elasticsearch index pattern is modified. +#setup.template.name: "beatname-%{[beat.version]}" + +# Template patttern. By default the template patter is "-%{[beat.version]}-*" to apply to the default index settings. +# The first part is the version of the beat and then -* is used to match all daily indicies. +# The template name and pattern has to be set in case the elasticsearch index pattern is modified. +#setup.template.pattern: "beatname-%{[beat.version]}-*" # Path to fields.yml file to generate the template #setup.template.fields: "${path.config}/fields.yml" diff --git a/_beats/libbeat/_meta/config.yml b/_beats/libbeat/_meta/config.yml index 5bc54c106d3..d3847a08aec 100644 --- a/_beats/libbeat/_meta/config.yml +++ b/_beats/libbeat/_meta/config.yml @@ -29,7 +29,7 @@ #============================== Kibana ===================================== -# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. +# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: @@ -39,6 +39,19 @@ setup.kibana: # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 #host: "localhost:5601" +#============================= Elastic Cloud ================================== + +# These settings simplify using beatname with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `:`. +#cloud.auth: + #================================ Outputs ===================================== # Configure what outputs to use when sending the data collected by the beat. diff --git a/_beats/libbeat/tests/system/beat/beat.py b/_beats/libbeat/tests/system/beat/beat.py index f1a99233bd9..988653d60ca 100644 --- a/_beats/libbeat/tests/system/beat/beat.py +++ b/_beats/libbeat/tests/system/beat/beat.py @@ -11,6 +11,7 @@ import yaml from datetime import datetime, timedelta + BEAT_REQUIRED_FIELDS = ["@timestamp", "beat.name", "beat.hostname", "beat.version"] @@ -168,7 +169,7 @@ def start_beat(self, "-test.coverprofile", os.path.join(self.working_dir, "coverage.cov"), "-path.home", os.path.normpath(self.working_dir), - "-c", os.path.join(self.working_dir, config) + "-c", os.path.join(self.working_dir, config), ] if logging_args: @@ -262,6 +263,11 @@ def setUp(self): shutil.rmtree(self.working_dir) os.makedirs(self.working_dir) + fields_yml = os.path.join(self.beat_path, "fields.yml") + # Only add it if it exists + if os.path.isfile(fields_yml): + shutil.copyfile(fields_yml, os.path.join(self.working_dir, "fields.yml")) + try: # update the last_run link if os.path.islink(self.build_path + "last_run"): diff --git a/_beats/script/build_docs.sh b/_beats/script/build_docs.sh index 9a77fa53608..b5e29fbdece 100755 --- a/_beats/script/build_docs.sh +++ b/_beats/script/build_docs.sh @@ -20,13 +20,14 @@ fi index="${GOPATH%%:*}/src/${path}/index.asciidoc" -if [ -f "$index" ]; then - echo "Building docs for ${name}..." - dest_dir="$html_dir/${name}" - mkdir -p "$dest_dir" - params="" - if [ "$PREVIEW" = "1" ]; then - params="--chunk=1 -open chunk=1 -open" - fi - $docs_dir/build_docs.pl $params --doc "$index" -out "$dest_dir" +echo "Building docs for ${name}..." +echo "Index document: ${index}" + +dest_dir="$html_dir/${name}" +mkdir -p "$dest_dir" +params="" +if [ "$PREVIEW" = "1" ]; then + params="--chunk=1 -open chunk=1 -open" fi +$docs_dir/build_docs.pl $params --doc "$index" -out "$dest_dir" + diff --git a/_beats/testing/environments/5x.yml b/_beats/testing/environments/5x.yml index 27868c90079..a45c8382d8c 100644 --- a/_beats/testing/environments/5x.yml +++ b/_beats/testing/environments/5x.yml @@ -3,7 +3,7 @@ version: '2.1' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1 + image: docker.elastic.co/elasticsearch/elasticsearch:5.5.1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200"] environment: @@ -18,13 +18,13 @@ services: context: docker/logstash dockerfile: Dockerfile args: - ELASTIC_VERSION: 5.4.1 + ELASTIC_VERSION: 5.5.1 DOWNLOAD_URL: https://artifacts.elastic.co/downloads environment: - ES_HOST=elasticsearch kibana: - image: docker.elastic.co/kibana/kibana:5.4.1 + image: docker.elastic.co/kibana/kibana:5.5.1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5601"] retries: 6 diff --git a/_beats/testing/environments/latest.yml b/_beats/testing/environments/latest.yml index 65dffee4b84..854ba41654d 100644 --- a/_beats/testing/environments/latest.yml +++ b/_beats/testing/environments/latest.yml @@ -1,9 +1,9 @@ -# This is the latest stable release environment. +# This is the latest released environment. version: '2.1' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1 + image: docker.elastic.co/elasticsearch/elasticsearch:6.0.0-beta1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200"] environment: @@ -18,13 +18,13 @@ services: context: docker/logstash dockerfile: Dockerfile args: - ELASTIC_VERSION: 5.4.1 + ELASTIC_VERSION: 6.0.0-beta1 DOWNLOAD_URL: https://artifacts.elastic.co/downloads environment: - ES_HOST=elasticsearch kibana: - image: docker.elastic.co/kibana/kibana:5.4.1 + image: docker.elastic.co/kibana/kibana:6.0.0-beta1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5601"] retries: 6 diff --git a/apm-server.reference.yml b/apm-server.reference.yml index 97fd2fe0e95..f803ed8ce8b 100644 --- a/apm-server.reference.yml +++ b/apm-server.reference.yml @@ -126,6 +126,19 @@ apm-server: #processors: #- add_docker_metadata: ~ +#============================= Elastic Cloud ================================== + +# These settings simplify using apm-server with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `:`. +#cloud.auth: + #================================ Outputs ====================================== # Configure what outputs to use when sending the data collected by the beat. @@ -160,6 +173,7 @@ output.elasticsearch: # Optional index name. The default is "apm-server" plus date # and generates [apm-server-]YYYY.MM.DD keys. + # In case you modify this pattern you must update setup.template.name and setup.template.pattern accordingly. #index: "apm-server-%{[beat.version]}-%{+yyyy.MM.dd}" # Optional ingest node pipeline. By default no pipeline will be used. @@ -617,10 +631,14 @@ output.elasticsearch: # Set to false to disable template loading. #setup.template.enabled: true -# Template name. By default the template name is apm-server. -# The version of the beat will always be appended to the given name -# so the final name is apm-server-%{[beat.version]}. -#setup.template.name: "apm-server" +# Template name. By default the template name is "apm-server-%{[beat.version]}" +# The template name and pattern has to be set in case the elasticsearch index pattern is modified. +#setup.template.name: "apm-server-%{[beat.version]}" + +# Template patttern. By default the template patter is "-%{[beat.version]}-*" to apply to the default index settings. +# The first part is the version of the beat and then -* is used to match all daily indicies. +# The template name and pattern has to be set in case the elasticsearch index pattern is modified. +#setup.template.pattern: "apm-server-%{[beat.version]}-*" # Path to fields.yml file to generate the template #setup.template.fields: "${path.config}/fields.yml" diff --git a/apm-server.yml b/apm-server.yml index 813a7afafa4..34c0a746b23 100644 --- a/apm-server.yml +++ b/apm-server.yml @@ -45,7 +45,7 @@ apm-server: #============================== Kibana ===================================== -# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. +# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: @@ -55,6 +55,19 @@ setup.kibana: # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 #host: "localhost:5601" +#============================= Elastic Cloud ================================== + +# These settings simplify using apm-server with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `:`. +#cloud.auth: + #================================ Outputs ===================================== # Configure what outputs to use when sending the data collected by the beat. diff --git a/tests/system/apmserver.py b/tests/system/apmserver.py index cc2eaacbad2..adc0325fd0f 100644 --- a/tests/system/apmserver.py +++ b/tests/system/apmserver.py @@ -73,16 +73,13 @@ class ElasticTest(ServerBaseTest): @classmethod def setUpClass(cls): super(ElasticTest, cls).setUpClass() - cls.base_name = "apm-server-tests" - cls.beat_version = "0.1.1" - cls.index_name = cls.base_name + "-" + cls.beat_version + "-1" + cls.index_name = "apm-server-tests" def config(self): cfg = super(ElasticTest, self).config() cfg.update({"elasticsearch_host": self.get_elasticsearch_url(), "file_enabled": "false", - "index_name": self.index_name, - "template_base_name": self.base_name}) + "index_name": self.index_name}) return cfg def setUp(self): @@ -95,11 +92,11 @@ def setUp(self): self.es.indices.delete(index=self.index_name) except: pass - self.wait_until(lambda: not self.es.indices.exists(self.base_name)) + self.wait_until(lambda: not self.es.indices.exists(self.index_name)) try: self.es.indices.delete_template( - name=self.base_name + "-" + self.beat_version) + name=self.index_name) except: pass diff --git a/tests/system/config/apm-server.yml.j2 b/tests/system/config/apm-server.yml.j2 index 2fb1007c200..4641ebb868a 100644 --- a/tests/system/config/apm-server.yml.j2 +++ b/tests/system/config/apm-server.yml.j2 @@ -7,6 +7,15 @@ apm-server: ssl.certificate: {{ ssl_cert }} ssl.key: {{ ssl_key }} +############################# Setup ########################################## + +{% if index_name %} + +setup.template.name: {{ index_name }} +setup.template.pattern: {{ index_name }}* + +{% endif %} + ############################# Output ########################################## # File as output @@ -30,7 +39,6 @@ output.file: {% if elasticsearch_host %} output.elasticsearch.hosts: ["{{ elasticsearch_host }}"] output.elasticsearch.index: {{ index_name }} -setup.template.name: {{ template_base_name }} {% endif %} ############################# Beat ######################################### diff --git a/tests/system/test_integration.py b/tests/system/test_integration.py index de8e9d84648..94be43324af 100644 --- a/tests/system/test_integration.py +++ b/tests/system/test_integration.py @@ -37,7 +37,6 @@ def test_load_docs_with_template_and_add_error(self): self.load_docs_with_template(f, 'errors', 4) def load_docs_with_template(self, data_path, endpoint, expected_events_count): - # TODO Needs cleanup when https://github.com/elastic/beats/pull/4769 merged payload = json.loads(open(data_path).read()) url = 'http://localhost:8200/v1/' + endpoint @@ -46,7 +45,7 @@ def load_docs_with_template(self, data_path, endpoint, expected_events_count): # make sure template is loaded self.wait_until( - lambda: self.log_contains("Elasticsearch template with name 'apm-server-tests-0.1.1' loaded")) + lambda: self.log_contains("Elasticsearch template with name 'apm-server-tests' loaded")) self.wait_until(lambda: self.es.indices.exists(self.index_name)) self.es.indices.refresh(index=self.index_name) diff --git a/vendor/github.com/elastic/beats/libbeat/cloudid/cloudid.go b/vendor/github.com/elastic/beats/libbeat/cloudid/cloudid.go new file mode 100644 index 00000000000..fc5b3b6a2df --- /dev/null +++ b/vendor/github.com/elastic/beats/libbeat/cloudid/cloudid.go @@ -0,0 +1,128 @@ +// package cloudid contains functions for parsing the cloud.id and cloud.auth +// settings and modifying the configuration to take them into account. +package cloudid + +import ( + "encoding/base64" + "fmt" + "net/url" + "strings" + + "github.com/pkg/errors" + + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/logp" +) + +// OverwriteSettings modifies the received config object by overwriting the +// output.elasticsearch.hosts, output.elasticsearch.username, output.elasticsearch.password, +// setup.kibana.host settings based on values derived from the cloud.id and cloud.auth +// settings. +func OverwriteSettings(cfg *common.Config) error { + + cloudID, _ := cfg.String("cloud.id", -1) + cloudAuth, _ := cfg.String("cloud.auth", -1) + + if cloudID == "" && cloudAuth == "" { + // nothing to hack + return nil + } + + logp.Debug("cloudid", "cloud.id: %s, cloud.auth: %s", cloudID, cloudAuth) + if cloudID == "" { + return errors.New("cloud.auth specified but cloud.id is empty. Please specify both.") + } + + // cloudID overwrites + esURL, kibanaURL, err := decodeCloudID(cloudID) + if err != nil { + return errors.Errorf("Error decoding cloud.id: %v", err) + } + + logp.Info("Setting Elasticsearch and Kibana URLs based on the cloud id: output.elasticsearch.hosts=%s and setup.kibana.host=%s", esURL, kibanaURL) + + esURLConfig, err := common.NewConfigFrom([]string{esURL}) + if err != nil { + return err + } + + // Before enabling the ES output, check that no other output is enabled + tmp := struct { + Output common.ConfigNamespace `config:"output"` + }{} + if err := cfg.Unpack(&tmp); err != nil { + return err + } + if out := tmp.Output; out.IsSet() && out.Name() != "elasticsearch" { + return errors.Errorf("The cloud.id setting enables the Elasticsearch output, but you already have the %s output enabled in the config", out.Name()) + } + + err = cfg.SetChild("output.elasticsearch.hosts", -1, esURLConfig) + if err != nil { + return err + } + + err = cfg.SetString("setup.kibana.host", -1, kibanaURL) + if err != nil { + return err + } + + if cloudAuth != "" { + // cloudAuth overwrites + username, password, err := decodeCloudAuth(cloudAuth) + if err != nil { + return err + } + + err = cfg.SetString("output.elasticsearch.username", -1, username) + if err != nil { + return err + } + + err = cfg.SetString("output.elasticsearch.password", -1, password) + if err != nil { + return err + } + } + + return nil +} + +// decodeCloudID decodes the cloud.id into elasticsearch-URL and kibana-URL +func decodeCloudID(cloudID string) (string, string, error) { + + // 1. Ignore anything before `:`. + idx := strings.LastIndex(cloudID, ":") + if idx >= 0 { + cloudID = cloudID[idx+1:] + } + + // 2. base64 decode + decoded, err := base64.StdEncoding.DecodeString(cloudID) + if err != nil { + return "", "", errors.Wrapf(err, "base64 decoding failed on %s", cloudID) + } + + // 3. separate based on `$` + words := strings.Split(string(decoded), "$") + if len(words) < 3 { + return "", "", errors.Errorf("Expected at least 3 parts in %s", string(decoded)) + } + + // 4. form the URLs + esURL := url.URL{Scheme: "https", Host: fmt.Sprintf("%s.%s:443", words[1], words[0])} + kibanaURL := url.URL{Scheme: "https", Host: fmt.Sprintf("%s.%s:443", words[2], words[0])} + + return esURL.String(), kibanaURL.String(), nil +} + +// decodeCloudAuth splits the cloud.auth into username and password. +func decodeCloudAuth(cloudAuth string) (string, string, error) { + + idx := strings.Index(cloudAuth, ":") + if idx < 0 { + return "", "", errors.New("cloud.auth setting doesn't contain `:` to split between username and password") + } + + return cloudAuth[0:idx], cloudAuth[idx+1:], nil +} diff --git a/vendor/github.com/elastic/beats/libbeat/cmd/export/template.go b/vendor/github.com/elastic/beats/libbeat/cmd/export/template.go index 876690b6803..1403cf8b8cf 100644 --- a/vendor/github.com/elastic/beats/libbeat/cmd/export/template.go +++ b/vendor/github.com/elastic/beats/libbeat/cmd/export/template.go @@ -38,7 +38,7 @@ func GenTemplateConfigCmd(name, beatVersion string) *cobra.Command { } } - tmpl, err := template.New(b.Info.Version, version, index, cfg.Settings) + tmpl, err := template.New(b.Info.Version, index, version, cfg) if err != nil { fmt.Fprintf(os.Stderr, "Error generating template: %+v", err) os.Exit(1) diff --git a/vendor/github.com/elastic/beats/libbeat/cmd/instance/beat.go b/vendor/github.com/elastic/beats/libbeat/cmd/instance/beat.go index 22afc618bdf..02bb919c6bf 100644 --- a/vendor/github.com/elastic/beats/libbeat/cmd/instance/beat.go +++ b/vendor/github.com/elastic/beats/libbeat/cmd/instance/beat.go @@ -18,6 +18,7 @@ import ( "github.com/elastic/beats/libbeat/api" "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/cfgfile" + "github.com/elastic/beats/libbeat/cloudid" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/cfgwarn" "github.com/elastic/beats/libbeat/common/file" @@ -389,6 +390,11 @@ func (b *Beat) configure() error { return fmt.Errorf("error loading config file: %v", err) } + err = cloudid.OverwriteSettings(cfg) + if err != nil { + return err + } + b.RawConfig = cfg err = cfg.Unpack(&b.Config) if err != nil { @@ -542,9 +548,11 @@ func (b *Beat) loadDashboards(force bool) error { // the elasticsearch output. It is important the the registration happens before // the publisher is created. func (b *Beat) registerTemplateLoading() error { + + var cfg template.TemplateConfig + // Check if outputting to file is enabled, and output to file if it is - if b.Config.Template != nil && b.Config.Template.Enabled() { - var cfg template.TemplateConfig + if b.Config.Template.Enabled() { err := b.Config.Template.Unpack(&cfg) if err != nil { return fmt.Errorf("unpacking template config fails: %v", err) @@ -553,7 +561,22 @@ func (b *Beat) registerTemplateLoading() error { // Loads template by default if esOutput is enabled if b.Config.Output.Name() == "elasticsearch" { + + // Get ES Index name for comparison + esCfg := struct { + Index string `config:"index"` + }{} + err := b.Config.Output.Config().Unpack(&esCfg) + if err != nil { + return err + } + + if esCfg.Index != "" && (cfg.Name == "" || cfg.Pattern == "") { + return fmt.Errorf("setup.template.name and setup.template.pattern have to be set if index name is modified.") + } + if b.Config.Template == nil || (b.Config.Template != nil && b.Config.Template.Enabled()) { + // load template through callback to make sure it is also loaded // on reconnecting callback, err := b.templateLoadingCallback() diff --git a/vendor/github.com/elastic/beats/libbeat/outputs/codec/format/format.go b/vendor/github.com/elastic/beats/libbeat/outputs/codec/format/format.go index bf31d42f491..ab346ba9af3 100644 --- a/vendor/github.com/elastic/beats/libbeat/outputs/codec/format/format.go +++ b/vendor/github.com/elastic/beats/libbeat/outputs/codec/format/format.go @@ -6,7 +6,6 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/fmtstr" - "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/outputs/codec" ) @@ -38,9 +37,5 @@ func New(fmt *fmtstr.EventFormatString) *Encoder { } func (e *Encoder) Encode(_ string, event *beat.Event) ([]byte, error) { - serializedEvent, err := e.Format.RunBytes(event) - if err != nil { - logp.Err("Fail to format event (%v): %#v", err, event) - } - return serializedEvent, err + return e.Format.RunBytes(event) } diff --git a/vendor/github.com/elastic/beats/libbeat/outputs/redis/client.go b/vendor/github.com/elastic/beats/libbeat/outputs/redis/client.go index e2d0504b841..c4b56789ffa 100644 --- a/vendor/github.com/elastic/beats/libbeat/outputs/redis/client.go +++ b/vendor/github.com/elastic/beats/libbeat/outputs/redis/client.go @@ -287,6 +287,7 @@ func serializeEvents( for _, d := range data { serializedEvent, err := codec.Encode(index, &d.Content) if err != nil { + logp.Err("Encoding event failed with error: %v", err) goto failLoop } @@ -303,6 +304,7 @@ failLoop: for _, d := range rest { serializedEvent, err := codec.Encode(index, &d.Content) if err != nil { + logp.Err("Encoding event failed with error: %v", err) i++ continue } diff --git a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/indexing.go b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/indexing.go index 06ecce7ae42..ccb9c35d098 100644 --- a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/indexing.go +++ b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/indexing.go @@ -271,15 +271,19 @@ func NewContainerIndexer(_ common.Config, genMeta GenMeta) (Indexer, error) { func (c *ContainerIndexer) GetMetadata(pod *Pod) []MetadataIndex { commonMeta := c.genMeta.GenerateMetaData(pod) - containers := c.GetIndexes(pod) var metadata []MetadataIndex - for i := 0; i < len(containers); i++ { + for _, status := range append(pod.Status.ContainerStatuses, pod.Status.InitContainerStatuses...) { + cID := containerID(status) + if cID == "" { + continue + } + containerMeta := commonMeta.Clone() containerMeta["container"] = common.MapStr{ - "name": pod.Status.ContainerStatuses[i].Name, + "name": status.Name, } metadata = append(metadata, MetadataIndex{ - Index: containers[i], + Index: cID, Data: containerMeta, }) } @@ -289,18 +293,27 @@ func (c *ContainerIndexer) GetMetadata(pod *Pod) []MetadataIndex { func (c *ContainerIndexer) GetIndexes(pod *Pod) []string { var containers []string - for _, status := range pod.Status.ContainerStatuses { - cID := status.ContainerID - if cID != "" { - parts := strings.Split(cID, "//") - if len(parts) == 2 { - containers = append(containers, parts[1]) - } + for _, status := range append(pod.Status.ContainerStatuses, pod.Status.InitContainerStatuses...) { + cID := containerID(status) + if cID == "" { + continue } + containers = append(containers, cID) } return containers } +func containerID(status PodContainerStatus) string { + cID := status.ContainerID + if cID != "" { + parts := strings.Split(cID, "//") + if len(parts) == 2 { + return parts[1] + } + } + return "" +} + type FieldMatcher struct { MatchFields []string } diff --git a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/kubernetes.go b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/kubernetes.go index bcf9f932f8f..c41b65582c6 100644 --- a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/kubernetes.go +++ b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/kubernetes.go @@ -38,6 +38,7 @@ func init() { Indexing.AddIndexer(PodNameIndexerName, NewPodNameIndexer) Indexing.AddIndexer(ContainerIndexerName, NewContainerIndexer) Indexing.AddMatcher(FieldMatcherName, NewFieldMatcher) + Indexing.AddMatcher(FieldFormatMatcherName, NewFieldFormatMatcher) } func newKubernetesAnnotator(cfg *common.Config) (processors.Processor, error) { @@ -112,6 +113,7 @@ func newKubernetesAnnotator(cfg *common.Config) (processors.Processor, error) { matchFunc := Indexing.GetMatcher(name) if matchFunc == nil { logp.Warn("Unable to find matcher plugin %s", name) + continue } matcher, err := matchFunc(pluginConfig) diff --git a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/podwatcher.go b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/podwatcher.go index bc25327efe8..2d0ef0e2fca 100644 --- a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/podwatcher.go +++ b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/podwatcher.go @@ -84,7 +84,7 @@ func (p *PodWatcher) watchPods() { if err != nil { //watch pod failures should be logged and gracefully failed over as metadata retrieval //should never stop. - logp.Err("kubernetes: Watching API eror %v", err) + logp.Err("kubernetes: Watching API error %v", err) time.Sleep(time.Second) continue } diff --git a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/types.go b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/types.go index d3bec7c7cfa..6337d2d5ea5 100644 --- a/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/types.go +++ b/vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/types.go @@ -82,12 +82,13 @@ type PodContainerStatus struct { } type PodStatus struct { - Conditions []PodStatusCondition `json:"conditions"` - ContainerStatuses []PodContainerStatus `json:"containerStatuses"` - HostIP string `json:"hostIP"` - Phase string `json:"phase"` - PodIP string `json:"podIP"` - StartTime string `json:"startTime"` + Conditions []PodStatusCondition `json:"conditions"` + ContainerStatuses []PodContainerStatus `json:"containerStatuses"` + InitContainerStatuses []PodContainerStatus `json:"initContainerStatuses"` + HostIP string `json:"hostIP"` + Phase string `json:"phase"` + PodIP string `json:"podIP"` + StartTime string `json:"startTime"` } type Pod struct { diff --git a/vendor/github.com/elastic/beats/libbeat/template/config.go b/vendor/github.com/elastic/beats/libbeat/template/config.go index 9aacc7e997a..eec7e6dab57 100644 --- a/vendor/github.com/elastic/beats/libbeat/template/config.go +++ b/vendor/github.com/elastic/beats/libbeat/template/config.go @@ -3,6 +3,7 @@ package template type TemplateConfig struct { Enabled bool `config:"enabled"` Name string `config:"name"` + Pattern string `config:"pattern"` Fields string `config:"fields"` Overwrite bool `config:"overwrite"` Settings TemplateSettings `config:"settings"` diff --git a/vendor/github.com/elastic/beats/libbeat/template/field.go b/vendor/github.com/elastic/beats/libbeat/template/field.go index bc1e5b2aec4..70967bc7540 100644 --- a/vendor/github.com/elastic/beats/libbeat/template/field.go +++ b/vendor/github.com/elastic/beats/libbeat/template/field.go @@ -26,6 +26,7 @@ type Field struct { Norms bool `config:"norms"` Dynamic dynamicType `config:"dynamic"` Index *bool `config:"index"` + DocValues *bool `config:"doc_values"` path string esVersion common.Version @@ -202,6 +203,9 @@ func (f *Field) getDefaultProperties() common.MapStr { properties["index"] = *f.Index } + if f.DocValues != nil { + properties["doc_values"] = *f.DocValues + } return properties } diff --git a/vendor/github.com/elastic/beats/libbeat/template/load.go b/vendor/github.com/elastic/beats/libbeat/template/load.go index b8648f809a0..07da99f3af2 100644 --- a/vendor/github.com/elastic/beats/libbeat/template/load.go +++ b/vendor/github.com/elastic/beats/libbeat/template/load.go @@ -42,11 +42,8 @@ func NewLoader(cfg *common.Config, client ESClient, beatInfo beat.Info) (*Loader // In case the template is not already loaded or overwriting is enabled, the // template is written to index func (l *Loader) Load() error { - if l.config.Name == "" { - l.config.Name = l.beatInfo.Beat - } - tmpl, err := New(l.beatInfo.Version, l.client.GetVersion(), l.config.Name, l.config.Settings) + tmpl, err := New(l.beatInfo.Version, l.beatInfo.Beat, l.client.GetVersion(), l.config) if err != nil { return fmt.Errorf("error creating template instance: %v", err) } diff --git a/vendor/github.com/elastic/beats/libbeat/template/template.go b/vendor/github.com/elastic/beats/libbeat/template/template.go index 26233bd655b..97995d69a8e 100644 --- a/vendor/github.com/elastic/beats/libbeat/template/template.go +++ b/vendor/github.com/elastic/beats/libbeat/template/template.go @@ -2,8 +2,11 @@ package template import ( "fmt" + "time" + "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/fmtstr" "github.com/elastic/go-ucfg/yaml" ) @@ -17,19 +20,58 @@ var ( ) type Template struct { - index string + name string + pattern string beatVersion common.Version esVersion common.Version settings TemplateSettings } // New creates a new template instance -func New(beatVersion string, esVersion string, index string, settings TemplateSettings) (*Template, error) { +func New(beatVersion string, beatName string, esVersion string, config TemplateConfig) (*Template, error) { bV, err := common.NewVersion(beatVersion) if err != nil { return nil, err } + name := config.Name + if name == "" { + name = fmt.Sprintf("%s-%s", beatName, bV.String()) + } + + pattern := config.Pattern + if pattern == "" { + pattern = name + "-*" + } + + event := &beat.Event{ + Fields: common.MapStr{ + "beat": common.MapStr{ + "name": beatName, + "version": bV.String(), + }, + }, + Timestamp: time.Now(), + } + + nameFormatter, err := fmtstr.CompileEvent(name) + if err != nil { + return nil, err + } + name, err = nameFormatter.Run(event) + if err != nil { + return nil, err + } + + patternFormatter, err := fmtstr.CompileEvent(pattern) + if err != nil { + return nil, err + } + pattern, err = patternFormatter.Run(event) + if err != nil { + return nil, err + } + // In case no esVersion is set, it is assumed the same as beat version if esVersion == "" { esVersion = beatVersion @@ -41,10 +83,11 @@ func New(beatVersion string, esVersion string, index string, settings TemplateSe } return &Template{ - index: index, + pattern: pattern, + name: name, beatVersion: *bV, esVersion: *esV, - settings: settings, + settings: config.Settings, }, nil } @@ -62,9 +105,14 @@ func (t *Template) Load(file string) (common.MapStr, error) { return output, nil } -// GetName returns the name of the template which is {index}-{version} +// GetName returns the name of the template func (t *Template) GetName() string { - return fmt.Sprintf("%s-%s", t.index, t.beatVersion.String()) + return t.name +} + +// GetPattern returns the pattern of the template +func (t *Template) GetPattern() string { + return t.pattern } // generate generates the full template @@ -130,12 +178,12 @@ func (t *Template) generate(properties common.MapStr, dynamicTemplates []common. // ES 6 moved from template to index_patterns: https://github.com/elastic/elasticsearch/pull/21009 if t.esVersion.Major >= 6 { - basicStructure.Put("index_patterns", []string{t.GetName() + "-*"}) + basicStructure.Put("index_patterns", []string{t.GetPattern()}) } else { - basicStructure.Put("template", t.GetName()+"-*") + basicStructure.Put("template", t.GetPattern()) } - if t.esVersion.IsMajor(2) || t.esVersion.IsMajor(5) { + if t.esVersion.IsMajor(2) { basicStructure.Put("mappings._default_._all.norms.enabled", false) } diff --git a/vendor/vendor.json b/vendor/vendor.json index a40188e69a4..de0b6f55a1a 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -245,368 +245,374 @@ { "checksumSHA1": "fYn1u7ImprgcrgS0sRsZhLDR4wg=", "path": "github.com/elastic/beats/libbeat/api", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "UzLO9wvhNjUNEV8bUp86RLyes1k=", "path": "github.com/elastic/beats/libbeat/beat", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "MDBESe+A4gBSnGcg3ehNPV79Hik=", "path": "github.com/elastic/beats/libbeat/cfgfile", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, + { + "checksumSHA1": "kcJBPeHVyLhstApfy7Smi6fcxrg=", + "path": "github.com/elastic/beats/libbeat/cloudid", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z" + }, { "checksumSHA1": "c9LA9d38gfrFRfAW8ERm4aqKbCA=", "path": "github.com/elastic/beats/libbeat/cmd", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "kVt+ZgbyphGTs/PMQ9vbqjsaINA=", + "checksumSHA1": "2tIx7fQyFrscfg0nRHYRbVV2H8Y=", "path": "github.com/elastic/beats/libbeat/cmd/export", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "qzsAf8MQfMBi56MPa81c6ujpQwg=", + "checksumSHA1": "glvYhIIj8gUA4we9xghamtXXliQ=", "path": "github.com/elastic/beats/libbeat/cmd/instance", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "Ss/kCqcC6CkoEMQfUB2AeIUmGj8=", "path": "github.com/elastic/beats/libbeat/cmd/test", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "l4N/u4uXIjnQZ2h3Cf7dHwcUVmk=", "path": "github.com/elastic/beats/libbeat/common", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "SS/yBENBeoNVCAu+TQcDylo4CPg=", "path": "github.com/elastic/beats/libbeat/common/atomic", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "kbrbRXK+vEBW+gBucQX1gmn07nE=", "path": "github.com/elastic/beats/libbeat/common/cfgwarn", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "7bGcM14M5R8BuQLqKdWfbbQaKEM=", "path": "github.com/elastic/beats/libbeat/common/dtfmt", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "3GxLcVX/OFwXDi0VJNnJrafkq8A=", "path": "github.com/elastic/beats/libbeat/common/file", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "7WSOY58klc0crUF/5UZx/pLFIR0=", "path": "github.com/elastic/beats/libbeat/common/fmtstr", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "pdFJ+DF0STunSGRopAMwn9n9ZlY=", "path": "github.com/elastic/beats/libbeat/common/jsontransform", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "+djyNKl6NRWKJFOBZGTiXliyBm8=", "path": "github.com/elastic/beats/libbeat/common/match", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "CGDTSl2i0mxPNln+8qLD9aEgqzI=", "path": "github.com/elastic/beats/libbeat/common/op", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "8exGjSEBI+fSKXMHdWI2e2lX5D0=", "path": "github.com/elastic/beats/libbeat/common/schema", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "WmqoD6kF9VraYUmjXacgWSHd2v4=", "path": "github.com/elastic/beats/libbeat/common/schema/mapstriface", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "zi4xMJ43/IzPCPNXs8iBc0WI2sE=", "path": "github.com/elastic/beats/libbeat/common/streambuf", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "1+ON4FvdXhKOvTj8vAHFs/BBWmg=", "path": "github.com/elastic/beats/libbeat/dashboards", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "wC9sNrhYx1dr3mz2cXKQIBFZlxo=", "path": "github.com/elastic/beats/libbeat/logp", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "kZBPfX0Pv2dLMP5Iho9Mx/hXz9o=", "path": "github.com/elastic/beats/libbeat/monitoring", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "tRfILb+3nS9S5xf1GTqyGVbvGnU=", "path": "github.com/elastic/beats/libbeat/monitoring/adapter", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "6Y1rk4L0vIJZODy2wXGLa3liVDU=", "path": "github.com/elastic/beats/libbeat/monitoring/report", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "DTQdPn57PVDSVGOU+b8XXPaZWbM=", "path": "github.com/elastic/beats/libbeat/monitoring/report/elasticsearch", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "ewNLeJsjP1vTG7AfUzOlPcRS9wY=", "path": "github.com/elastic/beats/libbeat/outputs", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "J+EURQTncE5oX+elZeul1pcr7cc=", "path": "github.com/elastic/beats/libbeat/outputs/codec", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "l5Be4rhWFGXqZlZGHMekv9ZOsUg=", + "checksumSHA1": "0vfh0G0gpdo6Q7EbLpSr1rSG/xs=", "path": "github.com/elastic/beats/libbeat/outputs/codec/format", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "dB4oMnfnyoa4xCrp6ty7vRy26tw=", "path": "github.com/elastic/beats/libbeat/outputs/codec/json", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "eNHiKpEj8ngyFpoeRI/YvU5d3YI=", "path": "github.com/elastic/beats/libbeat/outputs/console", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "pl2mujHKZLIYCTPjEDUlg2cEntg=", "path": "github.com/elastic/beats/libbeat/outputs/elasticsearch", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "m6ahHL7Ihn2HMaEF31NqyNXQkWY=", "path": "github.com/elastic/beats/libbeat/outputs/fileout", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "B5r3CpYm9B1xsFmG6Z9S/qABUyk=", "path": "github.com/elastic/beats/libbeat/outputs/kafka", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "6DByEZXwktAJMuTu3j6gUGclNwU=", "path": "github.com/elastic/beats/libbeat/outputs/logstash", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "UEGH5mAXdKBysIjODuTxHKlzqsY=", "path": "github.com/elastic/beats/libbeat/outputs/outil", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "Y3pecP+NZQBPZoM5RWgEzQvIg2c=", + "checksumSHA1": "z6GWNd5s0+t5ObS8puEUtjvqVeU=", "path": "github.com/elastic/beats/libbeat/outputs/redis", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "DXyLGeGve0QaVS9H0GjrS0pbZhs=", "path": "github.com/elastic/beats/libbeat/outputs/transport", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "d5b9Ra0zcwznwemxEJmyW28FZJ0=", "path": "github.com/elastic/beats/libbeat/paths", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "2ef0H1yIcmjczaj6LsUc17/ss6I=", "path": "github.com/elastic/beats/libbeat/plugin", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "f5rbaafOe7lJk+ahzKkJzTeCfZU=", "path": "github.com/elastic/beats/libbeat/processors", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "JBWiLNZylmEHFiAbNXJAYa9D8fw=", "path": "github.com/elastic/beats/libbeat/processors/actions", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "HMyzMv+rJ9hovpEs+2ubIDVK+NI=", "path": "github.com/elastic/beats/libbeat/processors/add_cloud_metadata", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "0mNdN64yg6KRXHo5LXhu78/z7NI=", "path": "github.com/elastic/beats/libbeat/processors/add_docker_metadata", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "DmbqZHzBLgP/H4apuEVUvX0O0Bg=", + "checksumSHA1": "IZIEt20M2OxAAxvZHz8WBzBV8jo=", "path": "github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "UCfWJFoOVRzY1nQ+mAHT+mpGYv4=", "path": "github.com/elastic/beats/libbeat/processors/add_locale", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "jVIZcmI+VyHbivKqZ4qDtiP/W80=", "path": "github.com/elastic/beats/libbeat/publisher", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, @@ -645,72 +651,72 @@ { "checksumSHA1": "btf3XhwPROVy4JtECpH0eL3nGwg=", "path": "github.com/elastic/beats/libbeat/publisher/includes", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "3l3ftdB0PYBB2oHp44onvEgtJUo=", "path": "github.com/elastic/beats/libbeat/publisher/pipeline", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "k/1pxNUislJBfsjb/yZVG7+YP28=", "path": "github.com/elastic/beats/libbeat/publisher/queue", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "/AoPj3R6Kx0PWBKx1P2ppvqeBU4=", "path": "github.com/elastic/beats/libbeat/publisher/queue/memqueue", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "kT9MLdbYAKYJ0lWfjqX8fbrZTiY=", "path": "github.com/elastic/beats/libbeat/service", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "Vk8ZhOtmPC8B2hzBayRKSeq8HTM=", "path": "github.com/elastic/beats/libbeat/setup/kibana", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { - "checksumSHA1": "KynK/a+wUiE2bAUsVUFJkzfMWGU=", + "checksumSHA1": "SByuyFGsBCcq4xz/g9ZMPwW8PZM=", "path": "github.com/elastic/beats/libbeat/template", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "7PJnZYfyxNG+Qz2Sx/G/sdJfujQ=", "path": "github.com/elastic/beats/libbeat/testing", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" }, { "checksumSHA1": "HviBA/yN/8aYDJSnP7lk004sbM0=", "path": "github.com/elastic/beats/libbeat/version", - "revision": "a7103d1125adfb68bdf193484c5a2aaf476516e1", - "revisionTime": "2017-08-14T19:36:44Z", + "revision": "bd6981df3e461c5ae34bf62516637f7c03701efd", + "revisionTime": "2017-08-23T11:20:48Z", "version": "master", "versionExact": "master" },