From 12697074471c8267b8c0f5f8f6e2c6c344953ce0 Mon Sep 17 00:00:00 2001 From: Blerim Sheqa Date: Tue, 7 Aug 2018 14:02:57 +0200 Subject: [PATCH] Update to libbeat 6.3 --- vendor/github.com/elastic/beats/.appveyor.yml | 111 - vendor/github.com/elastic/beats/.gitignore | 1 + vendor/github.com/elastic/beats/.go-version | 2 +- vendor/github.com/elastic/beats/.travis.yml | 24 +- .../beats/CHANGELOG-developer.asciidoc | 29 + .../elastic/beats/CHANGELOG.asciidoc | 355 +- vendor/github.com/elastic/beats/LICENSE.txt | 24 +- vendor/github.com/elastic/beats/Makefile | 10 +- vendor/github.com/elastic/beats/NOTICE.txt | 1563 +- vendor/github.com/elastic/beats/README.md | 17 +- vendor/github.com/elastic/beats/Vagrantfile | 2 +- .../elastic/beats/auditbeat/Dockerfile | 17 + .../elastic/beats/auditbeat/Makefile | 20 +- .../beats/auditbeat/auditbeat.reference.yml | 114 +- .../beats/auditbeat/docker-compose.yml | 33 + .../auditbeat/docs/configuring-howto.asciidoc | 1 - .../beats/auditbeat/docs/fields.asciidoc | 2147 +- .../auditbeat/docs/getting-started.asciidoc | 18 +- .../beats/auditbeat/docs/index.asciidoc | 11 +- .../docs/securing-auditbeat.asciidoc | 1 + .../docs/setting-up-running.asciidoc | 4 +- .../module/auditd/_meta/config.yml.tpl | 10 +- .../auditbeat-kernel-executions.json | 6 +- .../dashboard/auditbeat-kernel-overview.json | 6 +- .../6/dashboard/auditbeat-kernel-sockets.json | 6 +- .../module/auditd/audit_linux_test.go | 3 +- .../module/auditd/config_linux_test.go | 6 +- .../6/dashboard/auditbeat-file-integrity.json | 4 +- .../file_integrity/eventreader_fsnotify.go | 12 +- .../file_integrity/monitor/filetree_test.go | 2 + .../module/file_integrity/monitor/monitor.go | 4 +- .../file_integrity/monitor/monitor_test.go | 2 + .../auditbeat/scripts/generate_config.go | 12 + .../beats/auditbeat/tests/system/auditbeat.py | 48 +- .../tests/system/config/auditbeat.yml.j2 | 15 +- .../beats/auditbeat/tests/system/test_base.py | 47 +- .../tests/system/test_file_integrity.py | 189 + .../beats/deploy/kubernetes/.travis/setup.sh | 62 +- .../kubernetes/filebeat-kubernetes.yaml | 27 +- .../deploy/kubernetes/filebeat/README.md | 2 +- .../filebeat/filebeat-configmap.yaml | 12 +- .../filebeat/filebeat-daemonset.yaml | 13 +- .../kubernetes/metricbeat-kubernetes.yaml | 16 +- .../metricbeat-daemonset-configmap.yaml | 2 - .../metricbeat/metricbeat-daemonset.yaml | 6 +- .../metricbeat-deployment-configmap.yaml | 1 - .../metricbeat/metricbeat-deployment.yaml | 3 +- .../elastic/beats/dev-tools/cherrypick_pr | 23 + .../github.com/elastic/beats/dev-tools/deploy | 4 +- .../beats/dev-tools/generate_notice.py | 146 +- .../elastic/beats/dev-tools/jenkins_ci.ps1 | 9 +- .../elastic/beats/dev-tools/open_pr | 15 + .../elastic/beats/dev-tools/packer/Makefile | 28 +- .../xgo-image-deb7/beats-builder/Dockerfile | 2 +- .../beats-builder/gopacket_pcap.patch | 14 +- .../packer/docker/xgo-image-deb7/build.sh | 2 +- .../{go-1.9.2 => go-1.9.4}/Dockerfile | 6 +- .../packer/docker/xgo-image/base/Dockerfile | 3 + .../packer/docker/xgo-image/base/build.sh | 23 +- .../docker/xgo-image/beats-builder/Dockerfile | 2 +- .../packer/docker/xgo-image/build.sh | 2 +- .../{go-1.9.2 => go-1.9.4}/Dockerfile | 6 +- .../packer/platforms/binary/build.sh | 2 +- .../packer/platforms/binary/run.sh.j2 | 18 +- .../packer/platforms/centos/build.sh | 2 +- .../packer/platforms/centos/run.sh.j2 | 20 +- .../packer/platforms/darwin/build.sh | 2 +- .../packer/platforms/darwin/run.sh.j2 | 11 +- .../packer/platforms/dashboards/build.sh | 2 +- .../packer/platforms/dashboards/run.sh.j2 | 9 +- .../packer/platforms/debian/build.sh | 2 +- .../packer/platforms/debian/run.sh.j2 | 22 +- .../packer/platforms/windows/build.sh | 2 +- .../platforms/windows/install-service.ps1.j2 | 2 +- .../packer/platforms/windows/run.sh.j2 | 11 +- .../beats/dev-tools/packer/version.yml | 2 +- .../packer/xgo-scripts/before_build.sh | 3 +- .../elastic/beats/dev-tools/promote_docs | 35 + .../elastic/beats/dev-tools/set_version | 3 +- .../beats/docs/devguide/contributing.asciidoc | 30 +- .../beats/docs/devguide/index.asciidoc | 3 + .../docs/devguide/modules-dev-guide.asciidoc | 166 +- .../beats/docs/devguide/newbeat.asciidoc | 13 +- .../docs/devguide/newdashboards.asciidoc | 2 +- .../elastic/beats/filebeat/Dockerfile | 2 +- .../elastic/beats/filebeat/Makefile | 7 +- .../beats/filebeat/_meta/common.p2.yml | 12 +- .../filebeat/_meta/common.reference.p2.yml | 112 +- .../beats/filebeat/_meta/fields.common.yml | 51 +- .../{beater => autodiscover}/autodiscover.go | 20 +- .../autodiscover/builder/hints/config.go | 24 + .../autodiscover/builder/hints/logs.go | 183 + .../autodiscover/builder/hints/logs_test.go | 295 + .../beats/filebeat/autodiscover/include.go | 6 + .../elastic/beats/filebeat/beater/acker.go | 28 +- .../beats/filebeat/beater/acker_test.go | 71 + .../elastic/beats/filebeat/beater/filebeat.go | 149 +- .../elastic/beats/filebeat/channel/factory.go | 17 +- .../beats/filebeat/channel/interface.go | 2 +- .../elastic/beats/filebeat/config/config.go | 68 +- .../beats/filebeat/config/config_test.go | 81 +- .../elastic/beats/filebeat/crawler/crawler.go | 86 +- .../elastic/beats/filebeat/docker-compose.yml | 4 +- .../docs/autodiscover-docker-config.asciidoc | 14 +- .../filebeat/docs/autodiscover-hints.asciidoc | 122 + .../autodiscover-kubernetes-config.asciidoc | 8 +- .../filebeat/docs/configuring-howto.asciidoc | 2 - .../elastic/beats/filebeat/docs/faq.asciidoc | 75 +- .../beats/filebeat/docs/fields.asciidoc | 2365 +- .../filebeat/docs/filebeat-filtering.asciidoc | 38 +- .../docs/filebeat-general-options.asciidoc | 24 +- .../docs/filebeat-modules-options.asciidoc | 83 +- .../filebeat/docs/filebeat-options.asciidoc | 568 +- .../filebeat/docs/getting-started.asciidoc | 23 +- .../filebeat/docs/how-filebeat-works.asciidoc | 64 +- .../docs/images/filebeat-mongodb-overview.png | Bin 0 -> 135807 bytes .../beats/filebeat/docs/images/filebeat.png | Bin 84067 -> 81346 bytes .../beats/filebeat/docs/images/kibana-iis.png | Bin 0 -> 601865 bytes .../beats/filebeat/docs/index.asciidoc | 11 +- .../inputs/input-common-file-options.asciidoc | 387 + .../input-common-harvester-options.asciidoc | 157 + .../docs/inputs/input-common-options.asciidoc | 86 + .../inputs/input-common-tcp-options.asciidoc | 29 + .../inputs/input-common-udp-options.asciidoc | 17 + .../docs/inputs/input-docker.asciidoc | 72 + .../filebeat/docs/inputs/input-log.asciidoc | 102 + .../filebeat/docs/inputs/input-redis.asciidoc | 81 + .../filebeat/docs/inputs/input-stdin.asciidoc | 34 + .../docs/inputs/input-syslog.asciidoc | 47 + .../filebeat/docs/inputs/input-tcp.asciidoc | 35 + .../filebeat/docs/inputs/input-udp.asciidoc | 35 + .../filebeat/docs/load-balancing.asciidoc | 2 +- .../beats/filebeat/docs/migration.asciidoc | 124 +- .../docs/modules-getting-started.asciidoc | 2 +- .../filebeat/docs/modules-overview.asciidoc | 18 +- .../beats/filebeat/docs/modules/iis.asciidoc | 79 + .../filebeat/docs/modules/kafka.asciidoc | 15 +- .../filebeat/docs/modules/mongodb.asciidoc | 69 + .../filebeat/docs/modules/traefik.asciidoc | 2 - .../beats/filebeat/docs/modules_list.asciidoc | 4 + .../beats/filebeat/docs/multiline.asciidoc | 24 +- .../docs/multiple-prospectors.asciidoc | 34 - .../beats/filebeat/docs/overview.asciidoc | 23 +- .../docs/reload-configuration.asciidoc | 54 +- .../docs/running-on-kubernetes.asciidoc | 2 +- .../filebeat/docs/securing-filebeat.asciidoc | 1 + .../filebeat/docs/setting-up-running.asciidoc | 4 +- .../beats/filebeat/filebeat.reference.yml | 322 +- .../elastic/beats/filebeat/filebeat.yml | 12 +- .../elastic/beats/filebeat/fileset/config.go | 26 + .../beats/filebeat/fileset/config_test.go | 62 + .../elastic/beats/filebeat/fileset/factory.go | 44 +- .../elastic/beats/filebeat/fileset/fileset.go | 44 +- .../beats/filebeat/fileset/fileset_test.go | 12 +- .../elastic/beats/filebeat/fileset/modules.go | 199 +- .../fileset/modules_integration_test.go | 16 +- .../beats/filebeat/fileset/modules_test.go | 27 +- .../beats/filebeat/fileset/pipelines.go | 128 + .../beats/filebeat/harvester/forwarder.go | 8 +- .../beats/filebeat/harvester/harvester.go | 2 +- .../filebeat/harvester/reader/docker_json.go | 82 +- .../harvester/reader/docker_json_test.go | 36 + .../beats/filebeat/harvester/reader/json.go | 11 +- .../filebeat/harvester/reader/json_config.go | 9 +- .../beats/filebeat/harvester/registry.go | 2 +- .../elastic/beats/filebeat/harvester/util.go | 2 +- .../elastic/beats/filebeat/include/list.go | 16 +- .../filebeat/{prospector => input}/config.go | 10 +- .../{prospector => input}/docker/config.go | 0 .../prospector.go => input/docker/input.go} | 35 +- .../beats/filebeat/input/file/state.go | 159 +- .../beats/filebeat/input/file/states.go | 157 + .../file/{state_test.go => states_test.go} | 25 +- .../elastic/beats/filebeat/input/input.go | 151 + .../input_test.go} | 2 +- .../{prospector => input}/log/config.go | 16 +- .../{prospector => input}/log/config_test.go | 0 .../{prospector => input}/log/file.go | 0 .../{prospector => input}/log/harvester.go | 58 +- .../log/harvester_test.go | 0 .../log/prospector.go => input/log/input.go} | 200 +- .../log/input_other_test.go} | 12 +- .../log/input_test.go} | 61 +- .../filebeat/{prospector => input}/log/log.go | 0 .../log/prospector_windows_test.go | 2 +- .../{prospector => input}/log/stdin.go | 0 .../filebeat/{prospector => input}/plugin.go | 12 +- .../redis/_meta/Dockerfile | 0 .../{prospector => input}/redis/_meta/env | 0 .../{prospector => input}/redis/config.go | 1 - .../{prospector => input}/redis/doc.go | 2 +- .../{prospector => input}/redis/harvester.go | 0 .../prospector.go => input/redis/input.go} | 32 +- .../{prospector => input}/registry.go | 17 +- .../{prospector => input}/registry_test.go | 12 +- .../{prospector => input}/runnerfactory.go | 6 +- .../prospector.go => input/stdin/input.go} | 36 +- .../beats/filebeat/input/syslog/config.go | 60 + .../beats/filebeat/input/syslog/event.go | 312 + .../beats/filebeat/input/syslog/event_test.go | 91 + .../beats/filebeat/input/syslog/input.go | 241 + .../beats/filebeat/input/syslog/input_test.go | 157 + .../beats/filebeat/input/syslog/parser.go | 2207 ++ .../beats/filebeat/input/syslog/parser.rl | 85 + .../filebeat/input/syslog/parser_test.go | 612 + .../filebeat/input/syslog/syslog_rfc3164.rl | 60 + .../beats/filebeat/input/tcp/config.go | 26 + .../elastic/beats/filebeat/input/tcp/input.go | 117 + .../beats/filebeat/input/tcp/input_test.go | 30 + .../beats/filebeat/input/udp/config.go | 28 + .../elastic/beats/filebeat/input/udp/input.go | 106 + .../beats/filebeat/inputsource/inputsource.go | 1 + .../beats/filebeat/inputsource/network.go | 20 + .../filebeat/inputsource/network_metadata.go | 1 + .../beats/filebeat/inputsource/tcp/client.go | 79 + .../beats/filebeat/inputsource/tcp/config.go | 29 + .../beats/filebeat/inputsource/tcp/conn.go | 72 + .../filebeat/inputsource/tcp/conn_test.go | 43 + .../beats/filebeat/inputsource/tcp/scan.go | 31 + .../filebeat/inputsource/tcp/scan_test.go | 91 + .../beats/filebeat/inputsource/tcp/server.go | 160 + .../filebeat/inputsource/tcp/server_test.go | 245 + .../beats/filebeat/inputsource/udp/config.go | 14 + .../beats/filebeat/inputsource/udp/server.go | 112 + .../filebeat/inputsource/udp/server_test.go | 81 + .../github.com/elastic/beats/filebeat/main.go | 4 +- .../module/apache2/_meta/config.reference.yml | 8 +- .../module/apache2/access/manifest.yml | 2 +- .../access/test/test.log-expected.json | 12 + .../module/apache2/error/manifest.yml | 2 +- .../apache2/error/test/test.log-expected.json | 9 + .../module/auditd/_meta/config.reference.yml | 4 +- .../filebeat/module/auditd/log/manifest.yml | 2 +- .../auditd/log/test/test.log-expected.json | 6 + .../module/icinga/_meta/config.reference.yml | 12 +- .../filebeat/module/icinga/debug/manifest.yml | 2 +- .../icinga/debug/test/test.log-expected.json | 9 + .../filebeat/module/icinga/main/manifest.yml | 2 +- .../icinga/main/test/test.log-expected.json | 9 + .../module/icinga/startup/manifest.yml | 2 +- .../startup/test/test.log-expected.json | 6 + .../module/iis/_meta/config.reference.yml | 24 + .../filebeat/module/iis/_meta/config.yml | 17 + .../filebeat/module/iis/_meta/docs.asciidoc | 66 + .../filebeat/module/iis/_meta/fields.yml | 10 + .../kibana/6/dashboard/Filebeat-iis.json | 120 + .../module/iis/access/_meta/fields.yml | 159 + .../module/iis/access/config/iis-access.yml | 7 + .../module/iis/access/ingest/default.json | 53 + .../filebeat/module/iis/access/manifest.yml | 19 + .../filebeat/module/iis/access/test/test.log | 15 + .../iis/access/test/test.log-expected.json | 197 + .../module/iis/error/_meta/fields.yml | 73 + .../module/iis/error/config/iis-error.yml | 7 + .../module/iis/error/ingest/default.json | 42 + .../filebeat/module/iis/error/manifest.yml | 17 + .../filebeat/module/iis/error/test/test.log | 8 + .../iis/error/test/test.log-expected.json | 195 + .../filebeat/module/kafka/_meta/docs.asciidoc | 15 +- .../filebeat/module/kafka/log/manifest.yml | 2 +- .../log/test/controller.log-expected.json | 98 +- .../kafka/log/test/server.log-expected.json | 98 +- .../log/test/state-change.log-expected.json | 3 + .../filebeat/module/logstash/log/manifest.yml | 2 +- .../log/test/logstash-plain.log-expected.json | 3 + .../module/logstash/slowlog/manifest.yml | 2 +- .../test/slowlog-plain.log-expected.json | 3 + .../module/mongodb/_meta/config.reference.yml | 12 + .../filebeat/module/mongodb/_meta/config.yml | 8 + .../module/mongodb/_meta/docs.asciidoc | 56 + .../filebeat/module/mongodb/_meta/fields.yml | 10 + .../dashboard/Filebeat-Mongodb-overview.json | 89 + .../module/mongodb/log/_meta/fields.yml | 24 + .../mongodb/log/config/log.yml} | 0 .../module/mongodb/log/ingest/pipeline.json | 41 + .../filebeat/module/mongodb/log/manifest.yml | 11 + .../mongodb-debian-3.2.11.log-expected.json | 1080 + .../beats/filebeat/module/mongodb/module.yml | 3 + .../module/mysql/_meta/config.reference.yml | 8 +- .../filebeat/module/mysql/error/manifest.yml | 2 +- .../module/mysql/slowlog/manifest.yml | 2 +- .../module/nginx/_meta/config.reference.yml | 8 +- .../module/nginx/access/ingest/default.json | 15 +- .../filebeat/module/nginx/access/manifest.yml | 2 +- .../module/nginx/access/test/test.log | 1 + .../nginx/access/test/test.log-expected.json | 64 + .../filebeat/module/nginx/error/manifest.yml | 2 +- .../6/dashboard/osquery-compliance.json | 4 +- .../module/osquery/result/manifest.yml | 2 +- .../result/test/test.log-expected.json | 3 + .../postgresql/_meta/config.reference.yml | 4 +- .../postgresql/log/ingest/pipeline.json | 10 +- .../module/postgresql/log/manifest.yml | 2 +- .../postgresql-9.6-debian-with-slowlog.log | 6 +- ...-9.6-debian-with-slowlog.log-expected.json | 94 +- .../filebeat/module/redis/log/manifest.yml | 2 +- .../redis/log/test/test.log-expected.json | 12 + .../module/redis/slowlog/manifest.yml | 2 +- .../module/system/_meta/config.reference.yml | 8 +- .../module/system/auth/_meta/fields.yml | 1 + .../filebeat/module/system/auth/manifest.yml | 2 +- .../system/auth/test/test.log-expected.json | 30 + .../module/system/syslog/_meta/fields.yml | 1 + .../module/system/syslog/manifest.yml | 2 +- .../darwin-syslog-sample.log-expected.json | 9 + .../module/traefik/_meta/config.reference.yml | 4 +- .../module/traefik/_meta/docs.asciidoc | 2 - .../module/traefik/access/manifest.yml | 2 +- .../access/tests/test.log-expected.json | 6 + .../beats/filebeat/modules.d/iis.yml.disabled | 17 + .../filebeat/modules.d/mongodb.yml.disabled | 8 + .../beats/filebeat/prospector/prospector.go | 167 +- .../beats/filebeat/prospector/udp/config.go | 20 - .../filebeat/prospector/udp/harvester.go | 74 - .../filebeat/prospector/udp/prospector.go | 62 - .../beats/filebeat/registrar/registrar.go | 228 +- .../filebeat/registrar/registrar_test.go | 189 + .../scripts/fileset/config/config.yml | 6 + .../scripts/{module => }/fileset/fields.yml | 0 .../{module => }/fileset/ingest/pipeline.json | 0 .../scripts/{module => }/fileset/manifest.yml | 2 +- .../scripts/fileset/module-fileset.yml | 2 + .../scripts/generate_imports_helper.py | 12 +- .../filebeat/scripts/generator/fields/main.go | 17 +- .../scripts/generator/fields/main_test.go | 161 + .../scripts/generator/fileset/main.go | 89 +- .../filebeat/scripts/generator/generator.go | 96 + .../filebeat/scripts/generator/module/main.go | 52 + .../filebeat/scripts/module/_meta/config.yml | 8 + .../scripts/module/{ => _meta}/docs.asciidoc | 0 .../scripts/module/{ => _meta}/fields.yml | 0 .../beats/filebeat/scripts/module/module.yml | 1 + .../beats/filebeat/scripts/tester/main.go | 352 + .../filebeat/scripts/tester/main_test.go | 48 + .../files/registry/test-2lines-registry-6.3.0 | 1 + .../files/registry/test-2lines-registry-6.3.1 | 1 + .../test-2lines-registry-6.3.1-faulty | 4 + .../registry/test-2lines-registry-latest | 1 + .../beats/filebeat/tests/load/filebeat.yml | 2 +- .../tests/system/config/filebeat.yml.j2 | 119 +- ...spectors.yml.j2 => filebeat_inputs.yml.j2} | 8 +- .../system/module/test/test/manifest.yml | 2 +- .../tests/system/test_autodiscover.py | 8 +- .../beats/filebeat/tests/system/test_base.py | 3 +- .../filebeat/tests/system/test_crawler.py | 8 +- .../filebeat/tests/system/test_deprecated.py | 84 +- .../filebeat/tests/system/test_harvester.py | 22 +- .../{test_prospector.py => test_input.py} | 100 +- .../beats/filebeat/tests/system/test_json.py | 76 +- .../beats/filebeat/tests/system/test_load.py | 2 +- .../filebeat/tests/system/test_modules.py | 49 +- .../filebeat/tests/system/test_multiline.py | 4 - .../beats/filebeat/tests/system/test_redis.py | 12 +- .../filebeat/tests/system/test_registrar.py | 212 +- .../tests/system/test_registrar_upgrade.py | 86 + ...d_prospectors.py => test_reload_inputs.py} | 101 +- .../tests/system/test_reload_modules.py | 25 +- .../filebeat/tests/system/test_shutdown.py | 22 +- .../beats/filebeat/tests/system/test_stdin.py | 106 + .../filebeat/tests/system/test_syslog.py | 104 + .../beats/filebeat/tests/system/test_tcp.py | 68 + .../beats/filebeat/tests/system/test_udp.py | 12 +- .../elastic/beats/filebeat/util/data.go | 2 +- .../beats/generator/beat/{beat}/.travis.yml | 2 +- .../beats/generator/beat/{beat}/Makefile | 3 +- .../beats/generator/beat/{beat}/README.md | 2 +- .../beat/{beat}/beater/{beat}.go.tmpl | 6 +- .../elastic/beats/generator/common/Makefile | 2 + .../generator/metricbeat/{beat}/Makefile | 3 +- .../heartbeat/docs/configuring-howto.asciidoc | 1 - .../beats/heartbeat/docs/fields.asciidoc | 443 +- .../heartbeat/docs/getting-started.asciidoc | 16 +- .../heartbeat/docs/heartbeat-options.asciidoc | 60 +- .../beats/heartbeat/docs/index.asciidoc | 18 +- .../docs/securing-heartbeat.asciidoc | 1 + .../docs/setting-up-running.asciidoc | 4 +- .../beats/heartbeat/heartbeat.reference.yml | 114 +- .../monitors/active/http/_meta/fields.yml | 6 + .../heartbeat/monitors/active/http/check.go | 21 +- .../monitors/active/http/check_test.go | 110 + .../heartbeat/monitors/active/http/config.go | 5 +- .../elastic/beats/heartbeat/monitors/util.go | 11 +- .../elastic/beats/libbeat/.gitignore | 1 + .../elastic/beats/libbeat/Dockerfile | 2 +- .../beats/libbeat/_meta/config.reference.yml | 114 +- .../beats/libbeat/autodiscover/appender.go | 91 + .../libbeat/autodiscover/appender_test.go | 77 + .../autodiscover/appenders/config/config.go | 106 + .../appenders/config/config_test.go | 106 + .../autodiscover/appenders/registry.go | 31 + .../libbeat/autodiscover/autodiscover.go | 9 +- .../libbeat/autodiscover/autodiscover_test.go | 8 +- .../beats/libbeat/autodiscover/builder.go | 112 + .../libbeat/autodiscover/builder/helper.go | 119 + .../autodiscover/builder/helper_test.go | 57 + .../libbeat/autodiscover/builder/plugin.go | 31 + .../libbeat/autodiscover/builder_test.go | 57 + .../beats/libbeat/autodiscover/config.go | 16 +- .../beats/libbeat/autodiscover/provider.go | 19 - .../autodiscover/providers/docker/config.go | 22 +- .../autodiscover/providers/docker/docker.go | 80 +- .../docker/docker_integration_test.go | 9 +- .../providers/docker/docker_test.go | 90 + .../providers/kubernetes/config.go | 16 +- .../providers/kubernetes/kubernetes.go | 252 +- .../providers/kubernetes/kubernetes_test.go | 272 + .../libbeat/autodiscover/providers/plugin.go | 31 + .../beats/libbeat/autodiscover/registry.go | 27 + .../libbeat/autodiscover/template/config.go | 70 +- .../elastic/beats/libbeat/beat/beat.go | 7 +- .../elastic/beats/libbeat/beat/pipeline.go | 4 + .../elastic/beats/libbeat/cfgfile/reload.go | 5 - .../beats/libbeat/cmd/instance/beat.go | 114 +- .../beats/libbeat/cmd/instance/metrics.go | 29 +- .../elastic/beats/libbeat/cmd/setup.go | 7 +- .../elastic/beats/libbeat/cmd/version.go | 9 +- .../beats/libbeat/common/atomic/atomic32.go | 33 + .../beats/libbeat/common/atomic/atomic64.go | 33 + .../libbeat/common/atomic/atomic_test.go | 44 + .../beats/libbeat/common/cfgtype/byte_size.go | 36 + .../libbeat/common/cfgtype/byte_size_test.go | 37 + .../elastic/beats/libbeat/common/coerce.go | 40 + .../beats/libbeat/common/coerce_test.go | 57 + .../beats/libbeat/common/docker/client.go | 49 + .../libbeat/common/docker/client_test.go | 62 + .../beats/libbeat/common/docker/watcher.go | 40 +- .../libbeat/common/docker/watcher_test.go | 203 +- .../elastic/beats/libbeat/common/event.go | 18 +- .../beats/libbeat/common/event_test.go | 121 +- .../elastic/beats/libbeat/common/field.go | 95 +- .../beats/libbeat/common/field_test.go | 59 +- .../beats/libbeat/common/file/file_other.go | 8 +- .../libbeat/common/file/file_other_test.go | 19 + .../beats/libbeat/common/file/file_windows.go | 9 +- .../beats/libbeat/common/file/helper_other.go | 14 + .../libbeat/common/kubernetes/eventhandler.go | 84 + .../libbeat/common/kubernetes/metadata.go | 9 +- .../common/kubernetes/metadata_test.go | 29 + .../beats/libbeat/common/kubernetes/types.go | 82 +- .../libbeat/common/kubernetes/types_test.go | 68 + .../beats/libbeat/common/kubernetes/util.go | 98 +- .../libbeat/common/kubernetes/watcher.go | 342 +- .../elastic/beats/libbeat/common/mapstr.go | 165 +- .../beats/libbeat/common/mapstr_test.go | 165 + .../libbeat/common/safemapstr/safemapstr.go | 96 + .../common/safemapstr/safemapstr_test.go | 65 + .../common/schema/mapstriface/mapstriface.go | 38 +- .../schema/mapstriface/mapstriface_test.go | 23 +- .../common/testdata/json_array_dedot.json | 5 - .../common/testdata/json_array_with_dots.json | 5 - .../common/testdata/json_map_dedot.json | 10 - .../common/testdata/json_map_with_dots.json | 10 - .../beats/libbeat/dashboards/config.go | 14 + .../beats/libbeat/dashboards/dashboards.go | 8 +- .../beats/libbeat/dashboards/importer.go | 16 +- .../beats/libbeat/dashboards/kibana_loader.go | 22 +- .../beats/libbeat/docs/breaking.asciidoc | 183 +- .../libbeat/docs/command-reference.asciidoc | 65 +- .../libbeat/docs/communitybeats.asciidoc | 15 +- .../libbeat/docs/config-file-format.asciidoc | 8 +- .../docs/contributing-to-beats.asciidoc | 4 +- .../beats/libbeat/docs/dashboards.asciidoc | 108 +- .../libbeat/docs/dashboardsconfig.asciidoc | 30 +- .../beats/libbeat/docs/getting-help.asciidoc | 6 +- .../libbeat/docs/gettingstarted.asciidoc | 499 +- .../elastic/beats/libbeat/docs/https.asciidoc | 14 +- .../libbeat/docs/images/beats-platform.png | Bin 99822 -> 69213 bytes .../elastic/beats/libbeat/docs/index.asciidoc | 12 +- .../libbeat/docs/installing-beats.asciidoc | 30 - .../beats/libbeat/docs/keystore.asciidoc | 10 +- .../beats/libbeat/docs/loggingconfig.asciidoc | 13 +- .../docs/monitoring/monitoring-beats.asciidoc | 28 +- .../beats/libbeat/docs/outputconfig.asciidoc | 152 +- .../beats/libbeat/docs/overview.asciidoc | 44 +- .../libbeat/docs/processors-using.asciidoc | 257 +- .../beats/libbeat/docs/queueconfig.asciidoc | 186 +- .../beats/libbeat/docs/reference-yml.asciidoc | 12 - .../beats/libbeat/docs/regexp.asciidoc | 8 +- .../beats/libbeat/docs/release.asciidoc | 8 +- .../beats/libbeat/docs/repositories.asciidoc | 2 +- .../libbeat/docs/security/basic-auth.asciidoc | 133 +- .../docs/security/beats-system.asciidoc | 23 + .../docs/security/securing-beats.asciidoc | 78 +- .../beats/libbeat/docs/security/tls.asciidoc | 8 +- .../docs/security/user-access.asciidoc | 56 +- .../libbeat/docs/shared-autodiscover.asciidoc | 118 +- .../docs/shared-beats-attributes.asciidoc | 5 +- .../docs/shared-config-ingest.asciidoc | 27 +- .../libbeat/docs/shared-configuring.asciidoc | 23 +- .../docs/shared-directory-layout.asciidoc | 2 +- .../beats/libbeat/docs/shared-docker.asciidoc | 36 +- .../docs/shared-download-and-install.asciidoc | 14 +- .../libbeat/docs/shared-env-vars.asciidoc | 4 +- .../beats/libbeat/docs/shared-faq.asciidoc | 7 +- .../shared-getting-started-intro.asciidoc | 13 + .../docs/shared-kibana-config.asciidoc | 12 +- .../docs/shared-logstash-config.asciidoc | 18 +- .../libbeat/docs/shared-path-config.asciidoc | 12 +- .../libbeat/docs/shared-shutdown.asciidoc | 24 + .../libbeat/docs/shared-ssl-config.asciidoc | 36 +- .../docs/shared-ssl-logstash-config.asciidoc | 6 +- .../docs/shared-template-load.asciidoc | 50 +- .../docs/step-configure-credentials.asciidoc | 19 +- .../libbeat/docs/template-config.asciidoc | 17 +- .../beats/libbeat/docs/version.asciidoc | 8 +- .../elastic/beats/libbeat/docs/yaml.asciidoc | 7 +- .../elastic/beats/libbeat/logp/config.go | 1 + .../elastic/beats/libbeat/logp/core.go | 11 +- .../elastic/beats/libbeat/logp/core_test.go | 33 +- .../elastic/beats/libbeat/logp/global.go | 4 +- .../elastic/beats/libbeat/logp/logger.go | 46 +- .../libbeat/metric/system/memory/memory.go | 32 + .../libbeat/metric/system/process/process.go | 2 +- .../metric/system/process/process_linux.go | 20 + .../metric/system/process/process_other.go | 10 + .../metric/system/process/process_test.go | 7 + .../beats/libbeat/ml-importer/importer.go | 139 +- .../monitoring/report/elasticsearch/client.go | 7 +- .../report/elasticsearch/elasticsearch.go | 14 +- .../beats/libbeat/outputs/codec/common.go | 2 +- .../beats/libbeat/outputs/codec/json/json.go | 4 +- .../libbeat/outputs/elasticsearch/enc.go | 4 +- .../outputs/elasticsearch/estest/estest.go | 2 +- .../beats/libbeat/outputs/kafka/client.go | 8 + .../beats/libbeat/outputs/kafka/log.go | 8 +- .../elastic/beats/libbeat/plugin/cli.go | 3 +- .../elastic/beats/libbeat/plugin/cli_stub.go | 2 +- .../elastic/beats/libbeat/plugin/load.go | 3 +- .../elastic/beats/libbeat/plugin/load_stub.go | 2 +- .../processors/actions/extract_field.go | 6 +- .../processors/actions/extract_field_test.go | 37 +- .../processors/actions/include_fields_test.go | 59 + .../libbeat/processors/actions/rename.go | 104 + .../libbeat/processors/actions/rename_test.go | 343 + .../add_docker_metadata.go | 45 +- .../add_docker_metadata_test.go | 16 +- .../processors/add_docker_metadata/config.go | 15 +- .../add_host_metadata/_meta/fields.yml | 33 + .../add_host_metadata/add_host_metadata.go | 80 + .../add_host_metadata_test.go | 34 + .../add_kubernetes_metadata/cache.go | 62 + .../add_kubernetes_metadata/kubernetes.go | 126 +- .../kubernetes_test.go | 91 + .../beats/libbeat/processors/condition.go | 75 +- .../libbeat/processors/condition_test.go | 49 +- .../beats/libbeat/processors/config.go | 24 +- .../beats/libbeat/processors/config_test.go | 10 + .../libbeat/publisher/includes/includes.go | 4 + .../libbeat/publisher/pipeline/client_ack.go | 12 +- .../beats/libbeat/publisher/pipeline/log.go | 5 - .../libbeat/publisher/pipeline/module.go | 13 +- .../libbeat/publisher/pipeline/pipeline.go | 29 +- .../libbeat/publisher/pipeline/processor.go | 45 +- .../publisher/pipeline/processor_test.go | 18 +- .../beats/libbeat/publisher/pipeline/retry.go | 3 +- .../pipeline/{default.yml => default_mem.yml} | 2 +- .../pipeline/{direct.yml => direct_mem.yml} | 2 +- .../stress/configs/pipeline/small_spool.yml | 11 + .../libbeat/publisher/pipeline/stress/gen.go | 12 +- .../libbeat/publisher/pipeline/stress/run.go | 5 +- .../publisher/pipeline/stress/stress_test.go | 37 +- .../publisher/queue/memqueue/broker.go | 4 +- .../libbeat/publisher/queue/memqueue/log.go | 6 - .../publisher/queue/memqueue/queue_test.go | 2 +- .../queue/queuetest/producer_cancel.go | 2 +- .../publisher/queue/queuetest/queuetest.go | 14 +- .../libbeat/publisher/queue/spool/codec.go | 179 + .../libbeat/publisher/queue/spool/config.go | 112 + .../libbeat/publisher/queue/spool/consume.go | 122 + .../libbeat/publisher/queue/spool/inbroker.go | 522 + .../publisher/queue/spool/internal_api.go | 44 + .../libbeat/publisher/queue/spool/log.go | 54 + .../libbeat/publisher/queue/spool/module.go | 48 + .../publisher/queue/spool/outbroker.go | 493 + .../libbeat/publisher/queue/spool/produce.go | 190 + .../libbeat/publisher/queue/spool/spool.go | 231 + .../publisher/queue/spool/spool_test.go | 130 + .../libbeat/publisher/queue/spool/timer.go | 55 + .../elastic/beats/libbeat/scripts/Makefile | 89 +- .../scripts/cmd/stress_pipeline/main.go | 13 +- .../libbeat/scripts/generate_fields_docs.py | 3 +- .../elastic/beats/libbeat/service/service.go | 4 +- .../beats/libbeat/setup/kibana/client.go | 32 +- .../beats/libbeat/setup/kibana/client_test.go | 56 + .../elastic/beats/libbeat/template/config.go | 15 +- .../elastic/beats/libbeat/template/load.go | 2 +- .../beats/libbeat/template/processor.go | 23 +- .../beats/libbeat/template/processor_test.go | 58 + .../beats/libbeat/template/template.go | 44 +- .../beats/libbeat/template/template_test.go | 105 + .../beats/libbeat/tests/compose/compose.go | 32 +- .../files}/testbeat-dashboards.zip | Bin .../beats/libbeat/tests/system/beat/beat.py | 41 +- .../libbeat/tests/system/beat/compose.py | 80 +- .../tests/system/config/libbeat.yml.j2 | 93 + .../libbeat/tests/system/requirements.txt | 40 +- .../beats/libbeat/tests/system/test_cmd.py | 2 +- .../libbeat/tests/system/test_dashboard.py | 32 +- .../elastic/beats/libbeat/version/helper.go | 22 + .../elastic/beats/libbeat/version/version.go | 3 +- .../beats/licenses/APACHE-LICENSE-2.0.txt | 202 + .../beats/licenses/ELASTIC-LICENSE.txt | 223 + .../elastic/beats/metricbeat/Dockerfile | 2 +- .../elastic/beats/metricbeat/Makefile | 6 +- .../elastic/beats/metricbeat/NOTICE.txt | Bin 0 -> 210 bytes .../appender/kubernetes/token/config.go | 14 + .../appender/kubernetes/token/token.go | 123 + .../appender/kubernetes/token/token_test.go | 91 + .../{beater => autodiscover}/autodiscover.go | 2 +- .../autodiscover/builder/hints/config.go | 15 + .../autodiscover/builder/hints/metrics.go | 170 + .../builder/hints/metrics_test.go | 207 + .../beats/metricbeat/autodiscover/include.go | 9 + .../beats/metricbeat/beater/metricbeat.go | 3 +- .../beats/metricbeat/docker-compose.yml | 23 +- .../docs/autodiscover-docker-config.asciidoc | 2 +- .../docs/autodiscover-hints.asciidoc | 112 + .../autodiscover-kubernetes-config.asciidoc | 3 + .../beats/metricbeat/docs/fields.asciidoc | 9041 ++++--- .../metricbeat/docs/gettingstarted.asciidoc | 234 +- .../beats/metricbeat/docs/images/icon-no.png | Bin 0 -> 250 bytes .../beats/metricbeat/docs/images/icon-yes.png | Bin 0 -> 343 bytes .../beats/metricbeat/docs/index.asciidoc | 10 +- .../docs/metricbeat-options.asciidoc | 44 +- .../docs/modules/aerospike.asciidoc | 4 +- .../metricbeat/docs/modules/apache.asciidoc | 18 +- .../metricbeat/docs/modules/ceph.asciidoc | 5 +- .../docs/modules/couchbase.asciidoc | 5 +- .../metricbeat/docs/modules/docker.asciidoc | 16 +- .../docs/modules/dropwizard.asciidoc | 5 +- .../docs/modules/elasticsearch.asciidoc | 6 +- .../metricbeat/docs/modules/etcd.asciidoc | 5 +- .../metricbeat/docs/modules/golang.asciidoc | 4 +- .../docs/modules/golang/expvar.asciidoc | 2 +- .../docs/modules/golang/heap.asciidoc | 2 +- .../metricbeat/docs/modules/graphite.asciidoc | 25 +- .../metricbeat/docs/modules/haproxy.asciidoc | 7 +- .../metricbeat/docs/modules/http.asciidoc | 7 +- .../docs/modules/http/json.asciidoc | 2 - .../docs/modules/http/server.asciidoc | 2 +- .../metricbeat/docs/modules/jolokia.asciidoc | 28 +- .../docs/modules/jolokia/jmx.asciidoc | 2 - .../metricbeat/docs/modules/kafka.asciidoc | 6 +- .../metricbeat/docs/modules/kibana.asciidoc | 7 +- .../docs/modules/kubernetes.asciidoc | 23 +- .../docs/modules/kubernetes/event.asciidoc | 2 +- .../kubernetes/state_statefulset.asciidoc | 21 + .../metricbeat/docs/modules/kvm.asciidoc | 43 + .../docs/modules/kvm/dommemstat.asciidoc | 23 + .../metricbeat/docs/modules/logstash.asciidoc | 8 +- .../docs/modules/logstash/node.asciidoc | 2 +- .../docs/modules/logstash/node_stats.asciidoc | 2 +- .../docs/modules/memcached.asciidoc | 2 + .../metricbeat/docs/modules/mongodb.asciidoc | 5 +- .../docs/modules/mongodb/collstats.asciidoc | 2 - .../docs/modules/mongodb/dbstats.asciidoc | 2 - .../docs/modules/mongodb/status.asciidoc | 2 - .../metricbeat/docs/modules/munin.asciidoc | 42 + .../docs/modules/munin/node.asciidoc | 17 + .../metricbeat/docs/modules/mysql.asciidoc | 2 + .../metricbeat/docs/modules/nginx.asciidoc | 7 +- .../metricbeat/docs/modules/php_fpm.asciidoc | 5 +- .../docs/modules/postgresql.asciidoc | 3 + .../docs/modules/prometheus.asciidoc | 20 +- .../metricbeat/docs/modules/rabbitmq.asciidoc | 14 +- .../docs/modules/rabbitmq/connection.asciidoc | 23 + .../metricbeat/docs/modules/redis.asciidoc | 3 + .../metricbeat/docs/modules/system.asciidoc | 95 +- .../docs/modules/system/raid.asciidoc | 2 +- .../metricbeat/docs/modules/uwsgi.asciidoc | 10 +- .../docs/modules/uwsgi/status.asciidoc | 2 +- .../metricbeat/docs/modules/vsphere.asciidoc | 3 +- .../metricbeat/docs/modules/windows.asciidoc | 10 +- .../docs/modules/zookeeper.asciidoc | 4 +- .../metricbeat/docs/modules_list.asciidoc | 150 +- .../docs/running-on-docker.asciidoc | 8 +- .../docs/securing-metricbeat.asciidoc | 3 +- .../docs/setting-up-running.asciidoc | 4 +- .../elastic/beats/metricbeat/helper/http.go | 47 +- .../beats/metricbeat/helper/http_test.go | 71 + .../beats/metricbeat/helper/prometheus.go | 22 +- .../elastic/beats/metricbeat/include/list.go | 6 + .../elastic/beats/metricbeat/mb/builders.go | 2 +- .../elastic/beats/metricbeat/mb/registry.go | 4 +- .../beats/metricbeat/mb/registry_test.go | 2 +- .../metricbeat/mb/testing/data_generator.go | 26 +- .../beats/metricbeat/mb/testing/modules.go | 50 +- .../beats/metricbeat/metricbeat.reference.yml | 290 +- .../aerospike/_meta/config.reference.yml | 5 + .../module/aerospike/_meta/config.yml | 3 - .../module/aerospike/_meta/docs.asciidoc | 2 +- .../module/aerospike/namespace/namespace.go | 30 +- .../module/apache/_meta/Dockerfile.2.4.12 | 4 + .../module/apache/_meta/config.reference.yml | 1 + .../metricbeat/module/apache/_meta/config.yml | 6 +- .../module/apache/_meta/docs.asciidoc | 6 +- .../beats/metricbeat/module/apache/_meta/env | 1 + .../metricbeat/module/apache/status/data.go | 35 +- .../metricbeat/module/apache/status/status.go | 13 +- .../module/apache/status/status_test.go | 2 +- .../module/ceph/_meta/config.reference.yml | 5 + .../metricbeat/module/ceph/_meta/config.yml | 9 +- .../module/ceph/_meta/docs.asciidoc | 2 +- .../module/ceph/cluster_disk/cluster_disk.go | 12 +- .../ceph/cluster_health/cluster_health.go | 12 +- .../ceph/cluster_status/cluster_status.go | 12 +- .../ceph/monitor_health/monitor_health.go | 12 +- .../metricbeat/module/ceph/osd_df/osd_df.go | 12 +- .../module/ceph/osd_tree/osd_tree.go | 12 +- .../module/ceph/pool_disk/pool_disk.go | 12 +- .../couchbase/_meta/config.reference.yml | 5 + .../module/couchbase/_meta/config.yml | 4 +- .../module/couchbase/_meta/docs.asciidoc | 2 +- .../module/couchbase/bucket/bucket.go | 13 +- .../module/couchbase/cluster/cluster.go | 13 +- .../metricbeat/module/couchbase/node/node.go | 13 +- .../module/docker/_meta/config.reference.yml | 22 + .../metricbeat/module/docker/_meta/config.yml | 9 +- .../module/docker/_meta/docs.asciidoc | 2 +- .../beats/metricbeat/module/docker/config.go | 10 +- .../module/docker/container/container.go | 22 +- .../module/docker/container/data.go | 16 +- .../module/docker/cpu/_meta/data.json | 48 +- .../module/docker/cpu/_meta/fields.yml | 24 +- .../beats/metricbeat/module/docker/cpu/cpu.go | 19 +- .../metricbeat/module/docker/cpu/cpu_test.go | 57 +- .../metricbeat/module/docker/cpu/helper.go | 96 +- .../metricbeat/module/docker/cpu/mock_cpu.go | 36 - .../module/docker/diskio/_meta/data.json | 30 +- .../module/docker/diskio/_meta/fields.yml | 63 +- .../metricbeat/module/docker/diskio/data.go | 15 + .../metricbeat/module/docker/diskio/diskio.go | 25 +- .../module/docker/diskio/diskio_test.go | 101 +- .../metricbeat/module/docker/diskio/helper.go | 71 +- .../beats/metricbeat/module/docker/docker.go | 102 +- .../module/docker/healthcheck/data.go | 11 +- .../module/docker/healthcheck/healthcheck.go | 20 +- .../beats/metricbeat/module/docker/helper.go | 28 +- .../metricbeat/module/docker/helper_test.go | 43 + .../metricbeat/module/docker/image/data.go | 14 +- .../metricbeat/module/docker/image/image.go | 23 +- .../metricbeat/module/docker/info/data.go | 6 +- .../metricbeat/module/docker/info/info.go | 19 +- .../metricbeat/module/docker/memory/helper.go | 13 +- .../metricbeat/module/docker/memory/memory.go | 19 +- .../module/docker/memory/memory_test.go | 93 +- .../module/docker/network/_meta/data.json | 25 +- .../module/docker/network/_meta/fields.yml | 52 +- .../metricbeat/module/docker/network/data.go | 54 +- .../module/docker/network/helper.go | 16 +- .../module/docker/network/network.go | 27 +- .../network/network_integration_test.go | 4 +- .../github.com/fsouza/go-dockerclient/AUTHORS | 169 - .../fsouza/go-dockerclient/DOCKER-LICENSE | 6 - .../fsouza/go-dockerclient/Makefile | 41 - .../fsouza/go-dockerclient/README.markdown | 112 - .../github.com/fsouza/go-dockerclient/auth.go | 182 - .../fsouza/go-dockerclient/change.go | 43 - .../fsouza/go-dockerclient/client.go | 1028 - .../fsouza/go-dockerclient/client_unix.go | 32 - .../fsouza/go-dockerclient/client_windows.go | 46 - .../fsouza/go-dockerclient/container.go | 1545 -- .../github.com/fsouza/go-dockerclient/env.go | 168 - .../fsouza/go-dockerclient/event.go | 391 - .../github.com/fsouza/go-dockerclient/exec.go | 209 - .../fsouza/go-dockerclient/image.go | 647 - .../fsouza/go-dockerclient/jsonmessage.go | 225 - .../github.com/fsouza/go-dockerclient/misc.go | 177 - .../fsouza/go-dockerclient/network.go | 321 - .../github.com/fsouza/go-dockerclient/node.go | 130 - .../fsouza/go-dockerclient/service.go | 169 - .../fsouza/go-dockerclient/signal.go | 49 - .../fsouza/go-dockerclient/swarm.go | 156 - .../github.com/fsouza/go-dockerclient/tar.go | 71 - .../github.com/fsouza/go-dockerclient/task.go | 70 - .../github.com/fsouza/go-dockerclient/tls.go | 118 - .../fsouza/go-dockerclient/volume.go | 171 - .../github.com/hashicorp/go-cleanhttp/LICENSE | 363 - .../hashicorp/go-cleanhttp/README.md | 30 - .../hashicorp/go-cleanhttp/cleanhttp.go | 56 - .../github.com/hashicorp/go-cleanhttp/doc.go | 20 - .../module/docker/vendor/vendor.json | 22 - .../dropwizard/_meta/config.reference.yml | 7 + .../module/dropwizard/_meta/config.yml | 4 +- .../module/dropwizard/_meta/docs.asciidoc | 2 +- .../module/dropwizard/collector/collector.go | 13 +- .../module/elasticsearch/_meta/Dockerfile | 2 +- .../elasticsearch/_meta/config.reference.yml | 4 + .../module/elasticsearch/_meta/config.yml | 4 +- .../module/elasticsearch/_meta/docs.asciidoc | 4 +- .../module/elasticsearch/node/node.go | 13 +- .../node_stats/_meta/docs.asciidoc | 2 - .../elasticsearch/node_stats/node_stats.go | 13 +- .../elasticsearch/test_elasticsearch.py | 31 + .../module/etcd/_meta/config.reference.yml | 4 + .../metricbeat/module/etcd/_meta/config.yml | 5 +- .../module/etcd/_meta/docs.asciidoc | 2 +- .../metricbeat/module/etcd/leader/leader.go | 13 +- .../beats/metricbeat/module/etcd/self/self.go | 13 +- .../metricbeat/module/etcd/store/store.go | 13 +- .../metricbeat/module/golang/_meta/fields.yml | 2 +- .../dashboard/Metricbeat-golang-overview.json | 10 +- .../module/golang/expvar/_meta/fields.yml | 2 +- .../metricbeat/module/golang/expvar/expvar.go | 8 +- .../module/golang/heap/_meta/fields.yml | 2 +- .../metricbeat/module/golang/heap/heap.go | 8 +- .../graphite/_meta/config.reference.yml | 22 + .../module/graphite/_meta/config.yml | 9 - .../module/graphite/_meta/docs.asciidoc | 1 + .../module/graphite/server/server.go | 6 +- .../module/haproxy/_meta/Dockerfile | 2 +- .../module/haproxy/_meta/Dockerfile.1.6 | 5 + .../module/haproxy/_meta/Dockerfile.1.7 | 5 + .../module/haproxy/_meta/config.reference.yml | 5 + .../module/haproxy/_meta/config.yml | 2 - .../module/haproxy/_meta/docs.asciidoc | 6 +- .../beats/metricbeat/module/haproxy/_meta/env | 2 + .../metricbeat/module/haproxy/info/info.go | 7 +- .../metricbeat/module/haproxy/stat/stat.go | 7 +- ...ation_test.go => stat_integration_test.go} | 0 .../metricbeat/module/http/_meta/Dockerfile | 2 +- .../metricbeat/module/http/_meta/config.yml | 3 + .../metricbeat/module/http/_meta/fields.yml | 2 +- .../metricbeat/module/http/_meta/test/main.go | 11 +- .../module/http/json/_meta/data.json | 5 +- .../module/http/json/_meta/fields.yml | 2 +- .../module/http/json/_meta/test/config.yml | 1 + .../beats/metricbeat/module/http/json/json.go | 83 +- .../module/http/json/json_integration_test.go | 44 +- .../module/http/server/_meta/fields.yml | 2 +- .../metricbeat/module/http/server/server.go | 2 +- .../module/jolokia/_meta/Dockerfile | 2 +- .../module/jolokia/_meta/config.yml | 24 +- .../module/jolokia/_meta/fields.yml | 2 +- .../module/jolokia/jmx/_meta/docs.asciidoc | 8 +- .../module/jolokia/jmx/_meta/fields.yml | 2 +- .../_meta/test/jolokia_response_wildcard.json | 24 + .../metricbeat/module/jolokia/jmx/config.go | 88 +- .../module/jolokia/jmx/config_test.go | 81 + .../metricbeat/module/jolokia/jmx/data.go | 120 +- .../module/jolokia/jmx/data_test.go | 213 +- .../metricbeat/module/jolokia/jmx/jmx.go | 46 +- .../jolokia/jmx/jmx_integration_test.go | 115 +- .../module/kafka/_meta/config.reference.yml | 26 + .../metricbeat/module/kafka/_meta/config.yml | 23 - .../module/kafka/_meta/docs.asciidoc | 3 + .../metricbeat/module/kafka/_meta/run.sh | 2 +- .../kafka/consumergroup/consumergroup.go | 6 +- .../module/kafka/partition/partition.go | 7 +- .../metricbeat/module/kibana/_meta/Dockerfile | 2 +- .../module/kibana/_meta/config.reference.yml | 5 + .../metricbeat/module/kibana/_meta/config.yml | 4 +- .../module/kibana/_meta/docs.asciidoc | 4 +- .../metricbeat/module/kibana/status/status.go | 14 +- .../kubernetes/_meta/config.reference.yml | 35 + .../module/kubernetes/_meta/config.yml | 29 +- .../module/kubernetes/_meta/docs.asciidoc | 2 + .../kubernetes/_meta/test/kube-state-metrics | 77 + .../kubernetes/_meta/test/stats_summary.json | 2 +- .../kubernetes/container/_meta/fields.yml | 20 + .../module/kubernetes/container/container.go | 16 +- .../kubernetes/container/container_test.go | 16 +- .../module/kubernetes/container/data.go | 26 +- .../module/kubernetes/event/_meta/fields.yml | 2 +- .../module/kubernetes/event/config.go | 2 +- .../module/kubernetes/event/event.go | 91 +- .../module/kubernetes/event/types.go | 46 - .../module/kubernetes/event/watcher.go | 118 - .../metricbeat/module/kubernetes/node/node.go | 13 +- .../module/kubernetes/pod/_meta/fields.yml | 43 + .../metricbeat/module/kubernetes/pod/data.go | 54 +- .../metricbeat/module/kubernetes/pod/pod.go | 16 +- .../module/kubernetes/pod/pod_test.go | 17 +- .../module/kubernetes/state_container/data.go | 16 +- .../state_container/state_container.go | 6 +- .../state_container/state_container_test.go | 106 +- .../kubernetes/state_deployment/data.go | 10 +- .../state_deployment/state_deployment.go | 6 +- .../state_deployment/state_deployment_test.go | 83 +- .../module/kubernetes/state_node/data.go | 2 + .../kubernetes/state_node/state_node.go | 6 +- .../kubernetes/state_node/state_node_test.go | 77 +- .../module/kubernetes/state_pod/data.go | 10 +- .../module/kubernetes/state_pod/state_pod.go | 6 +- .../kubernetes/state_pod/state_pod_test.go | 87 +- .../kubernetes/state_replicaset/data.go | 10 +- .../state_replicaset/state_replicaset.go | 6 +- .../state_replicaset/state_replicaset_test.go | 76 +- .../state_statefulset/_meta/data.json | 30 + .../state_statefulset/_meta/docs.asciidoc | 1 + .../state_statefulset/_meta/fields.yml | 40 + .../kubernetes/state_statefulset/data.go | 53 + .../state_statefulset/state_statefulset.go | 63 + .../state_statefulset_test.go | 111 + .../module/kubernetes/system/system.go | 13 +- .../module/kubernetes/util/metrics_cache.go | 105 + .../kubernetes/util/metrics_cache_test.go | 69 + .../module/kubernetes/volume/volume.go | 13 +- .../metricbeat/module/kvm/_meta/config.yml | 8 + .../metricbeat/module/kvm/_meta/docs.asciidoc | 4 + .../metricbeat/module/kvm/_meta/fields.yml | 11 + .../beats/metricbeat/module/kvm/doc.go | 2 + .../module/kvm/dommemstat/_meta/data.json | 19 + .../module/kvm/dommemstat/_meta/docs.asciidoc | 3 + .../module/kvm/dommemstat/_meta/fields.yml | 26 + .../module/kvm/dommemstat/dommemstat.go | 158 + .../module/kvm/dommemstat/dommemstat_test.go | 60 + .../vendor/github.com/davecgh/go-xdr}/LICENSE | 4 +- .../github.com/davecgh/go-xdr/xdr2/decode.go | 873 + .../github.com/davecgh/go-xdr/xdr2/doc.go | 171 + .../github.com/davecgh/go-xdr/xdr2/encode.go | 669 + .../github.com/davecgh/go-xdr/xdr2/error.go | 177 + .../digitalocean/go-libvirt/AUTHORS | 19 + .../digitalocean/go-libvirt/CONTRIBUTING.md | 30 + .../digitalocean/go-libvirt/LICENSE.md | 195 + .../digitalocean/go-libvirt/README.md | 153 + .../digitalocean/go-libvirt/const.gen.go | 1995 ++ .../github.com/digitalocean/go-libvirt/doc.go | 76 + .../internal/constants/constants.gen.go | 937 + .../internal/constants/constants.go | 48 + .../digitalocean/go-libvirt/libvirt.gen.go | 17020 +++++++++++++ .../digitalocean/go-libvirt/libvirt.go | 505 + .../digitalocean/go-libvirt/libvirt.yml | 59 + .../digitalocean/go-libvirt/libvirtd.conf | 7 + .../go-libvirt/libvirttest/libvirt.go | 649 + .../github.com/digitalocean/go-libvirt/rpc.go | 445 + .../metricbeat/module/kvm/vendor/vendor.json | 31 + .../module/logstash/_meta/Dockerfile | 2 +- .../logstash/_meta/config.reference.yml | 5 + .../module/logstash/_meta/config.yml | 6 +- .../module/logstash/_meta/docs.asciidoc | 1 + .../module/logstash/_meta/fields.yml | 2 +- .../module/logstash/node/_meta/data.json | 6 +- .../module/logstash/node/_meta/fields.yml | 1 + .../metricbeat/module/logstash/node/node.go | 15 +- .../logstash/node_stats/_meta/data.json | 13 +- .../logstash/node_stats/_meta/fields.yml | 4 +- .../module/logstash/node_stats/node_stats.go | 22 +- .../memcached/_meta/config.reference.yml | 5 + .../module/memcached/_meta/config.yml | 2 - .../module/memcached/_meta/docs.asciidoc | 1 + .../module/memcached/stats/stats.go | 6 +- .../module/mongodb/_meta/config.reference.yml | 17 + .../module/mongodb/_meta/config.yml | 14 - .../module/mongodb/_meta/docs.asciidoc | 2 + .../module/mongodb/_meta/fields.yml | 2 +- .../module/mongodb/collstats/_meta/fields.yml | 1 + .../module/mongodb/collstats/collstats.go | 10 +- .../module/mongodb/dbstats/_meta/fields.yml | 2 +- .../module/mongodb/dbstats/dbstats.go | 10 +- .../module/mongodb/status/_meta/fields.yml | 2 +- .../module/mongodb/status/status.go | 11 +- .../metricbeat/module/munin/_meta/Dockerfile | 13 + .../module/munin/_meta/config.reference.yml | 6 + .../metricbeat/module/munin/_meta/config.yml | 3 + .../module/munin/_meta/docs.asciidoc | 5 + .../beats/metricbeat/module/munin/_meta/env | 2 + .../metricbeat/module/munin/_meta/fields.yml | 13 + .../module/munin/_meta/munin-node.conf | 15 + .../beats/metricbeat/module/munin/doc.go | 2 + .../beats/metricbeat/module/munin/munin.go | 115 + .../metricbeat/module/munin/munin_test.go | 82 + .../module/munin/node/_meta/docs.asciidoc | 58 + .../module/munin/node/_meta/fields.yml | 1 + .../metricbeat/module/munin/node/node.go | 77 + .../module/mysql/_meta/config.reference.yml | 17 + .../metricbeat/module/mysql/_meta/config.yml | 17 +- .../module/mysql/_meta/docs.asciidoc | 2 + .../dashboard/Metricbeat-mysql-overview.json | 6 +- .../metricbeat/module/mysql/status/status.go | 7 +- .../module/nginx/_meta/config.reference.yml | 12 +- .../metricbeat/module/nginx/_meta/config.yml | 9 +- .../module/nginx/_meta/docs.asciidoc | 2 + .../dashboard/metricbeat-nginx-overview.json | 6 +- .../module/nginx/stubstatus/stubstatus.go | 13 +- .../module/php_fpm/_meta/config.reference.yml | 6 + .../module/php_fpm/_meta/config.yml | 5 +- .../module/php_fpm/_meta/docs.asciidoc | 2 + .../metricbeat/module/php_fpm/pool/pool.go | 17 +- .../postgresql/_meta/config.reference.yml | 25 + .../module/postgresql/_meta/config.yml | 22 - .../module/postgresql/_meta/docs.asciidoc | 2 + .../module/postgresql/activity/activity.go | 7 +- .../module/postgresql/bgwriter/bgwriter.go | 7 +- .../module/postgresql/database/database.go | 7 +- .../prometheus/_meta/config.reference.yml | 20 + .../module/prometheus/_meta/config.yml | 9 +- .../module/prometheus/_meta/docs.asciidoc | 2 + .../module/prometheus/collector/collector.go | 14 +- .../module/prometheus/stats/stats.go | 12 +- .../rabbitmq/_meta/config.reference.yml | 8 + .../module/rabbitmq/_meta/config.yml | 5 - .../module/rabbitmq/_meta/docs.asciidoc | 1 + .../testdata/connection_sample_response.json | 116 + .../rabbitmq/connection/_meta/data.json | 40 + .../rabbitmq/connection/_meta/docs.asciidoc | 1 + .../rabbitmq/connection/_meta/fields.yml | 75 + .../module/rabbitmq/connection/connection.go | 62 + .../connection/connection_integration_test.go | 65 + .../rabbitmq/connection/connection_test.go | 66 + .../module/rabbitmq/connection/data.go | 62 + .../metricbeat/module/rabbitmq/node/node.go | 14 +- .../metricbeat/module/rabbitmq/queue/data.go | 4 +- .../metricbeat/module/rabbitmq/queue/queue.go | 14 +- .../module/redis/_meta/config.reference.yml | 30 + .../metricbeat/module/redis/_meta/config.yml | 27 - .../module/redis/_meta/docs.asciidoc | 2 + .../metricbeat/module/redis/info/info.go | 7 +- .../module/redis/keyspace/keyspace.go | 7 +- .../module/system/_meta/config.reference.yml | 12 +- .../metricbeat/module/system/_meta/config.yml | 24 +- .../module/system/_meta/docs.asciidoc | 3 + .../metricbeat/module/system/core/core.go | 6 +- .../beats/metricbeat/module/system/cpu/cpu.go | 7 +- .../module/system/diskio/_meta/docs.asciidoc | 15 +- .../diskio/_meta/testdata/proc/diskstats | 10 + .../metricbeat/module/system/diskio/diskio.go | 27 +- .../system/diskio/diskstat_linux_test.go | 52 + .../system/filesystem/_meta/docs.asciidoc | 4 +- .../module/system/filesystem/filesystem.go | 15 +- .../module/system/filesystem/helper.go | 79 +- .../module/system/filesystem/helper_test.go | 93 + .../module/system/fsstat/_meta/docs.asciidoc | 4 +- .../module/system/fsstat/_meta/fields.yml | 2 +- .../metricbeat/module/system/fsstat/fsstat.go | 26 +- .../metricbeat/module/system/load/load.go | 7 +- .../module/system/memory/_meta/fields.yml | 47 + .../metricbeat/module/system/memory/memory.go | 28 +- .../module/system/network/network.go | 7 +- .../module/system/process/_meta/fields.yml | 4 +- .../module/system/process/process.go | 7 +- .../system/process_summary/process_summary.go | 9 +- .../module/system/raid/_meta/fields.yml | 2 +- .../system/raid/_meta/testdata/proc/mdstat | 4 + .../metricbeat/module/system/raid/raid.go | 20 +- .../module/system/raid/raid_test.go | 2 +- .../metricbeat/module/system/socket/ptable.go | 3 +- .../metricbeat/module/system/socket/socket.go | 6 +- .../module/system/uptime/metricset.go | 7 +- .../module/uwsgi/_meta/config.reference.yml | 5 + .../metricbeat/module/uwsgi/_meta/config.yml | 2 - .../module/uwsgi/_meta/docs.asciidoc | 7 +- .../metricbeat/module/uwsgi/_meta/fields.yml | 2 +- .../module/uwsgi/status/_meta/fields.yml | 1 + .../metricbeat/module/uwsgi/status/status.go | 7 +- .../module/vsphere/_meta/config.reference.yml | 12 + .../module/vsphere/_meta/config.yml | 1 - .../module/vsphere/_meta/docs.asciidoc | 1 + .../module/vsphere/datastore/datastore.go | 6 +- .../metricbeat/module/vsphere/host/host.go | 6 +- .../vsphere/virtualmachine/virtualmachine.go | 6 +- .../module/windows/_meta/config.reference.yml | 15 + .../module/windows/_meta/config.yml | 6 - .../module/windows/_meta/docs.asciidoc | 3 +- .../module/windows/perfmon/_meta/data.json | 18 +- .../windows/perfmon/_meta/docs.asciidoc | 79 +- .../perfmon/pdh_integration_windows_test.go | 98 +- .../module/windows/perfmon/pdh_windows.go | 86 +- .../module/windows/perfmon/perfmon.go | 46 +- .../module/windows/service/service.go | 6 +- .../zookeeper/_meta/config.reference.yml | 5 + .../module/zookeeper/_meta/config.yml | 1 - .../module/zookeeper/_meta/docs.asciidoc | 3 +- .../metricbeat/module/zookeeper/mntr/mntr.go | 7 +- .../modules.d/aerospike.yml.disabled | 3 - .../metricbeat/modules.d/apache.yml.disabled | 6 +- .../metricbeat/modules.d/ceph.yml.disabled | 9 +- .../modules.d/couchbase.yml.disabled | 4 +- .../metricbeat/modules.d/docker.yml.disabled | 9 +- .../modules.d/dropwizard.yml.disabled | 4 +- .../modules.d/elasticsearch.yml.disabled | 4 +- .../metricbeat/modules.d/etcd.yml.disabled | 5 +- .../modules.d/graphite.yml.disabled | 9 - .../metricbeat/modules.d/haproxy.yml.disabled | 2 - .../metricbeat/modules.d/http.yml.disabled | 3 + .../metricbeat/modules.d/jolokia.yml.disabled | 24 +- .../metricbeat/modules.d/kafka.yml.disabled | 23 - .../metricbeat/modules.d/kibana.yml.disabled | 4 +- .../modules.d/kubernetes.yml.disabled | 29 +- .../metricbeat/modules.d/kvm.yml.disabled | 8 + .../modules.d/logstash.yml.disabled | 6 +- .../modules.d/memcached.yml.disabled | 2 - .../metricbeat/modules.d/mongodb.yml.disabled | 14 - .../metricbeat/modules.d/munin.yml.disabled | 3 + .../metricbeat/modules.d/mysql.yml.disabled | 17 +- .../metricbeat/modules.d/nginx.yml.disabled | 9 +- .../metricbeat/modules.d/php_fpm.yml.disabled | 5 +- .../modules.d/postgresql.yml.disabled | 22 - .../modules.d/prometheus.yml.disabled | 9 +- .../modules.d/rabbitmq.yml.disabled | 5 - .../metricbeat/modules.d/redis.yml.disabled | 27 - .../beats/metricbeat/modules.d/system.yml | 24 +- .../metricbeat/modules.d/uwsgi.yml.disabled | 2 - .../metricbeat/modules.d/vsphere.yml.disabled | 1 - .../metricbeat/modules.d/windows.yml.disabled | 6 - .../modules.d/zookeeper.yml.disabled | 1 - .../metricbeat/scripts/docs_collector.py | 28 +- .../tests/system/config/metricbeat.yml.j2 | 82 +- .../metricbeat/tests/system/metricbeat.py | 24 +- .../metricbeat/tests/system/requirements.txt | 3 +- .../metricbeat/tests/system/test_apache.py | 56 +- .../tests/system/test_autodiscover.py | 46 +- .../tests/system/test_elasticsearch.py | 58 - .../metricbeat/tests/system/test_haproxy.py | 18 +- .../metricbeat/tests/system/test_jolokia.py | 19 +- .../metricbeat/tests/system/test_munin.py | 38 + .../tests/system/test_processors.py | 32 +- .../metricbeat/tests/system/test_system.py | 13 +- .../golang/protobuf/proto/discard.go | 151 + .../golang/protobuf/proto/encode.go | 4 +- .../github.com/golang/protobuf/proto/lib.go | 1 - .../golang/protobuf/proto/text_parser.go | 2 +- .../prometheus/common/expfmt/text_parse.go | 4 + .../prometheus/common/model/time.go | 17 +- .../beats/metricbeat/vendor/vendor.json | 26 +- .../beats/packetbeat/_meta/beat.reference.yml | 11 +- .../elastic/beats/packetbeat/_meta/fields.yml | 1 + .../dashboard/Packetbeat-tls.json | 6 +- .../docs/configuring-howto.asciidoc | 1 - .../beats/packetbeat/docs/fields.asciidoc | 2581 +- .../beats/packetbeat/docs/filtering.asciidoc | 80 +- .../packetbeat/docs/gettingstarted.asciidoc | 14 +- .../images/discovery-packetbeat-flows.png | Bin 65325 -> 78320 bytes .../discovery-packetbeat-transactions.png | Bin 80463 -> 56250 bytes .../docs/images/filter_from_context.png | Bin 59691 -> 101590 bytes .../docs/images/filterforval_icon.png | Bin 0 -> 525 bytes .../docs/images/filteroutval_icon.png | Bin 0 -> 481 bytes .../packetbeat/docs/images/kibana-filters.png | Bin 95229 -> 182537 bytes .../docs/images/kibana-query-filtering.png | Bin 114976 -> 182972 bytes .../docs/images/kibana-update-map.png | Bin 275823 -> 471980 bytes .../docs/images/saved-packetbeat-searches.png | Bin 33214 -> 97757 bytes .../beats/packetbeat/docs/index.asciidoc | 10 +- .../packetbeat/docs/packetbeat-geoip.asciidoc | 30 +- .../docs/packetbeat-options.asciidoc | 4 +- .../docs/securing-packetbeat.asciidoc | 1 + .../docs/setting-up-running.asciidoc | 4 +- .../docs/visualizing-data-packetbeat.asciidoc | 33 +- .../elastic/beats/packetbeat/flows/worker.go | 2 +- .../beats/packetbeat/packetbeat.reference.yml | 125 +- .../packetbeat/protos/amqp/amqp_parser.go | 5 +- .../beats/packetbeat/protos/amqp/amqp_test.go | 22 + .../packetbeat/protos/http/_meta/fields.yml | 1 + .../beats/packetbeat/protos/http/config.go | 20 +- .../beats/packetbeat/protos/http/http.go | 296 +- .../packetbeat/protos/http/http_parser.go | 194 +- .../beats/packetbeat/protos/http/http_test.go | 219 +- .../protos/mongodb/mongodb_parser.go | 3 + .../protos/mongodb/mongodb_structs.go | 6 +- .../packetbeat/protos/mongodb/mongodb_test.go | 38 + .../beats/packetbeat/protos/registry.go | 9 + .../beats/packetbeat/protos/tcp/tcp.go | 67 +- .../beats/packetbeat/protos/tls/algos.go | 7 + .../{system => }/files/ThriftTest.thrift | 0 .../tests/{system => }/files/shared.thrift | 0 .../tests/{system => }/files/tutorial.thrift | 0 .../tests/system/config/packetbeat.yml.j2 | 1 + .../packetbeat/tests/system/packetbeat.py | 12 +- .../tests/system/pcaps/http_post.pcap | Bin 10863 -> 9999 bytes .../tests/system/pcaps/http_unmatched.pcap | Bin 0 -> 1699 bytes .../system/pcaps/http_unmatched_timeout.pcap | Bin 0 -> 1627 bytes .../tests/system/pcaps/http_url_params.pcap | Bin 10789 -> 9925 bytes .../tests/system/test_0065_unmatched_http.py | 60 + .../elastic/beats/script/update_golang_x.py | 40 + .../testing/environments/5.0.0-cgroups.yml | 31 - .../elastic/beats/testing/environments/5x.yml | 18 +- .../beats/testing/environments/Makefile | 2 +- .../beats/testing/environments/args.yml | 4 +- .../docker/elasticsearch/Dockerfile | 27 +- .../docker/elasticsearch/download.sh | 19 + .../environments/docker/kibana/Dockerfile | 18 +- .../environments/docker/kibana/download.sh | 19 + .../environments/docker/logstash/Dockerfile | 67 +- .../docker/logstash/config/log4j2.properties | 16 + .../docker/logstash/config/logstash-oss.yml | 1 + .../logstash/config/logstash-x-pack.yml | 4 + .../docker/logstash/config/pipelines.yml | 6 + .../docker/logstash/docker-entrypoint.sh | 6 - .../environments/docker/logstash/download.sh | 19 + .../default.conf} | 4 +- .../metricbeat/Dockerfile-5.0.0-cgroups | 15 - .../metricbeat/config/metricbeat.cgroups.yml | 103 - .../beats/testing/environments/latest.yml | 19 +- .../testing/environments/snapshot-noxpack.yml | 10 +- .../beats/testing/environments/snapshot.yml | 4 - .../vendor/github.com/davecgh/go-spew/LICENSE | 4 +- .../github.com/davecgh/go-spew/spew/bypass.go | 9 +- .../davecgh/go-spew/spew/bypasssafe.go | 9 +- .../github.com/davecgh/go-spew/spew/common.go | 2 +- .../github.com/davecgh/go-spew/spew/config.go | 13 +- .../github.com/davecgh/go-spew/spew/doc.go | 11 +- .../github.com/davecgh/go-spew/spew/dump.go | 8 +- .../github.com/davecgh/go-spew/spew/format.go | 2 +- .../github.com/davecgh/go-spew/spew/spew.go | 2 +- .../elastic/go-libaudit/CHANGELOG.md | 21 + .../github.com/elastic/go-libaudit/LICENSE | 13 - .../elastic/go-libaudit/LICENSE.txt | 202 + .../github.com/elastic/go-libaudit/NOTICE.txt | 5 + .../go-libaudit/aucoalesce/coalesce.go | 40 +- .../go-libaudit/aucoalesce/event_type.go | 23 +- .../go-libaudit/aucoalesce/id_lookup.go | 94 +- .../aucoalesce/normalizations.yaml | 12 + .../go-libaudit/aucoalesce/normalize.go | 47 +- .../go-libaudit/aucoalesce/znormalize_data.go | 30 +- .../github.com/elastic/go-libaudit/audit.go | 30 +- .../elastic/go-libaudit/auparse/auparse.go | 39 +- .../elastic/go-libaudit/auparse/doc.go | 23 +- .../elastic/go-libaudit/auparse/hex.go | 23 +- .../go-libaudit/auparse/mk_audit_arches.pl | 30 +- .../go-libaudit/auparse/mk_audit_syscalls.pl | 35 +- .../elastic/go-libaudit/auparse/sockaddr.go | 23 +- .../go-libaudit/auparse/zaudit_arches.go | 19 +- .../go-libaudit/auparse/zaudit_exit_codes.go | 28 +- .../go-libaudit/auparse/zaudit_msg_types.go | 52 +- .../go-libaudit/auparse/zaudit_syscalls.go | 63 +- .../github.com/elastic/go-libaudit/doc.go | 17 + .../github.com/elastic/go-libaudit/netlink.go | 23 +- .../elastic/go-libaudit/reassembler.go | 23 +- .../elastic/go-libaudit/rule/binary.go | 17 + .../go-libaudit/rule/defs_kernel_types.go | 17 + .../elastic/go-libaudit/rule/flags/flags.go | 17 + .../elastic/go-libaudit/rule/rule.go | 23 +- .../elastic/go-libaudit/rule/tables.go | 17 + .../elastic/go-libaudit/rule/types.go | 17 + .../elastic/go-libaudit/rule/zkernel_types.go | 19 +- .../elastic/go-structform/CHANGELOG.md | 42 + .../github.com/elastic/go-structform/LICENSE | 201 + .../{urso => elastic}/go-structform/array.go | 0 .../go-structform/basetype_string.go | 0 .../go-structform/cborl/decode.go | 2 +- .../go-structform/cborl/defs.go | 2 +- .../go-structform/cborl/error.go | 0 .../go-structform/cborl/parse.go | 2 +- .../go-structform/cborl/stack.go | 0 .../go-structform/cborl/visitor.go | 2 +- .../go-structform/gotype/0gen.go | 4 - .../go-structform/gotype/defs.go | 4 +- .../go-structform/gotype/error.go | 0 .../go-structform/gotype/fold.go | 2 +- .../go-structform/gotype/fold_arr.go | 2 +- .../go-structform/gotype/fold_inline.go | 4 +- .../go-structform/gotype/fold_map.go | 2 +- .../gotype/fold_map_inline.generated.go | 0 .../go-structform/gotype/fold_map_inline.yml | 0 .../go-structform/gotype/fold_primitives.go | 0 .../gotype/fold_refl_sel.generated.go | 0 .../go-structform/gotype/fold_refl_sel.yml | 0 .../go-structform/gotype/fold_reflect.go | 2 +- .../go-structform/gotype/fold_user.go | 4 +- .../go-structform/gotype/opts.go | 0 .../go-structform/gotype/stacks.generated.go | 2 +- .../go-structform/gotype/stacks.yml | 0 .../go-structform/gotype/symbols.go | 0 .../go-structform/gotype/tags.go | 0 .../go-structform/gotype/types.yml | 0 .../go-structform/gotype/unfold.go | 20 +- .../gotype/unfold_arr.generated.go | 291 +- .../go-structform/gotype/unfold_arr.yml | 20 +- .../gotype/unfold_err.generated.go | 2 +- .../go-structform/gotype/unfold_err.yml | 0 .../gotype/unfold_ignore.generated.go | 2 +- .../go-structform/gotype/unfold_ignore.yml | 0 .../go-structform/gotype/unfold_lookup.go | 0 .../gotype/unfold_lookup_go.generated.go | 0 .../go-structform/gotype/unfold_lookup_go.yml | 0 .../gotype/unfold_map.generated.go | 242 +- .../go-structform/gotype/unfold_map.yml | 30 +- .../gotype/unfold_primitive.generated.go | 2 +- .../go-structform/gotype/unfold_primitive.yml | 0 .../gotype/unfold_refl.generated.go | 2 +- .../go-structform/gotype/unfold_refl.go | 6 +- .../go-structform/gotype/unfold_refl.yml | 0 .../go-structform/gotype/unfold_struct.go | 5 +- .../go-structform/gotype/unfold_templates.yml | 0 .../go-structform/internal/unsafe/unsafe.go | 0 .../go-structform/json/decode.go | 2 +- .../go-structform/json/defs.go | 2 +- .../go-structform/json/json.go | 0 .../go-structform/json/parse.go | 72 +- .../go-structform/json/state_string.go | 0 .../go-structform/json/visitor.go | 2 +- .../{urso => elastic}/go-structform/map.go | 0 .../{urso => elastic}/go-structform/string.go | 0 .../go-structform/ubjson/decode.go | 2 +- .../go-structform/ubjson/defs.go | 2 +- .../go-structform/ubjson/parse.go | 2 +- .../go-structform/ubjson/stack.go | 0 .../go-structform/ubjson/statestep_string.go | 0 .../go-structform/ubjson/statetype_string.go | 0 .../go-structform/ubjson/visitor.go | 2 +- .../go-structform/visitor.go | 0 .../go-structform/visitors/expect_obj.go | 2 +- .../go-structform/visitors/nilVisitor.go | 218 + .../go-structform/visitors/stringer.go | 2 +- .../github.com/elastic/go-sysinfo/LICENSE.txt | 202 + .../github.com/elastic/go-sysinfo/NOTICE.txt | 5 + .../github.com/elastic/go-sysinfo/README.md | 12 + .../go-sysinfo/internal/registry/registry.go | 58 + .../providers/darwin/arch_darwin_amd64.go | 35 + .../providers/darwin/boottime_darwin_amd64.go | 39 + .../go-sysinfo/providers/darwin/doc.go | 20 + .../providers/darwin/host_darwin_amd64.go | 223 + .../providers/darwin/kernel_darwin_amd64.go | 35 + .../providers/darwin/memory_darwin_amd64.go | 35 + .../elastic/go-sysinfo/providers/darwin/os.go | 93 + .../providers/darwin/process_darwin_amd64.go | 207 + .../providers/darwin/syscall_darwin_amd64.go | 240 + .../providers/darwin/ztypes_darwin_amd64.go | 170 + .../go-sysinfo/providers/linux/arch_linux.go | 41 + .../providers/linux/boottime_linux.go | 47 + .../providers/linux/capabilities_linux.go | 117 + .../go-sysinfo/providers/linux/container.go | 54 + .../elastic/go-sysinfo/providers/linux/doc.go | 20 + .../go-sysinfo/providers/linux/host_linux.go | 199 + .../providers/linux/kernel_linux.go | 41 + .../go-sysinfo/providers/linux/machineid.go | 37 + .../providers/linux/memory_linux.go | 102 + .../elastic/go-sysinfo/providers/linux/os.go | 263 + .../providers/linux/process_linux.go | 212 + .../providers/linux/seccomp_linux.go | 69 + .../go-sysinfo/providers/linux/util.go | 86 + .../go-sysinfo/providers/shared/network.go | 48 + .../providers/windows/arch_windows.go | 31 + .../providers/windows/boottime_windows.go | 39 + .../go-sysinfo/providers/windows/doc.go | 20 + .../providers/windows/host_windows.go | 177 + .../providers/windows/kernel_windows.go | 43 + .../providers/windows/machineid_windows.go | 45 + .../providers/windows/os_windows.go | 91 + .../github.com/elastic/go-sysinfo/system.go | 85 + .../elastic/go-sysinfo/types/errors.go | 22 + .../github.com/elastic/go-sysinfo/types/go.go | 25 + .../elastic/go-sysinfo/types/host.go | 79 + .../elastic/go-sysinfo/types/process.go | 96 + .../elastic/{procfs => go-txfile}/LICENSE | 0 .../github.com/elastic/go-txfile/README.md | 1 + .../github.com/elastic/go-txfile/alloc.go | 765 + .../github.com/elastic/go-txfile/errors.go | 32 + .../github.com/elastic/go-txfile/file.go | 478 + .../github.com/elastic/go-txfile/freelist.go | 457 + .../github.com/elastic/go-txfile/idlist.go | 41 + .../go-txfile/internal/cleanup/cleanup.go | 58 + .../go-txfile/internal/cleanup/multi.go | 29 + .../go-txfile/internal/invariant/invariant.go | 54 + .../elastic/go-txfile/internal/iter/iter.go | 15 + .../go-txfile/internal/tracelog/tracelog.go | 44 + .../github.com/elastic/go-txfile/layout.go | 184 + .../github.com/elastic/go-txfile/lock.go | 119 + .../elastic/go-txfile/meta_sizing.py | 97 + .../github.com/elastic/go-txfile/page.go | 238 + .../github.com/elastic/go-txfile/pageset.go | 49 + .../github.com/elastic/go-txfile/pq/access.go | 103 + .../github.com/elastic/go-txfile/pq/ack.go | 297 + .../github.com/elastic/go-txfile/pq/buffer.go | 244 + .../github.com/elastic/go-txfile/pq/cursor.go | 172 + .../elastic/go-txfile/pq/delegate.go | 110 + .../github.com/elastic/go-txfile/pq/error.go | 15 + .../github.com/elastic/go-txfile/pq/layout.go | 81 + .../github.com/elastic/go-txfile/pq/page.go | 117 + .../github.com/elastic/go-txfile/pq/pq.go | 161 + .../github.com/elastic/go-txfile/pq/reader.go | 210 + .../github.com/elastic/go-txfile/pq/trace.go | 10 + .../elastic/go-txfile/pq/trace_disabled.go | 9 + .../elastic/go-txfile/pq/trace_enabled.go | 36 + .../github.com/elastic/go-txfile/pq/util.go | 39 + .../github.com/elastic/go-txfile/pq/writer.go | 327 + .../github.com/elastic/go-txfile/region.go | 234 + .../github.com/elastic/go-txfile/trace.go | 10 + .../elastic/go-txfile/trace_disabled.go | 9 + .../elastic/go-txfile/trace_enabled.go | 36 + .../vendor/github.com/elastic/go-txfile/tx.go | 624 + .../go-txfile/txfiletest/txfiletest.go | 91 + .../github.com/elastic/go-txfile/util.go | 141 + .../github.com/elastic/go-txfile/vfs.go | 42 + .../github.com/elastic/go-txfile/vfs_unix.go | 33 + .../elastic/go-txfile/vfs_windows.go | 98 + .../github.com/elastic/go-txfile/wal.go | 240 + .../github.com/elastic/go-txfile/write.go | 277 + .../github.com/elastic/go-windows/LICENSE.txt | 202 + .../github.com/elastic/go-windows/NOTICE.txt | 5 + .../github.com/elastic/go-windows/README.md | 18 + .../github.com/elastic/go-windows/doc.go | 23 + .../github.com/elastic/go-windows/kernel32.go | 222 + .../github.com/elastic/go-windows/uft16.go | 68 + .../github.com/elastic/go-windows/version.go | 158 + .../elastic/go-windows/zsyscall_windows.go | 163 + .../github.com/elastic/gosigar/CHANGELOG.md | 9 + .../github.com/elastic/gosigar/README.md | 1 + .../github.com/elastic/gosigar/codecov.yml | 21 + .../elastic/gosigar/concrete_sigar.go | 6 + .../elastic/gosigar/sigar_darwin.go | 4 + .../elastic/gosigar/sigar_freebsd.go | 4 + .../elastic/gosigar/sigar_interface.go | 10 + .../github.com/elastic/gosigar/sigar_linux.go | 24 + .../elastic/gosigar/sigar_linux_common.go | 10 +- .../elastic/gosigar/sigar_openbsd.go | 8 + .../github.com/elastic/gosigar/sigar_stub.go | 4 + .../elastic/gosigar/sigar_windows.go | 4 + .../github.com/elastic/gosigar/sys/endian.go | 16 + .../elastic/gosigar/sys/linux/inetdiag.go | 21 +- .../elastic/gosigar/sys/linux/netlink.go | 5 +- .../github.com/elastic/procfs/AUTHORS.md | 20 - .../vendor/github.com/elastic/procfs/Makefile | 6 - .../vendor/github.com/elastic/procfs/fs.go | 33 - .../vendor/github.com/elastic/procfs/stat.go | 56 - .../vendor/github.com/ericchiang/k8s/Makefile | 45 + .../github.com/ericchiang/k8s/README.md | 173 +- .../k8s/api/unversioned/generated.pb.go | 5614 ----- .../ericchiang/k8s/api/unversioned/time.go | 32 - .../apiextensions/v1beta1/generated.pb.go | 5394 ++++ .../apis/apiextensions/v1beta1/register.go | 9 + .../k8s/apis/apps/v1alpha1/generated.pb.go | 1227 - .../k8s/apis/apps/v1beta1/generated.pb.go | 2806 ++- .../k8s/apis/apps/v1beta1/register.go | 13 + .../apis/authentication/v1/generated.pb.go | 255 +- .../k8s/apis/authentication/v1/register.go | 7 + .../authentication/v1beta1/generated.pb.go | 257 +- .../apis/authentication/v1beta1/register.go | 7 + .../k8s/apis/authorization/v1/generated.pb.go | 1805 +- .../k8s/apis/authorization/v1/register.go | 10 + .../authorization/v1beta1/generated.pb.go | 1806 +- .../apis/authorization/v1beta1/register.go | 10 + .../k8s/apis/autoscaling/v1/generated.pb.go | 740 +- .../k8s/apis/autoscaling/v1/register.go | 9 + .../apis/autoscaling/v2alpha1/generated.pb.go | 3635 --- .../k8s/apis/batch/v1/generated.pb.go | 270 +- .../ericchiang/k8s/apis/batch/v1/register.go | 9 + .../k8s/apis/batch/v2alpha1/generated.pb.go | 214 +- .../k8s/apis/batch/v2alpha1/register.go | 9 + .../certificates/v1alpha1/generated.pb.go | 1505 -- .../apis/certificates/v1beta1/generated.pb.go | 308 +- .../k8s/apis/certificates/v1beta1/register.go | 9 + .../k8s/{api => apis/core}/v1/generated.pb.go | 20905 +++++++++++----- .../ericchiang/k8s/apis/core/v1/register.go | 35 + .../apis/extensions/v1beta1/generated.pb.go | 4337 ++-- .../k8s/apis/extensions/v1beta1/register.go | 19 + .../apis/imagepolicy/v1alpha1/generated.pb.go | 239 +- .../k8s/apis/meta/v1/generated.pb.go | 2402 +- .../ericchiang/k8s/apis/meta/v1/time.go | 1 - .../k8s/apis/policy/v1alpha1/generated.pb.go | 1352 - .../k8s/apis/policy/v1beta1/generated.pb.go | 383 +- .../k8s/apis/policy/v1beta1/register.go | 9 + .../k8s/apis/rbac/v1alpha1/generated.pb.go | 683 +- .../k8s/apis/rbac/v1alpha1/register.go | 15 + .../k8s/apis/rbac/v1beta1/generated.pb.go | 687 +- .../k8s/apis/rbac/v1beta1/register.go | 15 + .../{api => apis}/resource/generated.pb.go | 54 +- .../apis/settings/v1alpha1/generated.pb.go | 141 +- .../k8s/apis/settings/v1alpha1/register.go | 9 + .../k8s/apis/storage/v1/generated.pb.go | 426 +- .../k8s/apis/storage/v1/register.go | 9 + .../k8s/apis/storage/v1beta1/generated.pb.go | 429 +- .../k8s/apis/storage/v1beta1/register.go | 9 + .../github.com/ericchiang/k8s/client.go | 304 +- .../vendor/github.com/ericchiang/k8s/codec.go | 73 +- .../github.com/ericchiang/k8s/config.go | 82 +- .../github.com/ericchiang/k8s/discovery.go | 35 +- .../vendor/github.com/ericchiang/k8s/gen.go | 382 - .../vendor/github.com/ericchiang/k8s/gen.sh | 110 - .../github.com/ericchiang/k8s/labels.go | 4 +- .../github.com/ericchiang/k8s/resource.go | 168 + .../ericchiang/k8s/runtime/generated.pb.go | 74 +- .../k8s/runtime/schema/generated.pb.go | 29 +- .../vendor/github.com/ericchiang/k8s/tprs.go | 166 - .../vendor/github.com/ericchiang/k8s/types.go | 7091 ------ .../k8s/util/intstr/generated.pb.go | 55 +- .../vendor/github.com/ericchiang/k8s/watch.go | 199 + .../fsnotify/fsevents/example/main.go | 101 + .../github.com/fsnotify/fsevents/wrap.go | 12 +- .../fsnotify/fsevents/wrap_deprecated.go | 276 + .../github.com/fsnotify/fsnotify/AUTHORS | 6 + .../github.com/fsnotify/fsnotify/CHANGELOG.md | 10 + .../github.com/fsnotify/fsnotify/fen.go | 6 + .../github.com/fsnotify/fsnotify/inotify.go | 6 + .../github.com/fsnotify/fsnotify/kqueue.go | 68 +- .../github.com/fsnotify/fsnotify/windows.go | 28 +- .../vendor/github.com/go-ole/go-ole/LICENSE | 7 + .../pmezard/go-difflib/LICENSE | 0 .../pmezard/go-difflib/difflib/difflib.go | 54 +- .../procfs/CONTRIBUTING.md | 6 +- .../procfs}/LICENSE | 4 +- .../prometheus/procfs/MAINTAINERS.md | 1 + .../github.com/prometheus/procfs/Makefile | 71 + .../{elastic => prometheus}/procfs/NOTICE | 0 .../{elastic => prometheus}/procfs/README.md | 1 + .../github.com/prometheus/procfs/buddyinfo.go | 95 + .../{elastic => prometheus}/procfs/doc.go | 0 .../prometheus/procfs/fixtures.ttar | 446 + .../vendor/github.com/prometheus/procfs/fs.go | 82 + .../prometheus/procfs/internal/util/parse.go | 46 + .../{elastic => prometheus}/procfs/ipvs.go | 69 +- .../{elastic => prometheus}/procfs/mdstat.go | 13 + .../prometheus/procfs/mountstats.go | 569 + .../{elastic => prometheus}/procfs/net_dev.go | 15 +- .../github.com/prometheus/procfs/nfs/nfs.go | 263 + .../github.com/prometheus/procfs/nfs/parse.go | 317 + .../prometheus/procfs/nfs/parse_nfs.go | 67 + .../prometheus/procfs/nfs/parse_nfsd.go | 89 + .../{elastic => prometheus}/procfs/proc.go | 28 +- .../{elastic => prometheus}/procfs/proc_io.go | 18 +- .../procfs/proc_limits.go | 51 +- .../{elastic => prometheus}/procfs/proc_ns.go | 13 + .../procfs/proc_stat.go | 13 + .../github.com/prometheus/procfs/stat.go | 232 + .../vendor/github.com/prometheus/procfs/ttar | 389 + .../github.com/prometheus/procfs/xfrm.go | 187 + .../github.com/prometheus/procfs/xfs/parse.go | 330 + .../github.com/prometheus/procfs/xfs/xfs.go | 163 + .../github.com/samuel/go-parser/LICENSE | 25 + .../github.com/samuel/go-parser/README.md | 11 + .../shirou/gopsutil/disk/disk_darwin.go | 15 +- .../shirou/gopsutil/disk/disk_darwin_cgo.go | 6 +- .../shirou/gopsutil/disk/disk_darwin_nocgo.go | 10 +- .../shirou/gopsutil/disk/disk_fallback.go | 20 +- .../shirou/gopsutil/disk/disk_freebsd.go | 24 +- .../shirou/gopsutil/disk/disk_linux.go | 28 +- .../shirou/gopsutil/disk/disk_openbsd.go | 31 +- .../shirou/gopsutil/disk/disk_solaris.go | 127 + .../shirou/gopsutil/disk/disk_unix.go | 17 +- .../shirou/gopsutil/disk/disk_windows.go | 35 +- .../shirou/gopsutil/disk/types_freebsd.go | 88 - .../shirou/gopsutil/disk/types_openbsd.go | 70 - .../vendor/github.com/shirou/gopsutil/doc.go | 1 + .../shirou/gopsutil/internal/common/common.go | 78 +- .../gopsutil/internal/common/common_darwin.go | 20 +- .../internal/common/common_freebsd.go | 19 +- .../gopsutil/internal/common/common_linux.go | 10 +- .../internal/common/common_openbsd.go | 19 +- .../internal/common/common_windows.go | 39 +- .../github.com/shirou/gopsutil/net/net.go | 5 + .../shirou/gopsutil/net/net_darwin.go | 35 +- .../shirou/gopsutil/net/net_fallback.go | 26 +- .../shirou/gopsutil/net/net_freebsd.go | 17 + .../shirou/gopsutil/net/net_linux.go | 98 +- .../shirou/gopsutil/net/net_openbsd.go | 165 +- .../shirou/gopsutil/net/net_unix.go | 17 + .../shirou/gopsutil/net/net_windows.go | 33 +- .../stretchr/testify/Godeps/Godeps.json | 21 - .../github.com/stretchr/testify/Godeps/Readme | 5 - .../github.com/stretchr/testify/README.md | 332 - .../testify/assert/assertion_format.go | 405 + .../testify/assert/assertion_format.go.tmpl | 4 + .../testify/assert/assertion_forward.go | 623 +- .../stretchr/testify/assert/assertions.go | 586 +- .../testify/assert/forward_assertions.go | 2 +- .../testify/assert/http_assertions.go | 61 +- .../vendor/github.com/stretchr/testify/doc.go | 22 - .../github.com/stretchr/testify/http/doc.go | 2 - .../testify/http/test_response_writer.go | 49 - .../testify/http/test_round_tripper.go | 17 - .../github.com/stretchr/testify/mock/doc.go | 44 - .../github.com/stretchr/testify/mock/mock.go | 683 - .../stretchr/testify/require/doc.go | 28 - .../testify/require/forward_requirements.go | 16 - .../stretchr/testify/require/require.go | 464 - .../stretchr/testify/require/require.go.tmpl | 6 - .../testify/require/require_forward.go | 388 - .../testify/require/require_forward.go.tmpl | 4 - .../stretchr/testify/require/requirements.go | 9 - .../github.com/stretchr/testify/suite/doc.go | 65 - .../stretchr/testify/suite/interfaces.go | 34 - .../stretchr/testify/suite/suite.go | 115 - .../github.com/davecgh/go-spew/spew/bypass.go | 136 - .../davecgh/go-spew/spew/bypasssafe.go | 37 - .../github.com/davecgh/go-spew/spew/common.go | 341 - .../github.com/davecgh/go-spew/spew/config.go | 297 - .../github.com/davecgh/go-spew/spew/doc.go | 202 - .../github.com/davecgh/go-spew/spew/dump.go | 511 - .../github.com/davecgh/go-spew/spew/format.go | 419 - .../github.com/davecgh/go-spew/spew/spew.go | 148 - .../github.com/stretchr/objx/LICENSE.md | 23 - .../vendor/github.com/stretchr/objx/README.md | 3 - .../github.com/stretchr/objx/accessors.go | 179 - .../stretchr/objx/codegen/index.html | 86 - .../github.com/stretchr/objx/constants.go | 13 - .../github.com/stretchr/objx/conversions.go | 117 - .../vendor/github.com/stretchr/objx/doc.go | 72 - .../vendor/github.com/stretchr/objx/map.go | 222 - .../github.com/stretchr/objx/mutations.go | 81 - .../github.com/stretchr/objx/security.go | 14 - .../vendor/github.com/stretchr/objx/tests.go | 17 - .../stretchr/objx/type_specific_codegen.go | 2881 --- .../vendor/github.com/stretchr/objx/value.go | 13 - .../github.com/theckman/go-flock}/LICENSE | 23 +- .../github.com/theckman/go-flock/README.md | 40 + .../github.com/theckman/go-flock/appveyor.yml | 25 + .../github.com/theckman/go-flock/flock.go | 107 + .../theckman/go-flock/flock_unix.go | 146 + .../theckman/go-flock/flock_winapi.go | 76 + .../theckman/go-flock/flock_windows.go | 140 + .../tsg/gopacket/afpacket/afpacket.go | 16 +- .../github.com/tsg/gopacket/layers/lldp.go | 3 +- .../github.com/tsg/gopacket/pcap/pcap.go | 18 +- .../tsg/gopacket/pcap/pcap_poll_common.go | 18 + .../tsg/gopacket/pcap/pcap_poll_linux.go | 52 + .../vendor/github.com/urso/go-bin/0gen.go | 4 + .../vendor/github.com/urso/go-bin/LICENSE | 201 + .../vendor/github.com/urso/go-bin/README.md | 2 + .../github.com/urso/go-bin/bin.generated.go | 260 + .../vendor/github.com/urso/go-bin/bin.yml | 53 + .../github.com/urso/go-bin/bin_test.yml | 53 + .../vendor/github.com/urso/go-bin/cast.go | 53 + .../github.com/urso/go-bin/native_be.go | 18 + .../github.com/urso/go-bin/native_le.go | 18 + .../vendor/github.com/urso/go-bin/types.yml | 6 + .../urso/go-structform/CHANGELOG.md | 28 - .../urso/go-structform/gotype/buffer.go | 103 - .../go-structform/internal/gen/gen_yaml.go | 337 - .../urso/go-structform/sftest/cases.go | 216 - .../urso/go-structform/sftest/sftest.go | 312 - .../urso/go-structform/sftest/util.go | 46 - .../vendor/github.com/urso/qcgen/LICENSE | 201 + .../vendor/github.com/urso/qcgen/README.md | 2 + .../vendor/github.com/urso/qcgen/helpers.go | 32 + .../vendor/github.com/urso/qcgen/qcgen.go | 80 + .../x/crypto/ssh/terminal/util_windows.go | 10 +- .../vendor/golang.org/x/net/bpf/constants.go | 33 +- .../golang.org/x/net/bpf/instructions.go | 272 +- .../vendor/golang.org/x/net/bpf/setter.go | 10 + .../golang.org/x/net/context/context.go | 102 - .../vendor/golang.org/x/net/context/go19.go | 20 + .../golang.org/x/net/context/pre_go19.go | 109 + .../vendor/golang.org/x/net/http2/ciphers.go | 641 + .../x/net/http2/client_conn_pool.go | 11 +- .../x/net/http2/configure_transport.go | 2 +- .../golang.org/x/net/http2/databuffer.go | 146 + .../vendor/golang.org/x/net/http2/errors.go | 21 +- .../golang.org/x/net/http2/fixed_buffer.go | 60 - .../vendor/golang.org/x/net/http2/frame.go | 148 +- .../vendor/golang.org/x/net/http2/go16.go | 27 - .../vendor/golang.org/x/net/http2/go17.go | 12 + .../golang.org/x/net/http2/go17_not18.go | 36 + .../vendor/golang.org/x/net/http2/go18.go | 56 + .../vendor/golang.org/x/net/http2/go19.go | 16 + .../golang.org/x/net/http2/hpack/encode.go | 29 +- .../golang.org/x/net/http2/hpack/hpack.go | 106 +- .../golang.org/x/net/http2/hpack/tables.go | 255 +- .../vendor/golang.org/x/net/http2/http2.go | 58 +- .../vendor/golang.org/x/net/http2/not_go16.go | 25 - .../vendor/golang.org/x/net/http2/not_go17.go | 38 +- .../vendor/golang.org/x/net/http2/not_go18.go | 29 + .../vendor/golang.org/x/net/http2/not_go19.go | 16 + .../vendor/golang.org/x/net/http2/pipe.go | 18 +- .../vendor/golang.org/x/net/http2/server.go | 1376 +- .../golang.org/x/net/http2/transport.go | 638 +- .../vendor/golang.org/x/net/http2/write.go | 176 +- .../golang.org/x/net/http2/writesched.go | 423 +- .../x/net/http2/writesched_priority.go | 452 + .../x/net/http2/writesched_random.go | 72 + .../vendor/golang.org/x/net/icmp/echo.go | 2 +- .../vendor/golang.org/x/net/icmp/helper.go | 27 - .../vendor/golang.org/x/net/icmp/ipv4.go | 9 +- .../vendor/golang.org/x/net/icmp/ipv6.go | 2 +- .../golang.org/x/net/icmp/listen_posix.go | 6 +- .../vendor/golang.org/x/net/icmp/message.go | 4 +- .../golang.org/x/net/icmp/messagebody.go | 2 +- .../vendor/golang.org/x/net/idna/idna.go | 732 + .../vendor/golang.org/x/net/idna/punycode.go | 203 + .../vendor/golang.org/x/net/idna/tables.go | 4557 ++++ .../vendor/golang.org/x/net/idna/trie.go | 72 + .../vendor/golang.org/x/net/idna/trieval.go | 119 + .../golang.org/x/net/internal/iana/const.go | 6 +- .../golang.org/x/net/internal/iana/gen.go | 293 - .../x/net/internal/socket/cmsghdr.go | 11 + .../x/net/internal/socket/cmsghdr_bsd.go | 13 + .../internal/socket/cmsghdr_linux_32bit.go | 14 + .../internal/socket/cmsghdr_linux_64bit.go | 14 + .../internal/socket/cmsghdr_solaris_64bit.go | 14 + .../x/net/internal/socket/cmsghdr_stub.go | 17 + .../x/net/internal/socket/error_unix.go | 31 + .../x/net/internal/socket/error_windows.go | 26 + .../x/net/internal/socket/iovec_32bit.go | 19 + .../x/net/internal/socket/iovec_64bit.go | 19 + .../internal/socket/iovec_solaris_64bit.go | 19 + .../x/net/internal/socket/iovec_stub.go | 11 + .../x/net/internal/socket/mmsghdr_stub.go | 21 + .../x/net/internal/socket/mmsghdr_unix.go | 42 + .../x/net/internal/socket/msghdr_bsd.go | 39 + .../x/net/internal/socket/msghdr_bsdvar.go | 16 + .../x/net/internal/socket/msghdr_linux.go | 36 + .../net/internal/socket/msghdr_linux_32bit.go | 24 + .../net/internal/socket/msghdr_linux_64bit.go | 24 + .../x/net/internal/socket/msghdr_openbsd.go | 14 + .../internal/socket/msghdr_solaris_64bit.go | 36 + .../x/net/internal/socket/msghdr_stub.go | 14 + .../x/net/internal/socket/rawconn.go | 66 + .../x/net/internal/socket/rawconn_mmsg.go | 74 + .../x/net/internal/socket/rawconn_msg.go | 77 + .../x/net/internal/socket/rawconn_nommsg.go | 18 + .../x/net/internal/socket/rawconn_nomsg.go | 18 + .../x/net/internal/socket/rawconn_stub.go | 25 + .../x/net/internal/socket/reflect.go | 62 + .../x/net/internal/socket/socket.go | 285 + .../golang.org/x/net/internal/socket/sys.go | 33 + .../x/net/internal/socket/sys_bsd.go | 17 + .../x/net/internal/socket/sys_bsdvar.go | 14 + .../x/net/internal/socket/sys_darwin.go | 7 + .../x/net/internal/socket/sys_dragonfly.go | 7 + .../x/net/internal/socket/sys_linux.go | 27 + .../x/net/internal/socket/sys_linux_386.go | 55 + .../socket/sys_linux_386.s} | 7 +- .../x/net/internal/socket/sys_linux_amd64.go | 10 + .../x/net/internal/socket/sys_linux_arm.go | 10 + .../x/net/internal/socket/sys_linux_arm64.go | 10 + .../x/net/internal/socket/sys_linux_mips.go | 10 + .../x/net/internal/socket/sys_linux_mips64.go | 10 + .../net/internal/socket/sys_linux_mips64le.go | 10 + .../x/net/internal/socket/sys_linux_mipsle.go | 10 + .../x/net/internal/socket/sys_linux_ppc64.go | 10 + .../net/internal/socket/sys_linux_ppc64le.go | 10 + .../x/net/internal/socket/sys_linux_s390x.go | 55 + .../x/net/internal/socket/sys_linux_s390x.s | 11 + .../x/net/internal/socket/sys_netbsd.go | 25 + .../x/net/internal/socket/sys_posix.go | 168 + .../x/net/internal/socket/sys_solaris.go | 71 + .../x/net/internal/socket/sys_solaris_amd64.s | 11 + .../x/net/internal/socket/sys_stub.go | 64 + .../x/net/internal/socket/sys_unix.go | 33 + .../x/net/internal/socket/sys_windows.go | 70 + .../x/net/internal/socket/zsys_darwin_386.go | 59 + .../net/internal/socket/zsys_darwin_amd64.go | 61 + .../x/net/internal/socket/zsys_darwin_arm.go | 59 + .../net/internal/socket/zsys_darwin_arm64.go | 61 + .../internal/socket/zsys_dragonfly_amd64.go | 61 + .../x/net/internal/socket/zsys_freebsd_386.go | 59 + .../net/internal/socket/zsys_freebsd_amd64.go | 61 + .../x/net/internal/socket/zsys_freebsd_arm.go | 59 + .../x/net/internal/socket/zsys_linux_386.go | 63 + .../x/net/internal/socket/zsys_linux_amd64.go | 66 + .../x/net/internal/socket/zsys_linux_arm.go | 63 + .../x/net/internal/socket/zsys_linux_arm64.go | 66 + .../x/net/internal/socket/zsys_linux_mips.go | 63 + .../net/internal/socket/zsys_linux_mips64.go | 66 + .../internal/socket/zsys_linux_mips64le.go | 66 + .../net/internal/socket/zsys_linux_mipsle.go | 63 + .../x/net/internal/socket/zsys_linux_ppc64.go | 66 + .../net/internal/socket/zsys_linux_ppc64le.go | 66 + .../x/net/internal/socket/zsys_linux_s390x.go | 66 + .../x/net/internal/socket/zsys_netbsd_386.go | 65 + .../net/internal/socket/zsys_netbsd_amd64.go | 68 + .../x/net/internal/socket/zsys_netbsd_arm.go | 59 + .../x/net/internal/socket/zsys_openbsd_386.go | 59 + .../net/internal/socket/zsys_openbsd_amd64.go | 61 + .../x/net/internal/socket/zsys_openbsd_arm.go | 59 + .../net/internal/socket/zsys_solaris_amd64.go | 60 + .../vendor/golang.org/x/net/ipv4/batch.go | 191 + .../golang.org/x/net/ipv4/bpfopt_linux.go | 27 - .../golang.org/x/net/ipv4/bpfopt_stub.go | 16 - .../vendor/golang.org/x/net/ipv4/control.go | 76 +- .../golang.org/x/net/ipv4/control_bsd.go | 24 +- .../golang.org/x/net/ipv4/control_pktinfo.go | 22 +- .../golang.org/x/net/ipv4/control_stub.go | 20 +- .../golang.org/x/net/ipv4/control_unix.go | 121 +- .../golang.org/x/net/ipv4/control_windows.go | 25 +- .../golang.org/x/net/ipv4/defs_darwin.go | 77 - .../golang.org/x/net/ipv4/defs_dragonfly.go | 38 - .../golang.org/x/net/ipv4/defs_freebsd.go | 75 - .../golang.org/x/net/ipv4/defs_linux.go | 120 - .../golang.org/x/net/ipv4/defs_netbsd.go | 37 - .../golang.org/x/net/ipv4/defs_openbsd.go | 37 - .../golang.org/x/net/ipv4/defs_solaris.go | 57 - .../ipv4/{dgramopt_posix.go => dgramopt.go} | 132 +- .../golang.org/x/net/ipv4/dgramopt_stub.go | 106 - .../beats/vendor/golang.org/x/net/ipv4/doc.go | 24 +- .../vendor/golang.org/x/net/ipv4/endpoint.go | 76 +- .../beats/vendor/golang.org/x/net/ipv4/gen.go | 208 - .../{genericopt_posix.go => genericopt.go} | 36 +- .../golang.org/x/net/ipv4/genericopt_stub.go | 29 - .../vendor/golang.org/x/net/ipv4/header.go | 87 +- .../vendor/golang.org/x/net/ipv4/helper.go | 34 +- .../golang.org/x/net/ipv4/helper_stub.go | 23 - .../golang.org/x/net/ipv4/helper_unix.go | 50 - .../golang.org/x/net/ipv4/helper_windows.go | 49 - .../vendor/golang.org/x/net/ipv4/icmp.go | 6 +- .../golang.org/x/net/ipv4/icmp_linux.go | 8 +- .../vendor/golang.org/x/net/ipv4/icmp_stub.go | 12 +- .../vendor/golang.org/x/net/ipv4/packet.go | 58 +- .../golang.org/x/net/ipv4/packet_go1_8.go | 56 + .../golang.org/x/net/ipv4/packet_go1_9.go | 67 + .../vendor/golang.org/x/net/ipv4/payload.go | 14 +- .../golang.org/x/net/ipv4/payload_cmsg.go | 61 +- .../x/net/ipv4/payload_cmsg_go1_8.go | 59 + .../x/net/ipv4/payload_cmsg_go1_9.go | 67 + .../golang.org/x/net/ipv4/payload_nocmsg.go | 12 +- .../vendor/golang.org/x/net/ipv4/sockopt.go | 14 +- .../x/net/ipv4/sockopt_asmreq_stub.go | 21 - .../x/net/ipv4/sockopt_asmreq_unix.go | 46 - .../x/net/ipv4/sockopt_asmreq_windows.go | 45 - .../x/net/ipv4/sockopt_asmreqn_stub.go | 17 - .../golang.org/x/net/ipv4/sockopt_posix.go | 71 + .../x/net/ipv4/sockopt_ssmreq_stub.go | 17 - .../x/net/ipv4/sockopt_ssmreq_unix.go | 61 - .../golang.org/x/net/ipv4/sockopt_stub.go | 37 +- .../golang.org/x/net/ipv4/sockopt_unix.go | 122 - .../golang.org/x/net/ipv4/sockopt_windows.go | 68 - .../ipv4/{sockopt_asmreq.go => sys_asmreq.go} | 44 +- .../golang.org/x/net/ipv4/sys_asmreq_stub.go | 25 + ...sockopt_asmreqn_unix.go => sys_asmreqn.go} | 20 +- .../sys_asmreqn_stub.go} | 14 +- .../vendor/golang.org/x/net/ipv4/sys_bpf.go | 23 + .../golang.org/x/net/ipv4/sys_bpf_stub.go | 16 + .../vendor/golang.org/x/net/ipv4/sys_bsd.go | 29 +- .../golang.org/x/net/ipv4/sys_darwin.go | 97 +- .../golang.org/x/net/ipv4/sys_dragonfly.go | 35 + .../golang.org/x/net/ipv4/sys_freebsd.go | 53 +- .../vendor/golang.org/x/net/ipv4/sys_linux.go | 50 +- .../golang.org/x/net/ipv4/sys_openbsd.go | 32 - .../golang.org/x/net/ipv4/sys_solaris.go | 57 + .../golang.org/x/net/ipv4/sys_ssmreq.go | 54 + .../golang.org/x/net/ipv4/sys_ssmreq_stub.go | 21 + .../vendor/golang.org/x/net/ipv4/sys_stub.go | 4 +- .../golang.org/x/net/ipv4/sys_windows.go | 36 +- .../x/net/ipv4/syscall_linux_386.go | 31 - .../golang.org/x/net/ipv4/syscall_unix.go | 26 - .../golang.org/x/net/ipv4/thunk_linux_386.s | 8 - .../golang.org/x/net/ipv4/zsys_darwin.go | 32 +- .../golang.org/x/net/ipv4/zsys_dragonfly.go | 6 +- .../golang.org/x/net/ipv4/zsys_freebsd_386.go | 34 +- .../x/net/ipv4/zsys_freebsd_amd64.go | 34 +- .../golang.org/x/net/ipv4/zsys_freebsd_arm.go | 34 +- .../golang.org/x/net/ipv4/zsys_linux_386.go | 58 +- .../golang.org/x/net/ipv4/zsys_linux_amd64.go | 58 +- .../golang.org/x/net/ipv4/zsys_linux_arm.go | 58 +- .../golang.org/x/net/ipv4/zsys_linux_arm64.go | 56 +- .../golang.org/x/net/ipv4/zsys_linux_mips.go | 148 + .../x/net/ipv4/zsys_linux_mips64.go | 56 +- .../x/net/ipv4/zsys_linux_mips64le.go | 56 +- .../x/net/ipv4/zsys_linux_mipsle.go | 148 + .../golang.org/x/net/ipv4/zsys_linux_ppc.go | 56 +- .../golang.org/x/net/ipv4/zsys_linux_ppc64.go | 56 +- .../x/net/ipv4/zsys_linux_ppc64le.go | 56 +- .../golang.org/x/net/ipv4/zsys_linux_s390x.go | 56 +- .../golang.org/x/net/ipv4/zsys_netbsd.go | 4 +- .../golang.org/x/net/ipv4/zsys_openbsd.go | 4 +- .../golang.org/x/net/ipv4/zsys_solaris.go | 94 +- .../vendor/golang.org/x/net/ipv6/batch.go | 119 + .../golang.org/x/net/ipv6/bpfopt_linux.go | 27 - .../golang.org/x/net/ipv6/bpfopt_stub.go | 16 - .../vendor/golang.org/x/net/ipv6/control.go | 106 +- .../x/net/ipv6/control_rfc2292_unix.go | 35 +- .../x/net/ipv6/control_rfc3542_unix.go | 75 +- .../golang.org/x/net/ipv6/control_stub.go | 20 +- .../golang.org/x/net/ipv6/control_unix.go | 135 +- .../golang.org/x/net/ipv6/control_windows.go | 25 +- .../golang.org/x/net/ipv6/defs_darwin.go | 112 - .../golang.org/x/net/ipv6/defs_dragonfly.go | 84 - .../golang.org/x/net/ipv6/defs_freebsd.go | 105 - .../golang.org/x/net/ipv6/defs_linux.go | 145 - .../golang.org/x/net/ipv6/defs_netbsd.go | 80 - .../golang.org/x/net/ipv6/defs_openbsd.go | 89 - .../golang.org/x/net/ipv6/defs_solaris.go | 96 - .../ipv6/{dgramopt_posix.go => dgramopt.go} | 152 +- .../golang.org/x/net/ipv6/dgramopt_stub.go | 119 - .../beats/vendor/golang.org/x/net/ipv6/doc.go | 35 +- .../vendor/golang.org/x/net/ipv6/endpoint.go | 45 +- .../beats/vendor/golang.org/x/net/ipv6/gen.go | 208 - .../{genericopt_posix.go => genericopt.go} | 36 +- .../golang.org/x/net/ipv6/genericopt_stub.go | 30 - .../vendor/golang.org/x/net/ipv6/helper.go | 34 +- .../golang.org/x/net/ipv6/helper_stub.go | 19 - .../golang.org/x/net/ipv6/helper_unix.go | 46 - .../golang.org/x/net/ipv6/helper_windows.go | 45 - .../vendor/golang.org/x/net/ipv6/icmp.go | 9 +- .../vendor/golang.org/x/net/ipv6/icmp_bsd.go | 10 +- .../golang.org/x/net/ipv6/icmp_linux.go | 10 +- .../golang.org/x/net/ipv6/icmp_solaris.go | 27 +- .../vendor/golang.org/x/net/ipv6/icmp_stub.go | 14 +- .../golang.org/x/net/ipv6/icmp_windows.go | 14 +- .../vendor/golang.org/x/net/ipv6/payload.go | 14 +- .../golang.org/x/net/ipv6/payload_cmsg.go | 49 +- .../x/net/ipv6/payload_cmsg_go1_8.go | 55 + .../x/net/ipv6/payload_cmsg_go1_9.go | 57 + .../golang.org/x/net/ipv6/payload_nocmsg.go | 10 +- .../vendor/golang.org/x/net/ipv6/sockopt.go | 15 +- .../x/net/ipv6/sockopt_asmreq_unix.go | 22 - .../x/net/ipv6/sockopt_asmreq_windows.go | 21 - .../golang.org/x/net/ipv6/sockopt_posix.go | 87 + .../x/net/ipv6/sockopt_ssmreq_unix.go | 59 - .../golang.org/x/net/ipv6/sockopt_stub.go | 41 +- .../golang.org/x/net/ipv6/sockopt_unix.go | 122 - .../golang.org/x/net/ipv6/sockopt_windows.go | 86 - .../golang.org/x/net/ipv6/sys_asmreq.go | 24 + .../golang.org/x/net/ipv6/sys_asmreq_stub.go | 17 + .../vendor/golang.org/x/net/ipv6/sys_bpf.go | 23 + .../golang.org/x/net/ipv6/sys_bpf_stub.go | 16 + .../vendor/golang.org/x/net/ipv6/sys_bsd.go | 47 +- .../golang.org/x/net/ipv6/sys_darwin.go | 133 +- .../golang.org/x/net/ipv6/sys_freebsd.go | 71 +- .../vendor/golang.org/x/net/ipv6/sys_linux.go | 62 +- .../golang.org/x/net/ipv6/sys_solaris.go | 74 + .../golang.org/x/net/ipv6/sys_ssmreq.go | 54 + .../golang.org/x/net/ipv6/sys_ssmreq_stub.go | 21 + .../vendor/golang.org/x/net/ipv6/sys_stub.go | 4 +- .../golang.org/x/net/ipv6/sys_windows.go | 40 +- .../x/net/ipv6/syscall_linux_386.go | 31 - .../golang.org/x/net/ipv6/syscall_unix.go | 26 - .../golang.org/x/net/ipv6/zsys_darwin.go | 34 +- .../golang.org/x/net/ipv6/zsys_dragonfly.go | 24 +- .../golang.org/x/net/ipv6/zsys_freebsd_386.go | 40 +- .../x/net/ipv6/zsys_freebsd_amd64.go | 40 +- .../golang.org/x/net/ipv6/zsys_freebsd_arm.go | 40 +- .../golang.org/x/net/ipv6/zsys_linux_386.go | 52 +- .../golang.org/x/net/ipv6/zsys_linux_amd64.go | 52 +- .../golang.org/x/net/ipv6/zsys_linux_arm.go | 52 +- .../golang.org/x/net/ipv6/zsys_linux_arm64.go | 54 +- .../golang.org/x/net/ipv6/zsys_linux_mips.go | 170 + .../x/net/ipv6/zsys_linux_mips64.go | 54 +- .../x/net/ipv6/zsys_linux_mips64le.go | 54 +- .../x/net/ipv6/zsys_linux_mipsle.go | 170 + .../golang.org/x/net/ipv6/zsys_linux_ppc.go | 54 +- .../golang.org/x/net/ipv6/zsys_linux_ppc64.go | 54 +- .../x/net/ipv6/zsys_linux_ppc64le.go | 54 +- .../golang.org/x/net/ipv6/zsys_linux_s390x.go | 54 +- .../golang.org/x/net/ipv6/zsys_netbsd.go | 22 +- .../golang.org/x/net/ipv6/zsys_openbsd.go | 22 +- .../golang.org/x/net/ipv6/zsys_solaris.go | 52 +- .../golang.org/x/net/lex/httplex/httplex.go | 39 + .../vendor/golang.org/x/net/proxy/per_host.go | 6 +- .../vendor/golang.org/x/net/proxy/proxy.go | 44 +- .../vendor/golang.org/x/net/proxy/socks5.go | 57 +- .../golang.org/x/net/publicsuffix/gen.go | 713 - .../golang.org/x/net/publicsuffix/table.go | 17998 ++++++------- .../golang.org/x/sys/unix/affinity_linux.go | 124 + .../golang.org/x/sys/unix/asm_linux_386.s | 36 +- .../golang.org/x/sys/unix/asm_linux_amd64.s | 30 +- .../golang.org/x/sys/unix/asm_linux_arm.s | 35 +- .../golang.org/x/sys/unix/asm_linux_arm64.s | 30 +- .../golang.org/x/sys/unix/asm_linux_mips64x.s | 36 +- .../golang.org/x/sys/unix/asm_linux_mipsx.s | 33 +- .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 30 +- .../golang.org/x/sys/unix/asm_linux_s390x.s | 28 + .../vendor/golang.org/x/sys/unix/dirent.go | 89 +- .../vendor/golang.org/x/sys/unix/env_unix.go | 4 + .../vendor/golang.org/x/sys/unix/env_unset.go | 14 - .../vendor/golang.org/x/sys/unix/gccgo.go | 15 + .../vendor/golang.org/x/sys/unix/gccgo_c.c | 6 + .../vendor/golang.org/x/sys/unix/mkerrors.sh | 3 + .../vendor/golang.org/x/sys/unix/mksyscall.pl | 17 +- .../golang.org/x/sys/unix/syscall_bsd.go | 12 + .../golang.org/x/sys/unix/syscall_darwin.go | 13 +- .../x/sys/unix/syscall_dragonfly.go | 97 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 43 +- .../golang.org/x/sys/unix/syscall_linux.go | 66 +- .../golang.org/x/sys/unix/syscall_linux_gc.go | 14 + .../golang.org/x/sys/unix/syscall_netbsd.go | 76 +- .../golang.org/x/sys/unix/syscall_no_getwd.go | 11 - .../golang.org/x/sys/unix/syscall_openbsd.go | 76 +- .../golang.org/x/sys/unix/syscall_solaris.go | 39 +- .../golang.org/x/sys/unix/syscall_unix.go | 14 + .../golang.org/x/sys/unix/timestruct.go | 20 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 7 + .../x/sys/unix/zerrors_linux_386.go | 21 + .../x/sys/unix/zerrors_linux_amd64.go | 21 + .../x/sys/unix/zerrors_linux_arm.go | 21 + .../x/sys/unix/zerrors_linux_arm64.go | 21 + .../x/sys/unix/zerrors_linux_mips.go | 21 + .../x/sys/unix/zerrors_linux_mips64.go | 21 + .../x/sys/unix/zerrors_linux_mips64le.go | 21 + .../x/sys/unix/zerrors_linux_mipsle.go | 21 + .../x/sys/unix/zerrors_linux_ppc64.go | 21 + .../x/sys/unix/zerrors_linux_ppc64le.go | 21 + .../x/sys/unix/zerrors_linux_s390x.go | 21 + .../x/sys/unix/zerrors_netbsd_386.go | 9 +- .../x/sys/unix/zerrors_netbsd_amd64.go | 9 +- .../x/sys/unix/zerrors_netbsd_arm.go | 9 +- .../x/sys/unix/zerrors_openbsd_386.go | 9 +- .../x/sys/unix/zerrors_openbsd_amd64.go | 9 +- .../x/sys/unix/zerrors_openbsd_arm.go | 9 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 17 + .../x/sys/unix/zsyscall_freebsd_386.go | 34 + .../x/sys/unix/zsyscall_freebsd_amd64.go | 34 + .../x/sys/unix/zsyscall_freebsd_arm.go | 34 + .../x/sys/unix/zsyscall_linux_386.go | 35 +- .../x/sys/unix/zsyscall_linux_amd64.go | 35 +- .../x/sys/unix/zsyscall_linux_arm.go | 35 +- .../x/sys/unix/zsyscall_linux_arm64.go | 35 +- .../x/sys/unix/zsyscall_linux_mips.go | 35 +- .../x/sys/unix/zsyscall_linux_mips64.go | 35 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 35 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 35 +- .../x/sys/unix/zsyscall_linux_ppc64.go | 35 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 35 +- .../x/sys/unix/zsyscall_linux_s390x.go | 35 +- .../x/sys/unix/zsyscall_netbsd_386.go | 17 + .../x/sys/unix/zsyscall_netbsd_amd64.go | 17 + .../x/sys/unix/zsyscall_netbsd_arm.go | 17 + .../x/sys/unix/zsyscall_openbsd_386.go | 17 + .../x/sys/unix/zsyscall_openbsd_amd64.go | 17 + .../x/sys/unix/zsyscall_openbsd_arm.go | 17 + .../x/sys/unix/zsyscall_solaris_amd64.go | 11 + .../x/sys/unix/zsysnum_solaris_amd64.go | 13 - .../x/sys/unix/ztypes_dragonfly_amd64.go | 12 + .../x/sys/unix/ztypes_freebsd_386.go | 4 + .../x/sys/unix/ztypes_freebsd_amd64.go | 4 + .../x/sys/unix/ztypes_freebsd_arm.go | 4 + .../golang.org/x/sys/unix/ztypes_linux_386.go | 125 +- .../x/sys/unix/ztypes_linux_amd64.go | 161 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 167 +- .../x/sys/unix/ztypes_linux_arm64.go | 161 +- .../x/sys/unix/ztypes_linux_mips.go | 163 +- .../x/sys/unix/ztypes_linux_mips64.go | 161 +- .../x/sys/unix/ztypes_linux_mips64le.go | 161 +- .../x/sys/unix/ztypes_linux_mipsle.go | 163 +- .../x/sys/unix/ztypes_linux_ppc64.go | 161 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 161 +- .../x/sys/unix/ztypes_linux_s390x.go | 83 +- .../x/sys/unix/ztypes_netbsd_386.go | 12 + .../x/sys/unix/ztypes_netbsd_amd64.go | 12 + .../x/sys/unix/ztypes_netbsd_arm.go | 12 + .../x/sys/unix/ztypes_openbsd_386.go | 12 + .../x/sys/unix/ztypes_openbsd_amd64.go | 12 + .../x/sys/unix/ztypes_openbsd_arm.go | 12 + .../golang.org/x/sys/windows/env_unset.go | 15 - .../golang.org/x/sys/windows/env_windows.go | 4 + .../golang.org/x/sys/windows/registry/key.go | 32 +- .../x/sys/windows/registry/mksyscall.go | 7 + .../x/sys/windows/registry/syscall.go | 3 +- .../sys/windows/registry/zsyscall_windows.go | 39 +- .../x/sys/windows/security_windows.go | 41 + .../x/sys/windows/svc/debug/service.go | 2 +- .../golang.org/x/sys/windows/svc/go12.go | 2 +- .../golang.org/x/sys/windows/svc/go13.go | 2 +- .../golang.org/x/sys/windows/svc/service.go | 97 +- .../golang.org/x/sys/windows/svc/sys_386.s | 7 +- .../golang.org/x/sys/windows/svc/sys_amd64.s | 7 +- .../x/sys/windows/syscall_windows.go | 2 +- .../x/sys/windows/zsyscall_windows.go | 17 +- .../beats/vendor/golang.org/x/text/AUTHORS | 3 + .../vendor/golang.org/x/text/CONTRIBUTING.md | 31 + .../vendor/golang.org/x/text/CONTRIBUTORS | 3 + .../beats/vendor/golang.org/x/text/README.md | 93 + .../vendor/golang.org/x/text/codereview.cfg | 1 + .../beats/vendor/golang.org/x/text/doc.go | 16 + .../x/text/encoding/charmap/charmap.go | 84 +- .../x/text/encoding/charmap/maketables.go | 500 - .../x/text/encoding/charmap/tables.go | 1540 +- .../golang.org/x/text/encoding/encoding.go | 8 +- .../x/text/encoding/htmlindex/gen.go | 167 - .../x/text/encoding/htmlindex/htmlindex.go | 2 +- .../x/text/encoding/htmlindex/tables.go | 6 +- .../text/encoding/internal/identifier/gen.go | 137 - .../internal/identifier/identifier.go | 2 +- .../text/encoding/internal/identifier/mib.go | 2 +- .../x/text/encoding/japanese/eucjp.go | 72 +- .../x/text/encoding/japanese/iso2022jp.go | 59 +- .../x/text/encoding/japanese/maketables.go | 161 - .../x/text/encoding/japanese/shiftjis.go | 34 +- .../x/text/encoding/korean/euckr.go | 39 +- .../x/text/encoding/korean/maketables.go | 143 - .../x/text/encoding/simplifiedchinese/gbk.go | 60 +- .../encoding/simplifiedchinese/hzgb2312.go | 49 +- .../encoding/simplifiedchinese/maketables.go | 161 - .../text/encoding/traditionalchinese/big5.go | 25 +- .../encoding/traditionalchinese/maketables.go | 140 - .../golang.org/x/text/language/common.go | 2 +- .../vendor/golang.org/x/text/language/doc.go | 102 + .../golang.org/x/text/language/gen_common.go | 20 - .../golang.org/x/text/language/gen_index.go | 162 - .../golang.org/x/text/language/index.go | 1519 +- .../golang.org/x/text/language/language.go | 132 +- .../golang.org/x/text/language/maketables.go | 1635 -- .../golang.org/x/text/language/match.go | 383 +- .../golang.org/x/text/language/parse.go | 2 +- .../golang.org/x/text/language/tables.go | 5649 +++-- .../vendor/golang.org/x/text/runes/cond.go | 77 +- .../vendor/golang.org/x/text/runes/runes.go | 139 +- .../x/text/secure/bidirule/bidirule.go | 336 + .../x/text/secure/bidirule/bidirule10.0.0.go | 11 + .../x/text/secure/bidirule/bidirule9.0.0.go | 14 + .../golang.org/x/text/transform/transform.go | 52 +- .../golang.org/x/text/unicode/bidi/bidi.go | 198 + .../golang.org/x/text/unicode/bidi/bracket.go | 335 + .../golang.org/x/text/unicode/bidi/core.go | 1058 + .../golang.org/x/text/unicode/bidi/prop.go | 206 + .../x/text/unicode/bidi/tables10.0.0.go | 1815 ++ .../x/text/unicode/bidi/tables9.0.0.go | 1781 ++ .../golang.org/x/text/unicode/bidi/trieval.go | 60 + .../x/text/unicode/norm/composition.go | 508 + .../x/text/unicode/norm/forminfo.go | 259 + .../golang.org/x/text/unicode/norm/input.go | 109 + .../golang.org/x/text/unicode/norm/iter.go | 457 + .../x/text/unicode/norm/normalize.go | 609 + .../x/text/unicode/norm/readwriter.go | 125 + .../x/text/unicode/norm/tables10.0.0.go | 7653 ++++++ .../x/text/unicode/norm/tables9.0.0.go | 7633 ++++++ .../x/text/unicode/norm/transform.go | 88 + .../golang.org/x/text/unicode/norm/trie.go | 54 + .../golang.org/x/tools/go/loader/loader.go | 2 +- .../elastic/beats/vendor/vendor.json | 960 +- .../elastic/beats/winlogbeat/_meta/fields.yml | 2 +- .../beats/winlogbeat/beater/eventlogger.go | 2 +- .../beats/winlogbeat/beater/winlogbeat.go | 18 - .../beats/winlogbeat/checkpoint/checkpoint.go | 4 +- .../winlogbeat/checkpoint/checkpoint_test.go | 6 +- .../beats/winlogbeat/docs/fields.asciidoc | 403 +- .../winlogbeat/docs/getting-started.asciidoc | 18 +- .../beats/winlogbeat/docs/index.asciidoc | 11 +- .../beats/winlogbeat/docs/overview.asciidoc | 2 +- .../docs/securing-winlogbeat.asciidoc | 1 + .../docs/setting-up-running.asciidoc | 4 +- .../beats/winlogbeat/eventlog/common_test.go | 5 +- .../beats/winlogbeat/eventlog/eventlog.go | 19 +- .../beats/winlogbeat/eventlog/eventlogging.go | 20 +- .../winlogbeat/eventlog/eventlogging_test.go | 46 +- .../beats/winlogbeat/eventlog/wineventlog.go | 41 +- .../sys/eventlogging/eventlogging_windows.go | 55 +- .../sys/eventlogging/stringinserts_windows.go | 86 + .../sys/wineventlog/wineventlog_windows.go | 70 +- .../tests/system/test_eventlogging.py | 24 +- .../tests/system/test_wineventlog.py | 30 +- .../winlogbeat/tests/system/winlogbeat.py | 12 +- .../beats/winlogbeat/winlogbeat.reference.yml | 114 +- .../github.com/elastic/beats/x-pack/README.md | 5 + 2112 files changed, 185513 insertions(+), 90293 deletions(-) delete mode 100644 vendor/github.com/elastic/beats/.appveyor.yml create mode 100644 vendor/github.com/elastic/beats/CHANGELOG-developer.asciidoc create mode 100644 vendor/github.com/elastic/beats/auditbeat/Dockerfile create mode 100644 vendor/github.com/elastic/beats/auditbeat/docker-compose.yml create mode 100644 vendor/github.com/elastic/beats/auditbeat/tests/system/test_file_integrity.py rename vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/{go-1.9.2 => go-1.9.4}/Dockerfile (69%) rename vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/{go-1.9.2 => go-1.9.4}/Dockerfile (69%) create mode 100755 vendor/github.com/elastic/beats/dev-tools/promote_docs rename vendor/github.com/elastic/beats/filebeat/{beater => autodiscover}/autodiscover.go (72%) create mode 100644 vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs.go create mode 100644 vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/autodiscover/include.go create mode 100644 vendor/github.com/elastic/beats/filebeat/beater/acker_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/autodiscover-hints.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/images/filebeat-mongodb-overview.png create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/images/kibana-iis.png create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-common-file-options.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-common-harvester-options.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-common-options.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-common-tcp-options.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-common-udp-options.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-docker.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-log.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-redis.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-stdin.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-syslog.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-tcp.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/inputs/input-udp.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/modules/iis.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/docs/modules/mongodb.asciidoc delete mode 100644 vendor/github.com/elastic/beats/filebeat/docs/multiple-prospectors.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/fileset/config_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/fileset/pipelines.go rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/config.go (66%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/docker/config.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector/docker/prospector.go => input/docker/input.go} (51%) create mode 100644 vendor/github.com/elastic/beats/filebeat/input/file/states.go rename vendor/github.com/elastic/beats/filebeat/input/file/{state_test.go => states_test.go} (60%) create mode 100644 vendor/github.com/elastic/beats/filebeat/input/input.go rename vendor/github.com/elastic/beats/filebeat/{prospector/prospector_test.go => input/input_test.go} (55%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/config.go (94%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/config_test.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/file.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/harvester.go (91%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/harvester_test.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector/log/prospector.go => input/log/input.go} (71%) rename vendor/github.com/elastic/beats/filebeat/{prospector/log/prospector_other_test.go => input/log/input_other_test.go} (91%) rename vendor/github.com/elastic/beats/filebeat/{prospector/log/prospector_test.go => input/log/input_test.go} (61%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/log.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/prospector_windows_test.go (98%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/log/stdin.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/plugin.go (59%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/redis/_meta/Dockerfile (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/redis/_meta/env (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/redis/config.go (99%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/redis/doc.go (86%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/redis/harvester.go (100%) rename vendor/github.com/elastic/beats/filebeat/{prospector/redis/prospector.go => input/redis/input.go} (72%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/registry.go (55%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/registry_test.go (66%) rename vendor/github.com/elastic/beats/filebeat/{prospector => input}/runnerfactory.go (85%) rename vendor/github.com/elastic/beats/filebeat/{prospector/stdin/prospector.go => input/stdin/input.go} (63%) create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/event.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/event_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/input.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/input_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/parser.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/parser.rl create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/parser_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/syslog/syslog_rfc3164.rl create mode 100644 vendor/github.com/elastic/beats/filebeat/input/tcp/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/tcp/input.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/tcp/input_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/udp/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/input/udp/input.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/inputsource.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/network.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/network_metadata.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/client.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/conn.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/conn_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/scan.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/scan_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/server.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/tcp/server_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/udp/config.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/udp/server.go create mode 100644 vendor/github.com/elastic/beats/filebeat/inputsource/udp/server_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/_meta/config.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/_meta/kibana/6/dashboard/Filebeat-iis.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/config/iis-access.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/ingest/default.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/manifest.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/test/test.log create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/access/test/test.log-expected.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/config/iis-error.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/ingest/default.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/manifest.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/test/test.log create mode 100644 vendor/github.com/elastic/beats/filebeat/module/iis/error/test/test.log-expected.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/_meta/config.yml create mode 100755 vendor/github.com/elastic/beats/filebeat/module/mongodb/_meta/docs.asciidoc create mode 100755 vendor/github.com/elastic/beats/filebeat/module/mongodb/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/_meta/kibana/6/dashboard/Filebeat-Mongodb-overview.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/log/_meta/fields.yml rename vendor/github.com/elastic/beats/filebeat/{scripts/module/fileset/config/config.yml => module/mongodb/log/config/log.yml} (100%) mode change 100644 => 100755 create mode 100755 vendor/github.com/elastic/beats/filebeat/module/mongodb/log/ingest/pipeline.json create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/log/manifest.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/module/mongodb/log/test/mongodb-debian-3.2.11.log-expected.json create mode 100755 vendor/github.com/elastic/beats/filebeat/module/mongodb/module.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/modules.d/iis.yml.disabled create mode 100644 vendor/github.com/elastic/beats/filebeat/modules.d/mongodb.yml.disabled delete mode 100644 vendor/github.com/elastic/beats/filebeat/prospector/udp/config.go delete mode 100644 vendor/github.com/elastic/beats/filebeat/prospector/udp/harvester.go delete mode 100644 vendor/github.com/elastic/beats/filebeat/prospector/udp/prospector.go create mode 100644 vendor/github.com/elastic/beats/filebeat/registrar/registrar_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/fileset/config/config.yml rename vendor/github.com/elastic/beats/filebeat/scripts/{module => }/fileset/fields.yml (100%) rename vendor/github.com/elastic/beats/filebeat/scripts/{module => }/fileset/ingest/pipeline.json (100%) rename vendor/github.com/elastic/beats/filebeat/scripts/{module => }/fileset/manifest.yml (87%) create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/fileset/module-fileset.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/generator/fields/main_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/generator/generator.go create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/generator/module/main.go create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/module/_meta/config.yml rename vendor/github.com/elastic/beats/filebeat/scripts/module/{ => _meta}/docs.asciidoc (100%) rename vendor/github.com/elastic/beats/filebeat/scripts/module/{ => _meta}/fields.yml (100%) create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/module/module.yml create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/tester/main.go create mode 100644 vendor/github.com/elastic/beats/filebeat/scripts/tester/main_test.go create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/files/registry/test-2lines-registry-6.3.0 create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/files/registry/test-2lines-registry-6.3.1 create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/files/registry/test-2lines-registry-6.3.1-faulty create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/files/registry/test-2lines-registry-latest rename vendor/github.com/elastic/beats/filebeat/tests/system/config/{filebeat_prospectors.yml.j2 => filebeat_inputs.yml.j2} (69%) rename vendor/github.com/elastic/beats/filebeat/tests/system/{test_prospector.py => test_input.py} (86%) create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/system/test_registrar_upgrade.py rename vendor/github.com/elastic/beats/filebeat/tests/system/{test_reload_prospectors.py => test_reload_inputs.py} (71%) create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/system/test_stdin.py create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/system/test_syslog.py create mode 100644 vendor/github.com/elastic/beats/filebeat/tests/system/test_tcp.py create mode 100644 vendor/github.com/elastic/beats/heartbeat/monitors/active/http/check_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/appender.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/appender_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/appenders/config/config.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/appenders/config/config_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/appenders/registry.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/builder.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/builder/helper.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/builder/helper_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/builder/plugin.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/builder_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/providers/docker/docker_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/providers/kubernetes/kubernetes_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/providers/plugin.go create mode 100644 vendor/github.com/elastic/beats/libbeat/autodiscover/registry.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/atomic/atomic32.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/atomic/atomic64.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/cfgtype/byte_size.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/cfgtype/byte_size_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/coerce.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/coerce_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/docker/client.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/docker/client_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/kubernetes/eventhandler.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/kubernetes/metadata_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/kubernetes/types_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/safemapstr/safemapstr.go create mode 100644 vendor/github.com/elastic/beats/libbeat/common/safemapstr/safemapstr_test.go delete mode 100644 vendor/github.com/elastic/beats/libbeat/common/testdata/json_array_dedot.json delete mode 100644 vendor/github.com/elastic/beats/libbeat/common/testdata/json_array_with_dots.json delete mode 100644 vendor/github.com/elastic/beats/libbeat/common/testdata/json_map_dedot.json delete mode 100644 vendor/github.com/elastic/beats/libbeat/common/testdata/json_map_with_dots.json delete mode 100644 vendor/github.com/elastic/beats/libbeat/docs/installing-beats.asciidoc create mode 100644 vendor/github.com/elastic/beats/libbeat/docs/security/beats-system.asciidoc create mode 100644 vendor/github.com/elastic/beats/libbeat/docs/shared-getting-started-intro.asciidoc create mode 100644 vendor/github.com/elastic/beats/libbeat/docs/shared-shutdown.asciidoc create mode 100644 vendor/github.com/elastic/beats/libbeat/metric/system/process/process_linux.go create mode 100644 vendor/github.com/elastic/beats/libbeat/metric/system/process/process_other.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/actions/include_fields_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/actions/rename.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/actions/rename_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/add_host_metadata/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/add_host_metadata/add_host_metadata.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/add_host_metadata/add_host_metadata_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/cache.go create mode 100644 vendor/github.com/elastic/beats/libbeat/processors/add_kubernetes_metadata/kubernetes_test.go delete mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/pipeline/log.go rename vendor/github.com/elastic/beats/libbeat/publisher/pipeline/stress/configs/pipeline/{default.yml => default_mem.yml} (75%) rename vendor/github.com/elastic/beats/libbeat/publisher/pipeline/stress/configs/pipeline/{direct.yml => direct_mem.yml} (74%) create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/pipeline/stress/configs/pipeline/small_spool.yml create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/codec.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/config.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/consume.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/inbroker.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/internal_api.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/log.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/module.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/outbroker.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/produce.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/spool.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/spool_test.go create mode 100644 vendor/github.com/elastic/beats/libbeat/publisher/queue/spool/timer.go create mode 100644 vendor/github.com/elastic/beats/libbeat/setup/kibana/client_test.go rename vendor/github.com/elastic/beats/libbeat/{dashboards/testdata => tests/files}/testbeat-dashboards.zip (100%) create mode 100644 vendor/github.com/elastic/beats/libbeat/tests/system/config/libbeat.yml.j2 create mode 100644 vendor/github.com/elastic/beats/licenses/APACHE-LICENSE-2.0.txt create mode 100644 vendor/github.com/elastic/beats/licenses/ELASTIC-LICENSE.txt create mode 100644 vendor/github.com/elastic/beats/metricbeat/NOTICE.txt create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/appender/kubernetes/token/config.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/appender/kubernetes/token/token.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/appender/kubernetes/token/token_test.go rename vendor/github.com/elastic/beats/metricbeat/{beater => autodiscover}/autodiscover.go (98%) create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/builder/hints/config.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/builder/hints/metrics.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/builder/hints/metrics_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/autodiscover/include.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/autodiscover-hints.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/images/icon-no.png create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/images/icon-yes.png create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/kubernetes/state_statefulset.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/kvm.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/kvm/dommemstat.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/munin.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/munin/node.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/docs/modules/rabbitmq/connection.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/helper/http_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/aerospike/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/apache/_meta/Dockerfile.2.4.12 create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/ceph/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/couchbase/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/_meta/config.reference.yml delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/cpu/mock_cpu.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/helper_test.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/AUTHORS delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/DOCKER-LICENSE delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/Makefile delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/README.markdown delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/auth.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/change.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/client.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/client_unix.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/client_windows.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/container.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/env.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/event.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/exec.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/image.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/jsonmessage.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/misc.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/network.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/node.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/service.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/signal.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/swarm.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/tar.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/task.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/tls.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/volume.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/hashicorp/go-cleanhttp/LICENSE delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/hashicorp/go-cleanhttp/README.md delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/github.com/hashicorp/go-cleanhttp/doc.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/docker/vendor/vendor.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/dropwizard/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/elasticsearch/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/elasticsearch/test_elasticsearch.py create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/etcd/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/graphite/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/haproxy/_meta/Dockerfile.1.6 create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/haproxy/_meta/Dockerfile.1.7 create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/haproxy/_meta/config.reference.yml rename vendor/github.com/elastic/beats/metricbeat/module/haproxy/stat/{stat_ingetration_test.go => stat_integration_test.go} (100%) create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/jolokia/jmx/_meta/test/jolokia_response_wildcard.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/jolokia/jmx/config_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kafka/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kibana/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/_meta/config.reference.yml delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/event/types.go delete mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/event/watcher.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/_meta/data.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/data.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/state_statefulset.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/state_statefulset/state_statefulset_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/util/metrics_cache.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kubernetes/util/metrics_cache_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/_meta/config.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/doc.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/dommemstat/_meta/data.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/dommemstat/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/dommemstat/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/dommemstat/dommemstat.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/dommemstat/dommemstat_test.go rename vendor/github.com/elastic/beats/{vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew => metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr}/LICENSE (84%) create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr/xdr2/decode.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr/xdr2/doc.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr/xdr2/encode.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr/xdr2/error.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/AUTHORS create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/CONTRIBUTING.md create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/LICENSE.md create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/README.md create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/const.gen.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/doc.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/internal/constants/constants.gen.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/internal/constants/constants.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/libvirt.gen.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/libvirt.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/libvirt.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/libvirtd.conf create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/libvirttest/libvirt.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/rpc.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/kvm/vendor/vendor.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/logstash/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/memcached/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/mongodb/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/Dockerfile create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/config.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/env create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/_meta/munin-node.conf create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/doc.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/munin.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/munin_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/node/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/node/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/munin/node/node.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/mysql/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/php_fpm/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/postgresql/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/prometheus/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/_meta/testdata/connection_sample_response.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/_meta/data.json create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/_meta/docs.asciidoc create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/_meta/fields.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/connection.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/connection_integration_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/connection_test.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/rabbitmq/connection/data.go create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/redis/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/system/diskio/_meta/testdata/proc/diskstats create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/uwsgi/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/vsphere/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/windows/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/module/zookeeper/_meta/config.reference.yml create mode 100644 vendor/github.com/elastic/beats/metricbeat/modules.d/kvm.yml.disabled create mode 100644 vendor/github.com/elastic/beats/metricbeat/modules.d/munin.yml.disabled delete mode 100644 vendor/github.com/elastic/beats/metricbeat/tests/system/test_elasticsearch.py create mode 100644 vendor/github.com/elastic/beats/metricbeat/tests/system/test_munin.py create mode 100644 vendor/github.com/elastic/beats/metricbeat/vendor/github.com/golang/protobuf/proto/discard.go rename vendor/github.com/elastic/beats/packetbeat/_meta/kibana/{default => 6}/dashboard/Packetbeat-tls.json (91%) create mode 100644 vendor/github.com/elastic/beats/packetbeat/docs/images/filterforval_icon.png create mode 100644 vendor/github.com/elastic/beats/packetbeat/docs/images/filteroutval_icon.png rename vendor/github.com/elastic/beats/packetbeat/tests/{system => }/files/ThriftTest.thrift (100%) rename vendor/github.com/elastic/beats/packetbeat/tests/{system => }/files/shared.thrift (100%) rename vendor/github.com/elastic/beats/packetbeat/tests/{system => }/files/tutorial.thrift (100%) create mode 100644 vendor/github.com/elastic/beats/packetbeat/tests/system/pcaps/http_unmatched.pcap create mode 100644 vendor/github.com/elastic/beats/packetbeat/tests/system/pcaps/http_unmatched_timeout.pcap create mode 100644 vendor/github.com/elastic/beats/packetbeat/tests/system/test_0065_unmatched_http.py create mode 100644 vendor/github.com/elastic/beats/script/update_golang_x.py delete mode 100644 vendor/github.com/elastic/beats/testing/environments/5.0.0-cgroups.yml create mode 100755 vendor/github.com/elastic/beats/testing/environments/docker/elasticsearch/download.sh create mode 100755 vendor/github.com/elastic/beats/testing/environments/docker/kibana/download.sh create mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/logstash/config/log4j2.properties create mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/logstash/config/logstash-oss.yml create mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/logstash/config/logstash-x-pack.yml create mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/logstash/config/pipelines.yml create mode 100755 vendor/github.com/elastic/beats/testing/environments/docker/logstash/download.sh rename vendor/github.com/elastic/beats/testing/environments/docker/logstash/{logstash.conf.tmpl => pipeline/default.conf} (86%) delete mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/metricbeat/Dockerfile-5.0.0-cgroups delete mode 100644 vendor/github.com/elastic/beats/testing/environments/docker/metricbeat/config/metricbeat.cgroups.yml delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-libaudit/LICENSE create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-libaudit/LICENSE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-libaudit/NOTICE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-structform/CHANGELOG.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-structform/LICENSE rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/array.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/basetype_string.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/decode.go (95%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/defs.go (93%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/error.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/parse.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/stack.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/cborl/visitor.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/0gen.go (86%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/defs.go (91%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/error.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_arr.go (98%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_inline.go (96%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_map.go (98%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_map_inline.generated.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_map_inline.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_primitives.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_refl_sel.generated.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_refl_sel.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_reflect.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/fold_user.go (91%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/opts.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/stacks.generated.go (98%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/stacks.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/symbols.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/tags.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/types.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold.go (93%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_arr.generated.go (89%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_arr.yml (90%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_err.generated.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_err.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_ignore.generated.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_ignore.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_lookup.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_lookup_go.generated.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_lookup_go.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_map.generated.go (89%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_map.yml (80%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_primitive.generated.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_primitive.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_refl.generated.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_refl.go (97%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_refl.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_struct.go (96%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/gotype/unfold_templates.yml (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/internal/unsafe/unsafe.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/decode.go (95%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/defs.go (84%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/json.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/parse.go (93%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/state_string.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/json/visitor.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/map.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/string.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/decode.go (95%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/defs.go (92%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/parse.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/stack.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/statestep_string.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/statetype_string.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/ubjson/visitor.go (99%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/visitor.go (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/visitors/expect_obj.go (98%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-structform/visitors/nilVisitor.go rename vendor/github.com/elastic/beats/vendor/github.com/{urso => elastic}/go-structform/visitors/stringer.go (98%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/LICENSE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/NOTICE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/internal/registry/registry.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/arch_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/boottime_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/doc.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/host_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/kernel_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/memory_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/os.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/process_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/syscall_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/darwin/ztypes_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/arch_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/boottime_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/capabilities_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/container.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/doc.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/host_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/kernel_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/machineid.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/memory_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/os.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/process_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/seccomp_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/linux/util.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/shared/network.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/arch_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/boottime_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/doc.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/host_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/kernel_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/machineid_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/providers/windows/os_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/system.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/types/errors.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/types/go.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/types/host.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-sysinfo/types/process.go rename vendor/github.com/elastic/beats/vendor/github.com/elastic/{procfs => go-txfile}/LICENSE (100%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/alloc.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/errors.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/file.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/freelist.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/idlist.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/internal/cleanup/cleanup.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/internal/cleanup/multi.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/internal/invariant/invariant.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/internal/iter/iter.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/internal/tracelog/tracelog.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/layout.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/lock.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/meta_sizing.py create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/page.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pageset.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/access.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/ack.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/buffer.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/cursor.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/delegate.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/error.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/layout.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/page.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/pq.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/reader.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/trace.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/trace_disabled.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/trace_enabled.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/util.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/pq/writer.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/region.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/trace.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/trace_disabled.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/trace_enabled.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/tx.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/txfiletest/txfiletest.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/util.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/vfs.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/vfs_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/vfs_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/wal.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-txfile/write.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/LICENSE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/NOTICE.txt create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/doc.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/kernel32.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/uft16.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/version.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/go-windows/zsyscall_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/gosigar/codecov.yml create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/gosigar/sys/endian.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/procfs/AUTHORS.md delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/procfs/Makefile delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/procfs/fs.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/elastic/procfs/stat.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/api/unversioned/generated.pb.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/api/unversioned/time.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/apiextensions/v1beta1/generated.pb.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/apiextensions/v1beta1/register.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/apps/v1alpha1/generated.pb.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/apps/v1beta1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/authentication/v1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/authentication/v1beta1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/authorization/v1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/authorization/v1beta1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/autoscaling/v1/register.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/autoscaling/v2alpha1/generated.pb.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/batch/v1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/batch/v2alpha1/register.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/certificates/v1alpha1/generated.pb.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/certificates/v1beta1/register.go rename vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/{api => apis/core}/v1/generated.pb.go (76%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/core/v1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/extensions/v1beta1/register.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/policy/v1alpha1/generated.pb.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/policy/v1beta1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/rbac/v1alpha1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/rbac/v1beta1/register.go rename vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/{api => apis}/resource/generated.pb.go (82%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/settings/v1alpha1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/storage/v1/register.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/apis/storage/v1beta1/register.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/gen.go delete mode 100755 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/gen.sh create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/resource.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/tprs.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/types.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/ericchiang/k8s/watch.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/fsnotify/fsevents/example/main.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/fsnotify/fsevents/wrap_deprecated.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/go-ole/go-ole/LICENSE rename vendor/github.com/elastic/beats/vendor/github.com/{stretchr/testify/vendor/github.com => }/pmezard/go-difflib/LICENSE (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{stretchr/testify/vendor/github.com => }/pmezard/go-difflib/difflib/difflib.go (95%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/CONTRIBUTING.md (81%) rename vendor/github.com/elastic/beats/vendor/github.com/{urso/go-structform => prometheus/procfs}/LICENSE (99%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/MAINTAINERS.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/Makefile rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/NOTICE (100%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/README.md (78%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/buddyinfo.go rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/doc.go (100%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/fixtures.ttar create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/fs.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/internal/util/parse.go rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/ipvs.go (78%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/mdstat.go (85%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/mountstats.go rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/net_dev.go (90%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/nfs/nfs.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/nfs/parse.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/nfs/parse_nfs.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/proc.go (82%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/proc_io.go (63%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/proc_limits.go (78%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/proc_ns.go (69%) rename vendor/github.com/elastic/beats/vendor/github.com/{elastic => prometheus}/procfs/proc_stat.go (88%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/stat.go create mode 100755 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/ttar create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/xfrm.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/xfs/parse.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/prometheus/procfs/xfs/xfs.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/samuel/go-parser/LICENSE create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/samuel/go-parser/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/shirou/gopsutil/disk/disk_solaris.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/shirou/gopsutil/disk/types_freebsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/shirou/gopsutil/disk/types_openbsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/shirou/gopsutil/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/Godeps/Godeps.json delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/Godeps/Readme delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/assert/assertion_format.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/http/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/http/test_response_writer.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/http/test_round_tripper.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/mock/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/mock/mock.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/forward_requirements.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/require.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/require.go.tmpl delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/require_forward.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/require_forward.go.tmpl delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/require/requirements.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/suite/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/suite/interfaces.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/suite/suite.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/bypass.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/common.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/config.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/dump.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/format.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/spew.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/LICENSE.md delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/README.md delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/accessors.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/codegen/index.html delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/constants.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/conversions.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/map.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/mutations.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/security.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/tests.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/type_specific_codegen.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/value.go rename vendor/github.com/elastic/beats/{metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient => vendor/github.com/theckman/go-flock}/LICENSE (51%) create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/appveyor.yml create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/flock.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/flock_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/flock_winapi.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/theckman/go-flock/flock_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/tsg/gopacket/pcap/pcap_poll_common.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/tsg/gopacket/pcap/pcap_poll_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/0gen.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/LICENSE create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/bin.generated.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/bin.yml create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/bin_test.yml create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/cast.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/native_be.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/native_le.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-bin/types.yml delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/CHANGELOG.md delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/gotype/buffer.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/internal/gen/gen_yaml.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/sftest/cases.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/sftest/sftest.go delete mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/go-structform/sftest/util.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/qcgen/LICENSE create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/qcgen/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/qcgen/helpers.go create mode 100644 vendor/github.com/elastic/beats/vendor/github.com/urso/qcgen/qcgen.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/bpf/setter.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/context/go19.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/context/pre_go19.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/ciphers.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/databuffer.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/fixed_buffer.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/go17_not18.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/go18.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/go19.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/not_go18.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/not_go19.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/writesched_priority.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/http2/writesched_random.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/icmp/helper.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/idna/idna.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/idna/punycode.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/idna/tables.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/idna/trie.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/idna/trieval.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/iana/gen.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/error_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/error_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/iovec_32bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/iovec_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/iovec_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/msghdr_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn_msg.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/rawconn_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/reflect.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/socket.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_bsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_darwin.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_386.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/{ipv6/thunk_linux_386.s => internal/socket/sys_linux_386.s} (59%) create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_netbsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_posix.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_solaris.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/sys_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/batch.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/bpfopt_linux.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/bpfopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_darwin.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_dragonfly.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_freebsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_linux.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_netbsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_openbsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/defs_solaris.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/{dgramopt_posix.go => dgramopt.go} (70%) delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/dgramopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/gen.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/{genericopt_posix.go => genericopt.go} (61%) delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/genericopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/helper_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/helper_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/helper_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/packet_go1_8.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/packet_go1_9.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_asmreq_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_asmreq_windows.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_posix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sockopt_windows.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/{sockopt_asmreq.go => sys_asmreq.go} (57%) create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/{sockopt_asmreqn_unix.go => sys_asmreqn.go} (50%) rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/{ipv6/sockopt_ssmreq_stub.go => ipv4/sys_asmreqn_stub.go} (51%) create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_bpf.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_dragonfly.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_openbsd.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_solaris.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_ssmreq.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/syscall_linux_386.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/syscall_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/thunk_linux_386.s create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/batch.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/bpfopt_linux.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/bpfopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_darwin.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_dragonfly.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_freebsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_linux.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_netbsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_openbsd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/defs_solaris.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/{dgramopt_posix.go => dgramopt.go} (69%) delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/dgramopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/gen.go rename vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/{genericopt_posix.go => genericopt.go} (61%) delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/genericopt_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/helper_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/helper_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/helper_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_asmreq_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_asmreq_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_posix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_unix.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sockopt_windows.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_asmreq.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_bpf.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_solaris.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_ssmreq.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/syscall_linux_386.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/syscall_unix.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/net/publicsuffix/gen.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/unix/affinity_linux.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/unix/env_unset.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/unix/syscall_linux_gc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/unix/syscall_no_getwd.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/windows/env_unset.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/AUTHORS create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/CONTRIBUTING.md create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/CONTRIBUTORS create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/README.md create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/codereview.cfg create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/charmap/maketables.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/htmlindex/gen.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/internal/identifier/gen.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/japanese/maketables.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/korean/maketables.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/language/doc.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/language/gen_common.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/language/gen_index.go delete mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/language/maketables.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/secure/bidirule/bidirule.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/bidi.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/bracket.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/core.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/prop.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/bidi/trieval.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/composition.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/forminfo.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/input.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/iter.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/normalize.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/readwriter.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/transform.go create mode 100644 vendor/github.com/elastic/beats/vendor/golang.org/x/text/unicode/norm/trie.go create mode 100644 vendor/github.com/elastic/beats/winlogbeat/sys/eventlogging/stringinserts_windows.go create mode 100644 vendor/github.com/elastic/beats/x-pack/README.md diff --git a/vendor/github.com/elastic/beats/.appveyor.yml b/vendor/github.com/elastic/beats/.appveyor.yml deleted file mode 100644 index c2ad65f9..00000000 --- a/vendor/github.com/elastic/beats/.appveyor.yml +++ /dev/null @@ -1,111 +0,0 @@ -# Version format -version: "{build}" - -# Operating system (build VM template) -os: Windows Server 2012 R2 - -# Environment variables -environment: - GOPATH: c:\gopath - GVM_DL: https://github.com/andrewkroh/gvm/releases/download/v0.0.1/gvm-windows-amd64.exe - PYWIN_DL: https://beats-files.s3.amazonaws.com/deps/pywin32-220.win32-py2.7.exe - matrix: - - PROJ: github.com\elastic\beats\metricbeat - BEAT: metricbeat - - PROJ: github.com\elastic\beats\filebeat - BEAT: filebeat - - PROJ: github.com\elastic\beats\winlogbeat - BEAT: winlogbeat - -# Custom clone folder (variables are not expanded here). -clone_folder: c:\gopath\src\github.com\elastic\beats - -# Cache files until appveyor.yml is modified. -cache: -- C:\ProgramData\chocolatey\bin -> .appveyor.yml -- C:\ProgramData\chocolatey\lib -> .appveyor.yml -- C:\Users\appveyor\.gvm -> .go-version -- C:\Windows\System32\gvm.exe -> .appveyor.yml -- C:\tools\mingw64 -> .appveyor.yml -- C:\pywin_inst.exe -> .appveyor.yml - -# Scripts that run after cloning repository -install: - - ps: >- - if(!(Test-Path "C:\Windows\System32\gvm.exe")) { - wget "$env:GVM_DL" -Outfile C:\Windows\System32\gvm.exe - } - - ps: gvm --format=powershell $(Get-Content .go-version) | Invoke-Expression - # AppVeyor installed mingw is 32-bit only so install 64-bit version. - - ps: >- - if(!(Test-Path "C:\tools\mingw64\bin\gcc.exe")) { - cinst mingw > mingw-install.txt - Push-AppveyorArtifact mingw-install.txt - } - - set PATH=C:\tools\mingw64\bin;%PATH% - - set PATH=%GOPATH%\bin;%PATH% - - go install github.com/elastic/beats/vendor/github.com/pierrre/gotestcover - - go version - - go env - # Download the PyWin32 installer if it is not cached. - - ps: >- - if(!(Test-Path "C:\pywin_inst.exe")) { - (new-object net.webclient).DownloadFile("$env:PYWIN_DL", 'C:/pywin_inst.exe') - } - - set PYTHONPATH=C:\Python27 - - set PATH=%PYTHONPATH%;%PYTHONPATH%\Scripts;%PATH% - - python --version - - pip install six jinja2 nose nose-timer PyYAML redis elasticsearch - - easy_install C:/pywin_inst.exe - -# To run your custom scripts instead of automatic MSBuild -build_script: - # Compile - - appveyor AddCompilationMessage "Starting Compile" - - ps: cd $env:BEAT - - go build - - appveyor AddCompilationMessage "Compile Success" -FileName "%BEAT%.exe" - -# To run your custom scripts instead of automatic tests -test_script: - # Unit tests - - ps: Add-AppveyorTest "Unit Tests" -Outcome Running - - mkdir build\coverage - - gotestcover -race -coverprofile=build/coverage/integration.cov github.com/elastic/beats/%BEAT%/... - - ps: Update-AppveyorTest "Unit Tests" -Outcome Passed - # System tests - - ps: Add-AppveyorTest "System tests" -Outcome Running - - go test -race -c -cover -covermode=atomic -coverpkg ./... - - ps: | - if ($env:BEAT -eq "metricbeat") { - cp .\_meta\fields.common.yml .\_meta\fields.generated.yml - python .\scripts\fields_collector.py | out-file -append -encoding UTF8 -filepath .\_meta\fields.generated.yml - } - - ps: cd tests/system - - nosetests --with-timer - - ps: Update-AppveyorTest "System tests" -Outcome Passed - -after_test: - - ps: cd $env:GOPATH\src\$env:PROJ - - python ..\dev-tools\aggregate_coverage.py -o build\coverage\system.cov .\build\system-tests\run - - python ..\dev-tools\aggregate_coverage.py -o build\coverage\full.cov .\build\coverage - - go tool cover -html=build\coverage\full.cov -o build\coverage\full.html - - ps: Push-AppveyorArtifact build\coverage\full.cov - - ps: Push-AppveyorArtifact build\coverage\full.html - # Upload coverage report. - - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%" - - pip install codecov - - ps: cd $env:GOPATH\src\github.com\elastic\beats - - codecov -X gcov -f "%BEAT%\build\coverage\full.cov" - -# Executes for both successful and failed builds -on_finish: - - ps: cd $env:GOPATH\src\$env:PROJ - - 7z a -r system-tests-output.zip build\system-tests\run - - ps: Push-AppveyorArtifact system-tests-output.zip - -# To disable deployment -deploy: off - -# Notifications should only be setup using the AppVeyor UI so that -# forks can be created without inheriting the settings. diff --git a/vendor/github.com/elastic/beats/.gitignore b/vendor/github.com/elastic/beats/.gitignore index fa69db58..56e3cccf 100644 --- a/vendor/github.com/elastic/beats/.gitignore +++ b/vendor/github.com/elastic/beats/.gitignore @@ -7,6 +7,7 @@ /*/logs /*/fields.yml /*/*.template*.json +**/html_docs # Files .DS_Store diff --git a/vendor/github.com/elastic/beats/.go-version b/vendor/github.com/elastic/beats/.go-version index 8fdcf386..d615fd0c 100644 --- a/vendor/github.com/elastic/beats/.go-version +++ b/vendor/github.com/elastic/beats/.go-version @@ -1 +1 @@ -1.9.2 +1.9.4 diff --git a/vendor/github.com/elastic/beats/.travis.yml b/vendor/github.com/elastic/beats/.travis.yml index d79cd3f4..8328ae78 100644 --- a/vendor/github.com/elastic/beats/.travis.yml +++ b/vendor/github.com/elastic/beats/.travis.yml @@ -14,7 +14,7 @@ env: - GOX_FLAGS="-arch amd64" - DOCKER_COMPOSE_VERSION=1.11.1 - GO_VERSION="$(cat .go-version)" - - TRAVIS_ETCD_VERSION=v3.2.8 + - TRAVIS_MINIKUBE_VERSION=v0.25.2 jobs: include: @@ -50,7 +50,7 @@ jobs: go: $GO_VERSION stage: test - os: osx - env: TARGETS="-C auditbeat testsuite" + env: TARGETS="TEST_ENVIRONMENT=0 -C auditbeat testsuite" go: $GO_VERSION stage: test - os: linux @@ -68,7 +68,7 @@ jobs: go: $GO_VERSION stage: test - os: linux - env: TARGETS="-C libbeat stress-tests" + env: STRESS_TEST_OPTIONS="-timeout=20m -race -v -parallel 1" TARGETS="-C libbeat stress-tests" go: $GO_VERSION stage: test @@ -113,19 +113,31 @@ jobs: install: deploy/kubernetes/.travis/setup.sh env: - TARGETS="-C deploy/kubernetes test" - - TRAVIS_KUBE_VERSION=v1.6.11 + - TRAVIS_K8S_VERSION=v1.6.4 + stage: test + - os: linux + install: deploy/kubernetes/.travis/setup.sh + env: + - TARGETS="-C deploy/kubernetes test" + - TRAVIS_K8S_VERSION=v1.7.5 + stage: test + - os: linux + install: deploy/kubernetes/.travis/setup.sh + env: + - TARGETS="-C deploy/kubernetes test" + - TRAVIS_K8S_VERSION=v1.8.0 stage: test - os: linux install: deploy/kubernetes/.travis/setup.sh env: - TARGETS="-C deploy/kubernetes test" - - TRAVIS_KUBE_VERSION=v1.7.7 + - TRAVIS_K8S_VERSION=v1.9.4 stage: test - os: linux install: deploy/kubernetes/.travis/setup.sh env: - TARGETS="-C deploy/kubernetes test" - - TRAVIS_KUBE_VERSION=v1.8.0 + - TRAVIS_K8S_VERSION=v1.10.0 stage: test addons: diff --git a/vendor/github.com/elastic/beats/CHANGELOG-developer.asciidoc b/vendor/github.com/elastic/beats/CHANGELOG-developer.asciidoc new file mode 100644 index 00000000..8a670158 --- /dev/null +++ b/vendor/github.com/elastic/beats/CHANGELOG-developer.asciidoc @@ -0,0 +1,29 @@ +// Use these for links to issue and pulls. Note issues and pulls redirect one to +// each other on Github, so don't worry too much on using the right prefix. +:issue: https://github.com/elastic/beats/issues/ +:pull: https://github.com/elastic/beats/pull/ + +This changelog is intended for community Beat developers. It covers the major +breaking changes to the internal APIs in the official Beats and changes related +to developing a Beat like code generators or `fields.yml`. Only the major +changes will be covered in this changelog that are expected to affect community +developers. Each breaking change added here should have an explanation on how +other Beats should be migrated. + +Note: This changelog was only started after the 6.3 release. + +=== Beats version HEAD +https://github.com/elastic/beats/compare/v6.3.0..master[Check the HEAD diff] + +The list below covers the major changes between 6.3.0 and master only. + +==== Breaking changes + +- The beat.Pipeline is now passed to cfgfile.RunnerFactory. Beats using libbeat for module reloading or autodiscovery need to be adapted. {pull}7018[7017] +- Moving of TLS helper functions and structs from `output/tls` to `tlscommon`. {pull}7054[7054] + +==== Bugfixes + +- Fix permissions of generated Filebeat filesets. {pull}7140[7140] + +==== Added diff --git a/vendor/github.com/elastic/beats/CHANGELOG.asciidoc b/vendor/github.com/elastic/beats/CHANGELOG.asciidoc index 1a217be3..4db21a60 100644 --- a/vendor/github.com/elastic/beats/CHANGELOG.asciidoc +++ b/vendor/github.com/elastic/beats/CHANGELOG.asciidoc @@ -1,4 +1,3 @@ - // Use these for links to issue and pulls. Note issues and pulls redirect one to // each other on Github, so don't worry too much on using the right prefix. :issue: https://github.com/elastic/beats/issues/ @@ -8,7 +7,7 @@ // Template, add newest changes here === Beats version HEAD -https://github.com/elastic/beats/compare/v6.2.2...6.2[Check the HEAD diff] +https://github.com/elastic/beats/compare/v6.3.2...6.3[Check the HEAD diff] ==== Breaking changes @@ -32,8 +31,6 @@ https://github.com/elastic/beats/compare/v6.2.2...6.2[Check the HEAD diff] *Auditbeat* -- Add hex decoding for the name field in audit path records. {pull}6687[6687] - *Filebeat* *Heartbeat* @@ -42,8 +39,6 @@ https://github.com/elastic/beats/compare/v6.2.2...6.2[Check the HEAD diff] *Packetbeat* -- HTTP parses successfully on empty status phrase. {issue}6176[6176] - *Winlogbeat* ==== Added @@ -81,6 +76,292 @@ https://github.com/elastic/beats/compare/v6.2.2...6.2[Check the HEAD diff] //////////////////////////////////////////////////////////// +[[release-notes-6.3.2]] +=== Beats version 6.3.2 +https://github.com/elastic/beats/compare/v6.3.1...v6.3.2[View commits] + +==== Bugfixes + +*Affecting all Beats* + +- Fix registry duplicates and log resending on upgrade. {issue}7634[7634] +- Fix default value for logging.files.keepfiles. It was being set to 0 and now + it's set to the documented value of 7. {issue}7494[7494] +- Retain compatibility with older Docker server versions. {issue}7542[7542] + +*Metricbeat* + +- Fix missing hosts config option in Ceph module. {pull}7596[7596] +- Ensure metadata updates don't replace existing pod metrics. {pull}7573[7573] + +==== Added + +*Metricbeat* + +- Add support for bearer token files to HTTP helper. {pull}7527[7527] + +*Packetbeat* + +- Updated the TLS protocol parser with new cipher suites added to TLS 1.3. {issue}7455[7455] + + +[[release-notes-6.3.1]] +=== Beats version 6.3.1 +https://github.com/elastic/beats/compare/v6.3.0...v6.3.1[View commits] + +==== Bugfixes + +*Affecting all Beats* + +- Allow index-pattern only setup when setup.dashboards.only_index=true. {pull}7285[7285] +- Preserve the event when source matching fails in `add_docker_metadata`. {pull}7133[7133] +- Negotiate Docker API version from our client instead of using a hardcoded one. {pull}7165[7165] +- Fix duplicating dynamic_fields in template when overwriting the template. {pull}7352[7352] + +*Auditbeat* + +- Fixed parsing of AppArmor audit messages. {pull}6978[6978] + +*Filebeat* + +- Comply with PostgreSQL database name format {pull}7198[7198] +- Optimize PostgreSQL ingest pipeline to use anchored regexp and merge multiple regexp into a single expression. {pull}7269[7269] +- Keep different registry entry per container stream to avoid wrong offsets. {issue}7281[7281] +- Fix offset field pointing at end of a line. {issue}6514[6514] +- Commit registry writes to stable storage to avoid corrupt registry files. {issue}6792[6792] + +*Metricbeat* + +- Fix field mapping for the system process CPU ticks fields. {pull}7230[7230] +- Ensure canonical naming for JMX beans is disabled in Jolokia module. {pull}7047[7047] +- Fix Jolokia attribute mapping when using wildcards and MBean names with multiple properties. {pull}7321[7321] + +*Packetbeat* + +- Fix an out of bounds access in HTTP parser caused by malformed request. {pull}6997[6997] +- Fix missing type for `http.response.body` field. {pull}7169[7169] + +==== Added + +*Auditbeat* + +- Added caching of UID and GID values to auditd module. {pull}6978[6978] +- Updated syscall tables for Linux 4.16. {pull}6978[6978] +- Added better error messages for when the auditd module fails due to the + Linux kernel not supporting auditing (CONFIG_AUDIT=n). {pull}7012[7012] + +*Metricbeat* + +- Collect accumulated docker network metrics and mark old ones as deprecated. {pull}7253[7253] + + + +[[release-notes-6.3.0]] +=== Beats version 6.3.0 +https://github.com/elastic/beats/compare/v6.2.3...v6.3.0[View commits] + +==== Breaking changes + +*Affecting all Beats* + +- De dot keys of labels and annotations in kubernetes meta processors to prevent collisions. {pull}6203[6203] +- Rename `beat.cpu.*.time metrics` to `beat.cpu.*.time.ms`. {pull}6449[6449] +- Add `host.name` field to all events, to avoid mapping conflicts. This could be breaking Logstash configs if you rely on the `host` field being a string. {pull}7051[7051] + +*Filebeat* + +- Add validation for Stdin, when Filebeat is configured with Stdin and any other inputs, Filebeat + will now refuse to start. {pull}6463[6463] +- Mark `system.syslog.message` and `system.auth.message` as `text` instead of `keyword`. {pull}6589[6589] + +*Metricbeat* + +- De dot keys in kubernetes/event metricset to prevent collisions. {pull}6203[6203] +- Add config option for windows/perfmon metricset to ignore non existent counters. {pull}6432[6432] +- Refactor docker CPU calculations to be more consistent with `docker stats`. {pull}6608[6608] +- Update logstash.node_stats metricset to write data under `logstash.node.stats.*`. {pull}6714[6714] + +==== Bugfixes + +*Affecting all Beats* + +- Fix panic when Events containing a float32 value are normalized. {pull}6129[6129] +- Fix `setup.dashboards.always_kibana` when using Kibana 5.6. {issue}6090[6090] +- Fix for Kafka logger. {pull}6430[6430] +- Remove double slashes in Windows service script. {pull}6491[6491] +- Ensure Kubernetes labels/annotations don't break mapping {pull}6490[6490] +- Ensure that the dashboard zip files can't contain files outside of the kibana directory. {pull}6921[6921] +- Fix map overwrite panics by cloning shared structs before doing the update. {pull}6947[6947] +- Fix delays on autodiscovery events handling caused by blocking runner stops. {pull}7170[7170] +- Do not emit Kubernetes autodiscover events for Pods without IP address. {pull}7235[7235] + +*Auditbeat* + +- Add hex decoding for the name field in audit path records. {pull}6687[6687] +- Fixed a deadlock in the file_integrity module under Windows. {issue}6864[6864] + +*Filebeat* + +- Fix panic when log prospector configuration fails to load. {issue}6800[6800] +- Fix memory leak in log prospector when files cannot be read. {issue}6797[6797] +- Add raw JSON to message field when JSON parsing fails. {issue}6516[6516] +- Commit registry writes to stable storage to avoid corrupt registry files. {pull}6877[6877] +- Fix a parsing issue in the syslog input for RFC3339 timestamp and time with nanoseconds. {pull}7046[7046] +- Fix an issue with an overflowing wait group when using the TCP input. {issue}7202[7202] +- Fix an issue when parsing ISO8601 dates with timezone definition {issue}7367[7367] + +*Heartbeat* + +- Fix race due to updates of shared a map, that was not supposed to be shared between multiple go-routines. {issue}6616[6616] + +*Metricbeat* + +- Fix the default configuration for Logstash to include the default port. {pull}6279[6279] +- Fix dealing with new process status codes in Linux kernel 4.14+. {pull}6306[6306] +- Add filtering option by exact device names in system.diskio. `diskio.include_devices`. {pull}6085[6085] +- Add connections metricset to RabbitMQ module {pull}6548[6548] +- Fix panic in http dependent modules when invalid config was used. {pull}6205[6205] +- Fix system.filesystem.used.pct value to match what df reports. {issue}5494[5494] +- Fix namespace disambiguation in Kubernetes state_* metricsets. {issue}6281[6281] +- Fix Windows perfmon metricset so that it sends metrics when an error occurs. {pull}6542[6542] +- Fix Kubernetes calculated fields store. {pull}6564{6564} +- Exclude bind mounts in fsstat and filesystem metricsets. {pull}6819[6819] +- Don't stop Metricbeat if aerospike server is down. {pull}6874[6874] +- disk reads and write count metrics in RabbitMQ queue metricset made optional. {issue}6876[6876] +- Add mapping for docker metrics per cpu. {pull}6843[6843] + +*Winlogbeat* + +- Fixed a crash under Windows 2003 and XP when an event had less insert strings than required by its format string. {pull}6247[6247] + +==== Added + +*Affecting all Beats* + +- Update Golang 1.9.4 {pull}6326[6326] +- Add the ability to log to the Windows Event Log. {pull}5913[5913] +- The node name can be discovered automatically by machine-id matching when beat deployed outside Kubernetes cluster. {pull}6146[6146] +- Panics will be written to the logger before exiting. {pull}6199[6199] +- Add builder support for autodiscover and annotations builder {pull}6408[6408] +- Add plugin support for autodiscover builders, providers {pull}6457[6457] +- Preserve runtime from container statuses in Kubernetes autodiscover {pull}6456[6456] +- Experimental feature setup.template.append_fields added. {pull}6024[6024] +- Add appender support to autodiscover {pull}6469[6469] +- Add add_host_metadata processor {pull}5968[5968] +- Retry configuration to load dashboards if Kibana is not reachable when the beat starts. {pull}6560[6560] +- Add `has_fields` conditional to filter events based on the existence of all the given fields. {issue}6285[6285] {pull}6653[6653] +- Add support for spooling to disk to the beats event publishing pipeline. {pull}6581[6581] +- Added logging of system info at Beat startup. {issue}5946[5946] +- Do not log errors if X-Pack Monitoring is enabled but Elastisearch X-Pack is not. {pull}6627[6627] +- Add rename processor. {pull}6292[6292] +- Allow override of dynamic template `match_mapping_type` for fields with object_type. {pull}6691[6691] + +*Filebeat* + +- Add IIS module to parse access log and error log. {pull}6127[6127] +- Renaming of the prospector type to the input type and all prospectors are now moved to the input + folder, to maintain backward compatibility type aliasing was used to map the old type to the new + one. This change also affect YAML configuration. {pull}6078[6078] +- Addition of the TCP input {pull}6700[6700] +- Add option to convert the timestamps to UTC in the system module. {pull}5647[5647] +- Add Logstash module support for main log and the slow log, support the plain text or structured JSON format {pull}5481[5481] +- Add stream filtering when using `docker` prospector. {pull}6057[6057] +- Add support for CRI logs format. {issue}5630[5630] +- Add json.ignore_decoding_error config to not log json decoding erors. {issue}6547[6547] +- Make registry file permission configurable. {pull}6455[6455] +- Add MongoDB module. {pull}6283[6238] +- Add Ingest pipeline loading to setup. {pull}6814[6814] +- Add support of log_format combined to NGINX access logs. {pull}6858[6858] +- Release config reloading feature as GA. +- Add support human friendly size for the UDP input. {pull}6886[6886] +- Add Syslog input to ingest RFC3164 Events via TCP and UDP {pull}6842[6842] +- Remove the undefined `username` option from the Redis input and clarify the documentation. {pull}6662[6662] + +*Heartbeat* + +- Made the URL field of Heartbeat aggregateable. {pull}6263[6263] +- Use `match.Matcher` for checking Heartbeat response bodies with regular expressions. {pull}6539[6539] + +*Metricbeat* + +- Support apache status pages for versions older than 2.4.16. {pull}6450[6450] +- Add support for huge pages on Linux. {pull}6436[6436] +- Support to optionally 'de dot' keys in http/json metricset to prevent collisions. {pull}5970[5970] +- Add graphite protocol metricbeat module. {pull}4734[4734] +- Add http server metricset to support push metrics via http. {pull}4770[4770] +- Make config object public for graphite and http server {pull}4820[4820] +- Add system uptime metricset. {issue}4848[4848] +- Add experimental `queue` metricset to RabbitMQ module. {pull}4788[4788] +- Add additional php-fpm pool status kpis for Metricbeat module {pull}5287[5287] +- Add etcd module. {issue}4970[4970] +- Add ip address of docker containers to event. {pull}5379[5379] +- Add ceph osd tree information to metricbeat {pull}5498[5498] +- Add ceph osd_df to metricbeat {pull}5606[5606] +- Add basic Logstash module. {pull}5540[5540] +- Add dashboard for Windows service metricset. {pull}5603[5603] +- Add pct calculated fields for Pod and container CPU and memory usages. {pull}6158[6158] +- Add statefulset support to Kubernetes module. {pull}6236[6236] +- Refactor prometheus endpoint parsing to look similar to upstream prometheus {pull}6332[6332] +- Making the http/json metricset GA. {pull}6471[6471] +- Add support for array in http/json metricset. {pull}6480[6480] +- Making the jolokia/jmx module GA. {pull}6143[6143] +- Making the MongoDB module GA. {pull}6554[6554] +- Allow to disable labels `dedot` in Docker module, in favor of a safe way to keep dots. {pull}6490[6490] +- Add experimental module to collect metrics from munin nodes. {pull}6517[6517] +- Add support for wildcards and explicit metrics grouping in jolokia/jmx. {pull}6462[6462] +- Set `collector` as default metricset in Prometheus module. {pull}6636[6636] {pull}6747[6747] +- Set `mntr` as default metricset in Zookeeper module. {pull}6674[6674] +- Set default metricsets in vSphere module. {pull}6676[6676] +- Set `status` as default metricset in Apache module. {pull}6673[6673] +- Set `namespace` as default metricset in Aerospike module. {pull}6669[6669] +- Set `service` as default metricset in Windows module. {pull}6675[6675] +- Set all metricsets as default metricsets in uwsgi module. {pull}6688[6688] +- Allow autodiscover to monitor unexposed ports {pull}6727[6727] +- Mark kubernetes.event metricset as beta. {pull}6715[6715] +- Set all metricsets as default metricsets in couchbase module. {pull}6683[6683] +- Mark uwsgi module and metricset as beta. {pull}6717[6717] +- Mark Golang module and metricsets as beta. {pull}6711[6711] +- Mark system.raid metricset as beta. {pull}6710[6710] +- Mark http.server metricset as beta. {pull}6712[6712] +- Mark metricbeat logstash module and metricsets as beta. {pull}6713[6713] +- Set all metricsets as default metricsets in Ceph module. {pull}6676[6676] +- Set `container`, `cpu`, `diskio`, `healthcheck`, `info`, `memory` and `network` in docker module as default. {pull}6718[6718] +- Set `cpu`, `load`, `memory`, `network`, `process` and `process_summary` as default metricsets in system module. {pull}6689[6689] +- Set `collector` as default metricset in Dropwizard module. {pull}6669[6669] +- Set `info` and `keyspace` as default metricsets in redis module. {pull}6742[6742] +- Set `connection` as default metricset in rabbitmq module. {pull}6743[6743] +- Set all metricsets as default metricsets in Elasticsearch module. {pull}6755[6755] +- Set all metricsets as default metricsets in Etcd module. {pull}6756[6756] +- Set server metricsets as default in Graphite module. {pull}6757[6757] +- Set all metricsets as default metricsets in HAProxy module. {pull}6758[6758] +- Set all metricsets as default metricsets in Kafka module. {pull}6759[6759] +- Set all metricsets as default metricsets in postgresql module. {pull}6761[6761] +- Set status metricsets as default in Kibana module. {pull}6762[6762] +- Set all metricsets as default metricsets in Logstash module. {pull}6763[6763] +- Set `container`, `node`, `pod`, `system`, `volume` as default in Kubernetes module. {pull} 6764[6764] +- Set `stats` as default in memcached module. {pull}6765[6765] +- Set all metricsets as default metricsets in Mongodb module. {pull}6766[6766] +- Set `pool` as default metricset for php_fpm module. {pull}6768[6768] +- Set `status` as default metricset for mysql module. {pull} 6769[6769] +- Set `stubstatus` as default metricset for nginx module. {pull}6770[6770] +- Added support for haproxy 1.7 and 1.8. {pull}6793[6793] +- Add accumulated I/O stats to diskio in the line of `docker stats`. {pull}6701[6701] +- Ignore virtual filesystem types by default in system module. {pull}6819[6819] +- Release config reloading feature as GA. {pull}6891[6891] +- Kubernetes deployment: Add ServiceAccount config to system metricbeat. {pull}6824[6824] +- Kubernetes deployment: Add DNS Policy to system metricbeat. {pull}6656[6656] + +*Packetbeat* + +- Add support for condition on bool type {issue}5659[5659] {pull}5954[5954] +- Fix high memory usage on HTTP body if body is not published. {pull}6680[6680] +- Allow to capture the HTTP request or response bodies independently. {pull}6784[6784] +- HTTP publishes an Error event for unmatched requests or responses. {pull}6794[6794] + +*Winlogbeat* + +- Use bookmarks to persist the last published event. {pull}6150[6150] + [[release-notes-6.2.3]] === Beats version 6.2.3 @@ -308,6 +589,10 @@ https://github.com/elastic/beats/compare/v6.0.1...v6.1.0[View commits] - Fix http parse to allow to parse get request with space in the URI. {pull}5495[5495] - Fix mysql SQL parser to trim `\r` from Windows Server `SELECT\r\n\t1`. {pull}5572[5572] - Fix corruption when parsing repeated headers in an HTTP request or response. {pull}6325[6325] +- Fix panic when parsing partial AMQP messages. {pull}6384[6384] +- Fix out of bounds access to slice in MongoDB parser. {pull}6256[6256] +- Fix sniffer hanging on exit under Linux. {pull}6535[6535] +- Fix bounds check error in http parser causing a panic. {pull}6750[6750] *Winlogbeat* @@ -419,6 +704,7 @@ The list below covers the changes between 6.0.0-rc2 and 6.0.0 GA only. *Filebeat* - Add Kubernetes manifests to deploy Filebeat. {pull}5349[5349] +- Add container short ID matching to add_docker_metadata. {pull}6172[6172] *Metricbeat* @@ -923,63 +1209,6 @@ https://github.com/elastic/beats/compare/v5.4.0...v6.0.0-alpha1[View commits] - Prospector reloading only works properly with new files. {pull}3546[3546] -[[release-notes-5.6.7]] -=== Beats version 5.6.7 -https://github.com/elastic/beats/compare/v5.6.6...v5.6.7[View commits] - -No changes in this release. - - -[[release-notes-5.6.6]] -=== Beats version 5.6.6 -https://github.com/elastic/beats/compare/v5.6.5...v5.6.6[View commits] - -No changes in this release. - - -[[release-notes-5.6.5]] -=== Beats version 5.6.5 -https://github.com/elastic/beats/compare/v5.6.4...v5.6.5[View commits] - -==== Bugfixes - -*Affecting all Beats* - -- Fix duplicate batches of events in retry queue. {pull}5520[5520] - -*Metricbeat* - -- Clarify meaning of percentages reported by system core metricset. {pull}5565[5565] -- Fix map overwrite in docker diskio module. {issue}5582[5582] - -[[release-notes-5.6.4]] -=== Beats version 5.6.4 -https://github.com/elastic/beats/compare/v5.6.3...v5.6.4[View commits] - -==== Bugfixes - -*Affecting all Beats* - -- Fix race condition in internal logging rotator. {pull}4519[4519] - -*Packetbeat* - -- Fix missing length check in the PostgreSQL module. {pull}5457[5457] - -==== Added - -*Affecting all Beats* - -- Add support for enabling TLS renegotiation. {issue}4386[4386] -- Add setting to enable/disable the slow start in logstash output. {pull}5400[5400] - -[[release-notes-5.6.3]] -=== Beats version 5.6.3 -https://github.com/elastic/beats/compare/v5.6.2...v5.6.3[View commits] - -No changes in this release. - - [[release-notes-5.6.2]] === Beats version 5.6.2 https://github.com/elastic/beats/compare/v5.6.1...v5.6.2[View commits] diff --git a/vendor/github.com/elastic/beats/LICENSE.txt b/vendor/github.com/elastic/beats/LICENSE.txt index edfa6086..e601d438 100644 --- a/vendor/github.com/elastic/beats/LICENSE.txt +++ b/vendor/github.com/elastic/beats/LICENSE.txt @@ -1,13 +1,13 @@ -Copyright (c) 2012–2017 Elastic +Source code in this repository is variously licensed under the Apache License +Version 2.0, an Apache compatible license, or the Elastic License. Outside of +the "x-pack" folder, source code in a given file is licensed under the Apache +License Version 2.0, unless otherwise noted at the beginning of the file or a +LICENSE file present in the directory subtree declares a separate license. +Within the "x-pack" folder, source code in a given file is licensed under the +Elastic License, unless otherwise noted at the beginning of the file or a +LICENSE file present in the directory subtree declares a separate license. -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. +The build produces two sets of binaries - one set that falls under the Elastic +License and another set that falls under Apache License Version 2.0. The +binaries that contain `-oss` in the artifact name are licensed under the Apache +License Version 2.0. diff --git a/vendor/github.com/elastic/beats/Makefile b/vendor/github.com/elastic/beats/Makefile index cf5d9b53..ea1f5beb 100644 --- a/vendor/github.com/elastic/beats/Makefile +++ b/vendor/github.com/elastic/beats/Makefile @@ -110,13 +110,13 @@ docs: @$(foreach var,$(PROJECTS),BUILD_DIR=${BUILD_DIR} $(MAKE) -C $(var) docs || exit 1;) sh ./script/build_docs.sh dev-guide github.com/elastic/beats/docs/devguide ${BUILD_DIR} -.PHONY: package -package: update beats-dashboards - @$(foreach var,$(BEATS),SNAPSHOT=$(SNAPSHOT) $(MAKE) -C $(var) package || exit 1;) +.PHONY: package-all +package-all: update beats-dashboards + @$(foreach var,$(BEATS),SNAPSHOT=$(SNAPSHOT) $(MAKE) -C $(var) package-all || exit 1;) @echo "Start building the dashboards package" @mkdir -p build/upload/ - @BUILD_DIR=${BUILD_DIR} SNAPSHOT=$(SNAPSHOT) $(MAKE) -C dev-tools/packer package-dashboards ${BUILD_DIR}/upload/build_id.txt + @BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${BUILD_DIR}/upload SNAPSHOT=$(SNAPSHOT) $(MAKE) -C dev-tools/packer package-dashboards ${BUILD_DIR}/upload/build_id.txt @mv build/upload build/dashboards-upload @# Copy build files over to top build directory @@ -153,6 +153,8 @@ notice: python-env python-env: @test -d $(PYTHON_ENV) || virtualenv $(VIRTUALENV_PARAMS) $(PYTHON_ENV) @$(PYTHON_ENV)/bin/pip install -q --upgrade pip autopep8 six + @# Work around pip bug. See: https://github.com/pypa/pip/issues/4464 + @find $(PYTHON_ENV) -type d -name dist-packages -exec sh -c "echo dist-packages > {}.pth" ';' # Tests if apm works with the current code .PHONY: test-apm diff --git a/vendor/github.com/elastic/beats/NOTICE.txt b/vendor/github.com/elastic/beats/NOTICE.txt index 6b80ef2b..14b9f658 100644 --- a/vendor/github.com/elastic/beats/NOTICE.txt +++ b/vendor/github.com/elastic/beats/NOTICE.txt @@ -145,11 +145,34 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/davecgh/go-spew -Revision: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d +Version: v1.1.0 +Revision: 346938d642f2ec3594ed81d874461961cd0faa76 License type (autodetected): MIT ./vendor/github.com/davecgh/go-spew/LICENSE: -------------------------------------------------------------------- -Copyright (c) 2012-2013 Dave Collins +ISC License + +Copyright (c) 2012-2016 Dave Collins + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-------------------------------------------------------------------- +Dependency: github.com/davecgh/go-xdr +Revision: e6a2ba005892b6a5b27cb5352f64c2e96942dd28 +License type (autodetected): MIT +./metricbeat/module/kvm/vendor/github.com/davecgh/go-xdr/LICENSE: +-------------------------------------------------------------------- +Copyright (c) 2012-2014 Dave Collins Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -162,6 +185,14 @@ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------- +Dependency: github.com/digitalocean/go-libvirt +Revision: 59d541f19311883ad82708651353009fb207d8a9 +License type (autodetected): Apache-2.0 +./metricbeat/module/kvm/vendor/github.com/digitalocean/go-libvirt/LICENSE.md: +-------------------------------------------------------------------- +Apache License 2.0 + -------------------------------------------------------------------- Dependency: github.com/docker/distribution @@ -342,13 +373,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/elastic/go-libaudit -Version: v0.1.0 -Revision: 4a806edf821706e315ef7d4f3b5d0cac6d638b34 +Version: v0.2.1 +Revision: 55225d06b15c74082f9a7af75aa4284dbe48d20a License type (autodetected): Apache-2.0 -./vendor/github.com/elastic/go-libaudit/LICENSE: +./vendor/github.com/elastic/go-libaudit/LICENSE.txt: -------------------------------------------------------------------- Apache License 2.0 +-------NOTICE.txt----- +Elastic go-libaudit +Copyright 2017-2018 Elasticsearch B.V. + +This product includes software developed at +Elasticsearch, B.V. (https://www.elastic.co/). -------------------------------------------------------------------- Dependency: github.com/elastic/go-lumber @@ -359,6 +396,41 @@ License type (autodetected): Apache-2.0 Apache License 2.0 +-------------------------------------------------------------------- +Dependency: github.com/elastic/go-structform +Version: v0.0.3 +Revision: 0a66add879601f69f55663f4c913c72988218982 +License type (autodetected): Apache-2.0 +./vendor/github.com/elastic/go-structform/LICENSE: +-------------------------------------------------------------------- +Apache License 2.0 + + +-------------------------------------------------------------------- +Dependency: github.com/elastic/go-sysinfo +Revision: fda017eee28b7420d931e08c7361c1c17f516aa2 +License type (autodetected): Apache-2.0 +./vendor/github.com/elastic/go-sysinfo/LICENSE.txt: +-------------------------------------------------------------------- +Apache License 2.0 + +-------NOTICE.txt----- +Elastic go-sysinfo +Copyright 2017-2018 Elasticsearch B.V. + +This product includes software developed at +Elasticsearch, B.V. (https://www.elastic.co/). + +-------------------------------------------------------------------- +Dependency: github.com/elastic/go-txfile +Version: v0.0.1 +Revision: 7e7e33cc236f30fff545f3ee2c35ada5b70b6b13 +License type (autodetected): Apache-2.0 +./vendor/github.com/elastic/go-txfile/LICENSE: +-------------------------------------------------------------------- +Apache License 2.0 + + -------------------------------------------------------------------- Dependency: github.com/elastic/go-ucfg Version: v0.5.1 @@ -369,10 +441,25 @@ License type (autodetected): Apache-2.0 Apache License 2.0 +-------------------------------------------------------------------- +Dependency: github.com/elastic/go-windows +Revision: a730c8b4e08aef7e1ebb642928bf862996ad2383 +License type (autodetected): Apache-2.0 +./vendor/github.com/elastic/go-windows/LICENSE.txt: +-------------------------------------------------------------------- +Apache License 2.0 + +-------NOTICE.txt----- +Elastic go-windows +Copyright 2017-2018 Elasticsearch B.V. + +This product includes software developed at +Elasticsearch, B.V. (https://www.elastic.co/). + -------------------------------------------------------------------- Dependency: github.com/elastic/gosigar -Version: v0.8.0 -Revision: 16df19fe5efee4ea2938bde5f56c02d9929dc054 +Version: v0.9.0 +Revision: 237dff72b4ba95da2cd985f96a9c0ede4aefc760 License type (autodetected): Apache-2.0 ./vendor/github.com/elastic/gosigar/LICENSE: -------------------------------------------------------------------- @@ -388,26 +475,10 @@ This product includes a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file. --------------------------------------------------------------------- -Dependency: github.com/elastic/procfs -Revision: 664e6bc79eb43c956507b6e20a867140516ad15a -License type (autodetected): Apache-2.0 -./vendor/github.com/elastic/procfs/LICENSE: --------------------------------------------------------------------- -Apache License 2.0 - --------NOTICE----- -procfs provides functions to retrieve system, kernel and process -metrics from the pseudo-filesystem proc. - -Copyright 2014-2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). - -------------------------------------------------------------------- Dependency: github.com/ericchiang/k8s -Revision: 5803ed75e31fc1998b5f781ac08e22ff985c3f8f +Version: v1.0.0 +Revision: 5912993f00cb7c971aaa54529a06bd3eecd6c3d4 License type (autodetected): Apache-2.0 ./vendor/github.com/ericchiang/k8s/LICENSE: -------------------------------------------------------------------- @@ -444,7 +515,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/fsnotify/fsevents -Revision: 690cb784149d5facd7fe613c52757445c43afcde +Revision: 70114c7d2e1e4d1ae5179b285d65ea21aae111cc License type (autodetected): BSD-3-Clause ./vendor/github.com/fsnotify/fsevents/LICENSE: -------------------------------------------------------------------- @@ -478,7 +549,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: github.com/fsnotify/fsnotify -Revision: 4da3e2cfbabc9f751898f250b49f2439785783a1 +Revision: c9bbe1f46f1da9904baf3916a4ba4aec7f1e9000 License type (autodetected): BSD-3-Clause ./vendor/github.com/fsnotify/fsnotify/LICENSE: -------------------------------------------------------------------- @@ -511,36 +582,6 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------- -Dependency: github.com/fsouza/go-dockerclient -Version: beats-branch -Revision: ba365ff5e4281feb28654e4ca599a1defd063497 -License type (autodetected): BSD-2-Clause -./metricbeat/module/docker/vendor/github.com/fsouza/go-dockerclient/LICENSE: --------------------------------------------------------------------- -Copyright (c) 2013-2017, go-dockerclient authors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- Dependency: github.com/garyburd/redigo Revision: b8dc90050f24c1a73a52f107f3f575be67b21b7c @@ -607,6 +648,20 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------- +Dependency: github.com/go-ole/go-ole +Revision: de8695c8edbf8236f30d6e1376e20b198a028d42 +License type (autodetected): MIT +./vendor/github.com/go-ole/go-ole/LICENSE: +-------------------------------------------------------------------- +Copyright © 2013-2018 Yasuhiro Matsumoto, http://mattn.kaoriya.net + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + -------------------------------------------------------------------- Dependency: github.com/go-sql-driver/mysql Revision: 9dee4ca50b83acdf57a35fb9e6fb4be640afa2f3 @@ -1054,7 +1109,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: github.com/golang/protobuf -Revision: 18c9bb3261723cd5401db4d0c9fbc5c3b6c70fe8 +Revision: bbd03ef6da3a115852eaf24c8a1c46aeb39aa175 License type (autodetected): BSD-3-Clause ./metricbeat/vendor/github.com/golang/protobuf/LICENSE: -------------------------------------------------------------------- @@ -1168,373 +1223,12 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- -Dependency: github.com/hashicorp/go-cleanhttp -Revision: 3573b8b52aa7b37b9358d966a898feb387f62437 -License type (autodetected): MPL-2.0 -./metricbeat/module/docker/vendor/github.com/hashicorp/go-cleanhttp/LICENSE: +Dependency: github.com/gorhill/cronexpr +Revision: d520615e531a6bf3fb69406b9eba718261285ec8 +License type (autodetected): Apache-2.0 +./vendor/github.com/gorhill/cronexpr/APLv2: -------------------------------------------------------------------- -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. "Contributor" - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. "Contributor Version" - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. - -1.6. "Executable Form" - - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. - -1.8. "License" - - means this document. - -1.9. "Licensable" - - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. - -1.10. "Modifications" - - means any of the following: - - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. "Patent Claims" of a Contributor - - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. - -1.12. "Secondary License" - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. "Source Code Form" - - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. - - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. +Apache License 2.0 -------------------------------------------------------------------- @@ -1869,866 +1563,11 @@ THE SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/opencontainers/go-digest Revision: eaa60544f31ccf3b0653b1a118b76d33418ff41b -License type (autodetected): CC-BY-SA-4.0 -./vendor/github.com/opencontainers/go-digest/LICENSE.docs: --------------------------------------------------------------------- -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - -Creative Commons may be contacted at creativecommons.org. - +License type (autodetected): Apache-2.0 +./vendor/github.com/opencontainers/go-digest/LICENSE.code: -------------------------------------------------------------------- -Dependency: github.com/opencontainers/go-digest -Revision: eaa60544f31ccf3b0653b1a118b76d33418ff41b -License type (autodetected): CC-BY-SA-4.0 -./vendor/github.com/opencontainers/go-digest/LICENSE.docs: --------------------------------------------------------------------- -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. +Apache License 2.0 -Creative Commons may be contacted at creativecommons.org. -------------------------------------------------------------------- Dependency: github.com/opencontainers/image-spec @@ -2879,9 +1718,44 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------- +Dependency: github.com/pmezard/go-difflib +Version: v1.0.0 +Revision: 792786c7400a136282c1664665ae0a8db921c6c2 +License type (autodetected): BSD-2-Clause +./vendor/github.com/pmezard/go-difflib/LICENSE: +-------------------------------------------------------------------- +Copyright (c) 2013, Patrick Mezard +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + -------------------------------------------------------------------- Dependency: github.com/prometheus/client_model -Revision: 6f3806018612930941127f2a7c6c453ba2c527d2 +Revision: 99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c License type (autodetected): Apache-2.0 ./metricbeat/vendor/github.com/prometheus/client_model/LICENSE: -------------------------------------------------------------------- @@ -2896,7 +1770,7 @@ SoundCloud Ltd. (http://soundcloud.com/). -------------------------------------------------------------------- Dependency: github.com/prometheus/common -Revision: 13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207 +Revision: 89604d197083d4781071d3c65855d24ecfb0a563 License type (autodetected): Apache-2.0 ./metricbeat/vendor/github.com/prometheus/common/LICENSE: -------------------------------------------------------------------- @@ -2909,6 +1783,23 @@ Copyright 2015 The Prometheus Authors This product includes software developed at SoundCloud Ltd. (http://soundcloud.com/). +-------------------------------------------------------------------- +Dependency: github.com/prometheus/procfs +Revision: 54d17b57dd7d4a3aa092476596b3f8a933bde349 +License type (autodetected): Apache-2.0 +./vendor/github.com/prometheus/procfs/LICENSE: +-------------------------------------------------------------------- +Apache License 2.0 + +-------NOTICE----- +procfs provides functions to retrieve system, kernel and process +metrics from the pseudo-filesystem proc. + +Copyright 2014-2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). + -------------------------------------------------------------------- Dependency: github.com/rcrowley/go-metrics Revision: 1f30fe9094a513ce4c700b9a54458bbb0c96996c @@ -2945,6 +1836,38 @@ The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Richard Crowley. +-------------------------------------------------------------------- +Dependency: github.com/samuel/go-parser +Revision: ca8abbf65d0e61dedf061f98bd3850f250e27539 +License type (autodetected): BSD-3-Clause +./vendor/github.com/samuel/go-parser/LICENSE: +-------------------------------------------------------------------- +Copyright (c) 2013, Samuel Stauffer +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of the author nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + -------------------------------------------------------------------- Dependency: github.com/samuel/go-thrift Revision: 2187045faa54fce7f5028706ffeb2f2fc342aa7e @@ -3006,8 +1929,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/shirou/gopsutil -Version: v2.17.04 -Revision: 9af92986dda65a8c367157a82b484553e1ec1c55 +Version: v2.18.01 +Revision: c432be29ccce470088d07eea25b3ea7e68a8afbb License type (autodetected): BSD-3-Clause ./vendor/github.com/shirou/gopsutil/LICENSE: -------------------------------------------------------------------- @@ -3230,7 +2153,8 @@ SOFTWARE. -------------------------------------------------------------------- Dependency: github.com/stretchr/testify -Revision: f390dcf405f7b83c997eac1b06768bb9f44dec18 +Version: v1.2.0 +Revision: b91bfb9ebec76498946beb6af7c0230c7cc7ba6c License type (autodetected): MIT ./vendor/github.com/stretchr/testify/LICENSE: -------------------------------------------------------------------- @@ -3257,9 +2181,44 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------- +Dependency: github.com/theckman/go-flock +Version: v0.4.0 +Revision: b139a2487364247d91814e4a7c7b8fdc69e342b2 +License type (autodetected): BSD-3-Clause +./vendor/github.com/theckman/go-flock/LICENSE: +-------------------------------------------------------------------- +Copyright (c) 2015, Tim Heckman +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of linode-netint nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + -------------------------------------------------------------------- Dependency: github.com/tsg/gopacket -Revision: 8e703b9968693c15f25cabb6ba8be4370cf431d0 +Revision: f289b3ea3e41a01b2822be9caf5f40c01fdda05c License type (autodetected): BSD-3-Clause ./vendor/github.com/tsg/gopacket/LICENSE: -------------------------------------------------------------------- @@ -3293,11 +2252,19 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- -Dependency: github.com/urso/go-structform -Version: v0.0.2 -Revision: 844d7d44009e9e8c0f08016fc4dab64e136ca040 +Dependency: github.com/urso/go-bin +Revision: 781c575c9f0eb3cb9dca94521bd7ad7d5aec7fd4 +License type (autodetected): Apache-2.0 +./vendor/github.com/urso/go-bin/LICENSE: +-------------------------------------------------------------------- +Apache License 2.0 + + +-------------------------------------------------------------------- +Dependency: github.com/urso/qcgen +Revision: 0b059e7db4f40a062ca3d975b7500c6a0a968d87 License type (autodetected): Apache-2.0 -./vendor/github.com/urso/go-structform/LICENSE: +./vendor/github.com/urso/qcgen/LICENSE: -------------------------------------------------------------------- Apache License 2.0 @@ -3454,7 +2421,7 @@ THE SOFTWARE. -------------------------------------------------------------------- Dependency: golang.org/x/crypto -Revision: d585fd2cc9195196078f516b69daff6744ef5e84 +Revision: 5119cf507ed5294cc409c092980c7497ee5d6fd2 License type (autodetected): BSD-3-Clause ./vendor/golang.org/x/crypto/LICENSE: -------------------------------------------------------------------- @@ -3488,7 +2455,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: golang.org/x/net -Revision: e90d6d0afc4c315a0d87a568ae68577cc15149a0 +Version: release-branch.go1.9 +Revision: 44b7c21cbf19450f38b337eb6b6fe4f6496fb5b3 License type (autodetected): BSD-3-Clause ./vendor/golang.org/x/net/LICENSE: -------------------------------------------------------------------- @@ -3522,7 +2490,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: golang.org/x/sys -Revision: b76f9891dc1d975623261def70f9b89661f5baab +Revision: 37707fdb30a5b38865cfb95e5aab41707daec7fd License type (autodetected): BSD-3-Clause ./vendor/golang.org/x/sys/LICENSE: -------------------------------------------------------------------- @@ -3556,7 +2524,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: golang.org/x/text -Revision: 2910a502d2bf9e43193af9d68ca516529614eed3 +Revision: 4e4a3210bb54bb31f6ab2cdca2edcc0b50c420c1 License type (autodetected): BSD-3-Clause ./vendor/golang.org/x/text/LICENSE: -------------------------------------------------------------------- @@ -3624,7 +2592,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- Dependency: golang.org/x/tools -Revision: 9be3b7cbc7ccd19baaa3b7704c22f57db5ebbdf2 +Version: release-branch.go1.9 +Revision: 5d2fd3ccab986d52112bf301d47a819783339d0e License type (autodetected): BSD-3-Clause ./vendor/golang.org/x/tools/LICENSE: -------------------------------------------------------------------- diff --git a/vendor/github.com/elastic/beats/README.md b/vendor/github.com/elastic/beats/README.md index 98a5fb5a..aa735422 100644 --- a/vendor/github.com/elastic/beats/README.md +++ b/vendor/github.com/elastic/beats/README.md @@ -1,5 +1,4 @@ [![Travis](https://travis-ci.org/elastic/beats.svg?branch=master)](https://travis-ci.org/elastic/beats) -[![AppVeyor](https://ci.appveyor.com/api/projects/status/p7y92i6pp2v7vnrd/branch/master?svg=true)](https://ci.appveyor.com/project/elastic-beats/beats/branch/master) [![GoReportCard](http://goreportcard.com/badge/elastic/beats)](http://goreportcard.com/report/elastic/beats) [![codecov.io](https://codecov.io/github/elastic/beats/coverage.svg?branch=master)](https://codecov.io/github/elastic/beats?branch=master) @@ -20,6 +19,7 @@ framework for creating Beats, and all the officially supported Beats: Beat | Description --- | --- +[Auditbeat](https://github.com/elastic/beats/tree/master/auditbeat) | Collect your Linux audit framework data and monitor the integrity of your files. [Filebeat](https://github.com/elastic/beats/tree/master/filebeat) | Tails and ships log files [Heartbeat](https://github.com/elastic/beats/tree/master/heartbeat) | Ping remote services for availability [Metricbeat](https://github.com/elastic/beats/tree/master/metricbeat) | Fetches sets of metrics from the operating system and services @@ -27,9 +27,9 @@ Beat | Description [Winlogbeat](https://github.com/elastic/beats/tree/master/winlogbeat) | Fetches and ships Windows Event logs In addition to the above Beats, which are officially supported by -[Elastic](https://elastic.co), the -community has created a set of other Beats that make use of libbeat but live -outside of this Github repository. We maintain a list of community Beats +[Elastic](https://elastic.co), the community has created a set of other Beats +that make use of libbeat but live outside of this Github repository. We maintain +a list of community Beats [here](https://www.elastic.co/guide/en/beats/libbeat/master/community-beats.html). ## Documentation and Getting Started @@ -38,6 +38,7 @@ You can find the documentation and getting started guides for each of the Beats on the [elastic.co site](https://www.elastic.co/guide/): * [Beats platform](https://www.elastic.co/guide/en/beats/libbeat/current/index.html) +* [Auditbeat](https://www.elastic.co/guide/en/beats/auditbeat/current/index.html) * [Filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/index.html) * [Heartbeat](https://www.elastic.co/guide/en/beats/heartbeat/current/index.html) * [Metricbeat](https://www.elastic.co/guide/en/beats/metricbeat/current/index.html) @@ -65,8 +66,8 @@ create your own Beat. Please start by reading our [CONTRIBUTING](CONTRIBUTING.md) file. If you are creating a new Beat, you don't need to submit the code to this -repository. You can simply start working in a new repository and make use of -the libbeat packages, by following our [developer +repository. You can simply start working in a new repository and make use of the +libbeat packages, by following our [developer guide](https://www.elastic.co/guide/en/beats/libbeat/current/new-beat.html). After you have a working prototype, open a pull request to add your Beat to the list of [community @@ -74,5 +75,5 @@ Beats](https://github.com/elastic/beats/blob/master/libbeat/docs/communitybeats. ## Building Beats from the Source -See our [CONTRIBUTING](CONTRIBUTING.md) file for information about setting up your dev -environment to build Beats from the source. +See our [CONTRIBUTING](CONTRIBUTING.md) file for information about setting up +your dev environment to build Beats from the source. diff --git a/vendor/github.com/elastic/beats/Vagrantfile b/vendor/github.com/elastic/beats/Vagrantfile index 404172a5..d36b2f74 100644 --- a/vendor/github.com/elastic/beats/Vagrantfile +++ b/vendor/github.com/elastic/beats/Vagrantfile @@ -63,7 +63,7 @@ if [ ! -e "~/bin/gvm" ]; then chmod +x ~/bin/gvm echo 'export GOPATH=$HOME/go' >> ~/.bash_profile echo 'export PATH=$HOME/bin:$GOPATH/bin:$PATH' >> ~/.bash_profile - echo 'eval "$(gvm 1.9.2)"' >> ~/.bash_profile + echo 'eval "$(gvm 1.9.4)"' >> ~/.bash_profile fi SCRIPT diff --git a/vendor/github.com/elastic/beats/auditbeat/Dockerfile b/vendor/github.com/elastic/beats/auditbeat/Dockerfile new file mode 100644 index 00000000..208c9e66 --- /dev/null +++ b/vendor/github.com/elastic/beats/auditbeat/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.9.2 +MAINTAINER Nicolas Ruflin + +RUN set -x && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + netcat python-pip virtualenv && \ + apt-get clean + +RUN pip install --upgrade setuptools + +# Setup work environment +ENV AUDITBEAT_PATH /go/src/github.com/elastic/beats/auditbeat + +RUN mkdir -p $AUDITBEAT_PATH/build/coverage +WORKDIR $AUDITBEAT_PATH +HEALTHCHECK CMD exit 0 diff --git a/vendor/github.com/elastic/beats/auditbeat/Makefile b/vendor/github.com/elastic/beats/auditbeat/Makefile index 2f1f36f2..eb7f6283 100644 --- a/vendor/github.com/elastic/beats/auditbeat/Makefile +++ b/vendor/github.com/elastic/beats/auditbeat/Makefile @@ -1,13 +1,15 @@ BEAT_NAME=auditbeat BEAT_TITLE=Auditbeat BEAT_DESCRIPTION=Audit the activities of users and processes on your system. -SYSTEM_TESTS=false -TEST_ENVIRONMENT=false +SYSTEM_TESTS=true +TEST_ENVIRONMENT?=true GOX_OS?=linux windows ## @Building List of all OS to be supported by "make crosscompile". DEV_OS?=linux +TESTING_ENVIRONMENT?=latest +ES_BEATS?=.. # Path to the libbeat Makefile --include ../libbeat/scripts/Makefile +include ${ES_BEATS}/libbeat/scripts/Makefile # This is called by the beats packer before building starts .PHONY: before-build @@ -33,7 +35,7 @@ before-build: ${PREFIX}/${BEAT_NAME}-darwin.reference.yml @cat ${ES_BEATS}/auditbeat/_meta/common.p1.yml \ - <(go run scripts/generate_config.go -os linux -concat) \ + <(go run scripts/generate_config.go -os linux -arch amd64 -concat) \ ${ES_BEATS}/auditbeat/_meta/common.p2.yml \ ${ES_BEATS}/libbeat/_meta/config.yml > \ ${PREFIX}/${BEAT_NAME}-linux.yml @@ -42,6 +44,16 @@ before-build: ${ES_BEATS}/libbeat/_meta/config.reference.yml > \ ${PREFIX}/${BEAT_NAME}-linux.reference.yml + @cat ${ES_BEATS}/auditbeat/_meta/common.p1.yml \ + <(go run scripts/generate_config.go -os linux -arch i386 -concat) \ + ${ES_BEATS}/auditbeat/_meta/common.p2.yml \ + ${ES_BEATS}/libbeat/_meta/config.yml > \ + ${PREFIX}/${BEAT_NAME}-linux-386.yml + @cat ${ES_BEATS}/auditbeat/_meta/common.reference.yml \ + <(go run scripts/generate_config.go -os linux -concat -ref) \ + ${ES_BEATS}/libbeat/_meta/config.reference.yml > \ + ${PREFIX}/${BEAT_NAME}-linux-386.reference.yml + # Collects all dependencies and then calls update .PHONY: collect collect: fields collect-docs configs kibana diff --git a/vendor/github.com/elastic/beats/auditbeat/auditbeat.reference.yml b/vendor/github.com/elastic/beats/auditbeat/auditbeat.reference.yml index 002e4068..ece5571d 100644 --- a/vendor/github.com/elastic/beats/auditbeat/auditbeat.reference.yml +++ b/vendor/github.com/elastic/beats/auditbeat/auditbeat.reference.yml @@ -139,7 +139,8 @@ auditbeat.modules: # Hints the minimum number of events stored in the queue, # before providing a batch of events to the outputs. - # A value of 0 (the default) ensures events are immediately available + # The default value is set to 2048. + # A value of 0 ensures events are immediately available # to be sent to the outputs. #flush.min_events: 2048 @@ -147,6 +148,66 @@ auditbeat.modules: # if the number of events stored in the queue is < min_flush_events. #flush.timeout: 1s + # The spool queue will store events in a local spool file, before + # forwarding the events to the outputs. + # + # Beta: spooling to disk is currently a beta feature. Use with care. + # + # The spool file is a circular buffer, which blocks once the file/buffer is full. + # Events are put into a write buffer and flushed once the write buffer + # is full or the flush_timeout is triggered. + # Once ACKed by the output, events are removed immediately from the queue, + # making space for new events to be persisted. + #spool: + # The file namespace configures the file path and the file creation settings. + # Once the file exists, the `size`, `page_size` and `prealloc` settings + # will have no more effect. + #file: + # Location of spool file. The default value is ${path.data}/spool.dat. + #path: "${path.data}/spool.dat" + + # Configure file permissions if file is created. The default value is 0600. + #permissions: 0600 + + # File size hint. The spool blocks, once this limit is reached. The default value is 100 MiB. + #size: 100MiB + + # The files page size. A file is split into multiple pages of the same size. The default value is 4KiB. + #page_size: 4KiB + + # If prealloc is set, the required space for the file is reserved using + # truncate. The default value is true. + #prealloc: true + + # Spool writer settings + # Events are serialized into a write buffer. The write buffer is flushed if: + # - The buffer limit has been reached. + # - The configured limit of buffered events is reached. + # - The flush timeout is triggered. + #write: + # Sets the write buffer size. + #buffer_size: 1MiB + + # Maximum duration after which events are flushed, if the write buffer + # is not full yet. The default value is 1s. + #flush.timeout: 1s + + # Number of maximum buffered events. The write buffer is flushed once the + # limit is reached. + #flush.events: 16384 + + # Configure the on-disk event encoding. The encoding can be changed + # between restarts. + # Valid encodings are: json, ubjson, and cbor. + #codec: cbor + #read: + # Reader flush timeout, waiting for more events to become available, so + # to fill a complete batch, as required by the outputs. + # If flush_timeout is 0, all available events are forwarded to the + # outputs immediately. + # The default value is 0s. + #flush.timeout: 0s + # Sets the maximum number of CPUs that can be executing simultaneously. The # default is the number of logical CPUs available in the system. #max_procs: @@ -181,6 +242,14 @@ auditbeat.modules: # equals: # http.code: 200 # +# The following example renames the field a to b: +# +#processors: +#- rename: +# fields: +# - from: "a" +# to: "b" +# # The following example enriches each event with metadata from the cloud # provider about the host machine. It works on EC2, GCE, DigitalOcean, # Tencent Cloud, and Alibaba Cloud. @@ -205,6 +274,7 @@ auditbeat.modules: # match_pids: ["process.pid", "process.ppid"] # match_source: true # match_source_index: 4 +# match_short_id: false # cleanup_timeout: 60 # # To connect to Docker over TLS you must specify a client and CA certificate. # #ssl: @@ -218,6 +288,7 @@ auditbeat.modules: # #processors: #- add_docker_metadata: ~ +#- add_host_metadata: ~ #============================= Elastic Cloud ================================== @@ -290,7 +361,18 @@ output.elasticsearch: # The default is 50. #bulk_max_size: 50 - # Configure http request timeout before failing an request to Elasticsearch. + # The number of seconds to wait before trying to reconnect to Elasticsearch + # after a network error. After waiting backoff.init seconds, the Beat + # tries to reconnect. If the attempt fails, the backoff timer is increased + # exponentially up to backoff.max. After a successful connection, the backoff + # timer is reset. The default is 1s. + #backoff.init: 1s + + # The maximum number of seconds to wait before attempting to connect to + # Elasticsearch after a network error. The default is 60s. + #backoff.max: 60s + + # Configure http request timeout before failing a request to Elasticsearch. #timeout: 90 # Use SSL settings for HTTPS. @@ -354,7 +436,7 @@ output.elasticsearch: # Optional load balance the events between the Logstash hosts. Default is false. #loadbalance: false - # Number of batches to be sent asynchronously to logstash while processing + # Number of batches to be sent asynchronously to Logstash while processing # new batches. #pipelining: 2 @@ -363,6 +445,17 @@ output.elasticsearch: # if no error is encountered. #slow_start: false + # The number of seconds to wait before trying to reconnect to Logstash + # after a network error. After waiting backoff.init seconds, the Beat + # tries to reconnect. If the attempt fails, the backoff timer is increased + # exponentially up to backoff.max. After a successful connection, the backoff + # timer is reset. The default is 1s. + #backoff.init: 1s + + # The maximum number of seconds to wait before attempting to connect to + # Logstash after a network error. The default is 60s. + #backoff.max: 60s + # Optional index name. The default index name is set to auditbeat # in all lowercase. #index: 'auditbeat' @@ -707,6 +800,10 @@ output.elasticsearch: # the default for the logs path is a logs subdirectory inside the home path. #path.logs: ${path.home}/logs +#================================ Keystore ========================================== +# Location of the Keystore containing the keys and their sensitive values. +#keystore.path: "${path.config}/beats.keystore" + #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards are disabled by default and can be enabled either by setting the @@ -741,6 +838,17 @@ output.elasticsearch: # how to install the dashboards by first querying Elasticsearch. #setup.dashboards.always_kibana: false +# If true and Kibana is not reachable at the time when dashboards are loaded, +# it will retry to reconnect to Kibana instead of exiting with an error. +#setup.dashboards.retry.enabled: false + +# Duration interval between Kibana connection retries. +#setup.dashboards.retry.interval: 1s + +# Maximum number of retries before exiting with an error, 0 for unlimited retrying. +#setup.dashboards.retry.maximum: 0 + + #============================== Template ===================================== # A template is used to set the mapping in Elasticsearch diff --git a/vendor/github.com/elastic/beats/auditbeat/docker-compose.yml b/vendor/github.com/elastic/beats/auditbeat/docker-compose.yml new file mode 100644 index 00000000..f3db9be0 --- /dev/null +++ b/vendor/github.com/elastic/beats/auditbeat/docker-compose.yml @@ -0,0 +1,33 @@ +version: '2.1' +services: + beat: + build: ${PWD}/. + depends_on: + - proxy_dep + env_file: + - ${PWD}/build/test.env + working_dir: /go/src/github.com/elastic/beats/auditbeat + environment: + - KIBANA_HOST=kibana + - KIBANA_PORT=5601 + volumes: + - ${PWD}/..:/go/src/github.com/elastic/beats/ + command: make + + # This is a proxy used to block beats until all services are healthy. + # See: https://github.com/docker/compose/issues/4369 + proxy_dep: + image: busybox + depends_on: + elasticsearch: { condition: service_healthy } + kibana: { condition: service_healthy } + + elasticsearch: + extends: + file: ../testing/environments/${TESTING_ENVIRONMENT}.yml + service: elasticsearch + + kibana: + extends: + file: ../testing/environments/${TESTING_ENVIRONMENT}.yml + service: kibana diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/configuring-howto.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/configuring-howto.asciidoc index 7666c4fa..a86085ad 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/configuring-howto.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/configuring-howto.asciidoc @@ -77,4 +77,3 @@ include::../../libbeat/docs/yaml.asciidoc[] include::../../libbeat/docs/regexp.asciidoc[] include::../../libbeat/docs/reference-yml.asciidoc[] - diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/fields.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/fields.asciidoc index 3d65e309..b68b0318 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/fields.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/fields.asciidoc @@ -18,6 +18,7 @@ grouped in the following categories: * <> * <> * <> +* <> * <> -- @@ -28,9 +29,9 @@ These are the fields generated by the auditd module. -[float] -=== `event.category` - +*`event.category`*:: ++ +-- type: keyword example: audit-rule @@ -38,77 +39,99 @@ example: audit-rule The event's category is a value derived from the `record_type`. -[float] -=== `event.type` +-- +*`event.type`*:: ++ +-- type: keyword The audit record's type. +-- -[float] -=== `user.auid` +*`user.auid`*:: ++ +-- type: keyword login user ID -[float] -=== `user.uid` +-- +*`user.uid`*:: ++ +-- type: keyword user ID -[float] -=== `user.euid` +-- +*`user.euid`*:: ++ +-- type: keyword effective user ID -[float] -=== `user.fsuid` +-- +*`user.fsuid`*:: ++ +-- type: keyword file system user ID -[float] -=== `user.suid` +-- +*`user.suid`*:: ++ +-- type: keyword sent user ID -[float] -=== `user.gid` +-- +*`user.gid`*:: ++ +-- type: keyword group ID -[float] -=== `user.egid` +-- +*`user.egid`*:: ++ +-- type: keyword effective group ID -[float] -=== `user.sgid` +-- +*`user.sgid`*:: ++ +-- type: keyword set group ID -[float] -=== `user.fsgid` +-- +*`user.fsgid`*:: ++ +-- type: keyword file system group ID +-- + [float] == name_map fields @@ -116,268 +139,334 @@ If `resolve_ids` is set to true in the configuration then `name_map` will contai -[float] -=== `user.name_map.auid` - +*`user.name_map.auid`*:: ++ +-- type: keyword login user name -[float] -=== `user.name_map.uid` +-- +*`user.name_map.uid`*:: ++ +-- type: keyword user name -[float] -=== `user.name_map.euid` +-- +*`user.name_map.euid`*:: ++ +-- type: keyword effective user name -[float] -=== `user.name_map.fsuid` +-- +*`user.name_map.fsuid`*:: ++ +-- type: keyword file system user name -[float] -=== `user.name_map.suid` +-- +*`user.name_map.suid`*:: ++ +-- type: keyword sent user name -[float] -=== `user.name_map.gid` +-- +*`user.name_map.gid`*:: ++ +-- type: keyword group name -[float] -=== `user.name_map.egid` +-- +*`user.name_map.egid`*:: ++ +-- type: keyword effective group name -[float] -=== `user.name_map.sgid` +-- +*`user.name_map.sgid`*:: ++ +-- type: keyword set group name -[float] -=== `user.name_map.fsgid` +-- +*`user.name_map.fsgid`*:: ++ +-- type: keyword file system group name +-- + [float] == selinux fields The SELinux identity of the actor. -[float] -=== `user.selinux.user` - +*`user.selinux.user`*:: ++ +-- type: keyword account submitted for authentication -[float] -=== `user.selinux.role` +-- +*`user.selinux.role`*:: ++ +-- type: keyword user's SELinux role -[float] -=== `user.selinux.domain` +-- +*`user.selinux.domain`*:: ++ +-- type: keyword The actor's SELinux domain or type. -[float] -=== `user.selinux.level` +-- +*`user.selinux.level`*:: ++ +-- type: keyword example: s0 The actor's SELinux level. -[float] -=== `user.selinux.category` +-- +*`user.selinux.category`*:: ++ +-- type: keyword The actor's SELinux category or compartments. +-- + [float] == process fields Process attributes. -[float] -=== `process.pid` - +*`process.pid`*:: ++ +-- type: keyword Process ID. -[float] -=== `process.ppid` +-- +*`process.ppid`*:: ++ +-- type: keyword Parent process ID. -[float] -=== `process.name` +-- +*`process.name`*:: ++ +-- type: keyword Process name (comm). -[float] -=== `process.title` +-- +*`process.title`*:: ++ +-- type: keyword Process title or command line parameters (proctitle). -[float] -=== `process.exe` +-- +*`process.exe`*:: ++ +-- type: keyword Absolute path of the executable. -[float] -=== `process.cwd` +-- +*`process.cwd`*:: ++ +-- type: keyword The current working directory. -[float] -=== `process.args` +-- +*`process.args`*:: ++ +-- type: keyword The process arguments as a list. +-- + [float] == source fields Source that triggered the event. -[float] -=== `source.ip` - +*`source.ip`*:: ++ +-- type: ip The remote address. -[float] -=== `source.port` +-- +*`source.port`*:: ++ +-- type: keyword The port number. -[float] -=== `source.hostname` +-- +*`source.hostname`*:: ++ +-- type: keyword Hostname of the source. -[float] -=== `source.path` +-- +*`source.path`*:: ++ +-- type: keyword This is the path associated with a unix socket. +-- + [float] == destination fields Destination address that triggered the event. -[float] -=== `destination.ip` - +*`destination.ip`*:: ++ +-- type: ip The remote address. -[float] -=== `destination.port` +-- +*`destination.port`*:: ++ +-- type: keyword The port number. -[float] -=== `destination.hostname` +-- +*`destination.hostname`*:: ++ +-- type: keyword Hostname of the source. -[float] -=== `destination.path` +-- +*`destination.path`*:: ++ +-- type: keyword This is the path associated with a unix socket. -[float] -=== `network.direction` +-- +*`network.direction`*:: ++ +-- type: keyword Direction of the network traffic (`incoming` or `outgoing`). +-- -[float] -=== `auditd.sequence` +*`auditd.sequence`*:: ++ +-- type: long The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. -[float] -=== `auditd.session` +-- +*`auditd.session`*:: ++ +-- type: keyword The session ID assigned to a login. All events related to a login session will have the same value. -[float] -=== `auditd.result` +-- +*`auditd.result`*:: ++ +-- type: keyword example: success or fail The result of the audited operation (success/fail). +-- + [float] == actor fields @@ -385,21 +474,25 @@ The result of the audited operation (success/fail). The actor is the user that triggered the audit event. -[float] -=== `auditd.summary.actor.primary` - +*`auditd.summary.actor.primary`*:: ++ +-- type: keyword The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. -[float] -=== `auditd.summary.actor.secondary` +-- +*`auditd.summary.actor.secondary`*:: ++ +-- type: keyword The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`. +-- + [float] == object fields @@ -407,1572 +500,2014 @@ This is the thing or object being acted upon in the event. -[float] -=== `auditd.summary.object.type` - +*`auditd.summary.object.type`*:: ++ +-- type: keyword A description of the what the "thing" is (e.g. file, socket, user-session). -[float] -=== `auditd.summary.object.primary` +-- +*`auditd.summary.object.primary`*:: ++ +-- type: keyword -[float] -=== `auditd.summary.object.secondary` +-- +*`auditd.summary.object.secondary`*:: ++ +-- type: keyword -[float] -=== `auditd.summary.how` +-- +*`auditd.summary.how`*:: ++ +-- type: keyword This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. +-- + [float] == paths fields List of paths associated with the event. -[float] -=== `auditd.paths.inode` - +*`auditd.paths.inode`*:: ++ +-- type: keyword inode number -[float] -=== `auditd.paths.dev` +-- +*`auditd.paths.dev`*:: ++ +-- type: keyword device name as found in /dev -[float] -=== `auditd.paths.obj_user` +-- +*`auditd.paths.obj_user`*:: ++ +-- type: keyword -[float] -=== `auditd.paths.obj_role` +-- +*`auditd.paths.obj_role`*:: ++ +-- type: keyword -[float] -=== `auditd.paths.obj_domain` +-- +*`auditd.paths.obj_domain`*:: ++ +-- type: keyword -[float] -=== `auditd.paths.obj_level` +-- +*`auditd.paths.obj_level`*:: ++ +-- type: keyword -[float] -=== `auditd.paths.objtype` +-- +*`auditd.paths.objtype`*:: ++ +-- type: keyword -[float] -=== `auditd.paths.ouid` +-- +*`auditd.paths.ouid`*:: ++ +-- type: keyword file owner user ID -[float] -=== `auditd.paths.rdev` +-- +*`auditd.paths.rdev`*:: ++ +-- type: keyword the device identifier (special files only) -[float] -=== `auditd.paths.nametype` +-- +*`auditd.paths.nametype`*:: ++ +-- type: keyword kind of file operation being referenced -[float] -=== `auditd.paths.ogid` +-- +*`auditd.paths.ogid`*:: ++ +-- type: keyword file owner group ID -[float] -=== `auditd.paths.item` +-- +*`auditd.paths.item`*:: ++ +-- type: keyword which item is being recorded -[float] -=== `auditd.paths.mode` +-- +*`auditd.paths.mode`*:: ++ +-- type: keyword mode flags on a file -[float] -=== `auditd.paths.name` +-- +*`auditd.paths.name`*:: ++ +-- type: keyword file name in avcs +-- + [float] == data fields The data from the audit messages. -[float] -=== `auditd.data.action` - +*`auditd.data.action`*:: ++ +-- type: keyword netfilter packet disposition -[float] -=== `auditd.data.minor` +-- +*`auditd.data.minor`*:: ++ +-- type: keyword device minor number -[float] -=== `auditd.data.acct` +-- +*`auditd.data.acct`*:: ++ +-- type: keyword a user's account name -[float] -=== `auditd.data.addr` +-- +*`auditd.data.addr`*:: ++ +-- type: keyword the remote address that the user is connecting from -[float] -=== `auditd.data.cipher` +-- +*`auditd.data.cipher`*:: ++ +-- type: keyword name of crypto cipher selected -[float] -=== `auditd.data.id` +-- +*`auditd.data.id`*:: ++ +-- type: keyword during account changes -[float] -=== `auditd.data.entries` +-- +*`auditd.data.entries`*:: ++ +-- type: keyword number of entries in the netfilter table -[float] -=== `auditd.data.kind` +-- +*`auditd.data.kind`*:: ++ +-- type: keyword server or client in crypto operation -[float] -=== `auditd.data.ksize` +-- +*`auditd.data.ksize`*:: ++ +-- type: keyword key size for crypto operation -[float] -=== `auditd.data.spid` +-- +*`auditd.data.spid`*:: ++ +-- type: keyword sent process ID -[float] -=== `auditd.data.arch` +-- +*`auditd.data.arch`*:: ++ +-- type: keyword the elf architecture flags -[float] -=== `auditd.data.argc` +-- +*`auditd.data.argc`*:: ++ +-- type: keyword the number of arguments to an execve syscall -[float] -=== `auditd.data.major` +-- +*`auditd.data.major`*:: ++ +-- type: keyword device major number -[float] -=== `auditd.data.unit` +-- +*`auditd.data.unit`*:: ++ +-- type: keyword systemd unit -[float] -=== `auditd.data.table` +-- +*`auditd.data.table`*:: ++ +-- type: keyword netfilter table name -[float] -=== `auditd.data.terminal` +-- +*`auditd.data.terminal`*:: ++ +-- type: keyword terminal name the user is running programs on -[float] -=== `auditd.data.grantors` +-- +*`auditd.data.grantors`*:: ++ +-- type: keyword pam modules approving the action -[float] -=== `auditd.data.direction` +-- +*`auditd.data.direction`*:: ++ +-- type: keyword direction of crypto operation -[float] -=== `auditd.data.op` +-- +*`auditd.data.op`*:: ++ +-- type: keyword the operation being performed that is audited -[float] -=== `auditd.data.tty` +-- +*`auditd.data.tty`*:: ++ +-- type: keyword tty udevice the user is running programs on -[float] -=== `auditd.data.syscall` +-- +*`auditd.data.syscall`*:: ++ +-- type: keyword syscall number in effect when the event occurred -[float] -=== `auditd.data.data` +-- +*`auditd.data.data`*:: ++ +-- type: keyword TTY text -[float] -=== `auditd.data.family` +-- +*`auditd.data.family`*:: ++ +-- type: keyword netfilter protocol -[float] -=== `auditd.data.mac` +-- +*`auditd.data.mac`*:: ++ +-- type: keyword crypto MAC algorithm selected -[float] -=== `auditd.data.pfs` +-- +*`auditd.data.pfs`*:: ++ +-- type: keyword perfect forward secrecy method -[float] -=== `auditd.data.items` +-- +*`auditd.data.items`*:: ++ +-- type: keyword the number of path records in the event -[float] -=== `auditd.data.a0` +-- +*`auditd.data.a0`*:: ++ +-- type: keyword -[float] -=== `auditd.data.a1` +-- +*`auditd.data.a1`*:: ++ +-- type: keyword -[float] -=== `auditd.data.a2` +-- +*`auditd.data.a2`*:: ++ +-- type: keyword -[float] -=== `auditd.data.a3` +-- +*`auditd.data.a3`*:: ++ +-- type: keyword -[float] -=== `auditd.data.hostname` +-- +*`auditd.data.hostname`*:: ++ +-- type: keyword the hostname that the user is connecting from -[float] -=== `auditd.data.lport` +-- +*`auditd.data.lport`*:: ++ +-- type: keyword local network port -[float] -=== `auditd.data.rport` +-- +*`auditd.data.rport`*:: ++ +-- type: keyword remote port number -[float] -=== `auditd.data.exit` +-- +*`auditd.data.exit`*:: ++ +-- type: keyword syscall exit code -[float] -=== `auditd.data.fp` +-- +*`auditd.data.fp`*:: ++ +-- type: keyword crypto key finger print -[float] -=== `auditd.data.laddr` +-- +*`auditd.data.laddr`*:: ++ +-- type: keyword local network address -[float] -=== `auditd.data.sport` +-- +*`auditd.data.sport`*:: ++ +-- type: keyword local port number -[float] -=== `auditd.data.capability` +-- +*`auditd.data.capability`*:: ++ +-- type: keyword posix capabilities -[float] -=== `auditd.data.nargs` +-- +*`auditd.data.nargs`*:: ++ +-- type: keyword the number of arguments to a socket call -[float] -=== `auditd.data.new-enabled` +-- +*`auditd.data.new-enabled`*:: ++ +-- type: keyword new TTY audit enabled setting -[float] -=== `auditd.data.audit_backlog_limit` +-- +*`auditd.data.audit_backlog_limit`*:: ++ +-- type: keyword audit system's backlog queue size -[float] -=== `auditd.data.dir` +-- +*`auditd.data.dir`*:: ++ +-- type: keyword directory name -[float] -=== `auditd.data.cap_pe` +-- +*`auditd.data.cap_pe`*:: ++ +-- type: keyword process effective capability map -[float] -=== `auditd.data.model` +-- +*`auditd.data.model`*:: ++ +-- type: keyword security model being used for virt -[float] -=== `auditd.data.new_pp` +-- +*`auditd.data.new_pp`*:: ++ +-- type: keyword new process permitted capability map -[float] -=== `auditd.data.old-enabled` +-- +*`auditd.data.old-enabled`*:: ++ +-- type: keyword present TTY audit enabled setting -[float] -=== `auditd.data.oauid` +-- +*`auditd.data.oauid`*:: ++ +-- type: keyword object's login user ID -[float] -=== `auditd.data.old` +-- +*`auditd.data.old`*:: ++ +-- type: keyword old value -[float] -=== `auditd.data.banners` +-- +*`auditd.data.banners`*:: ++ +-- type: keyword banners used on printed page -[float] -=== `auditd.data.feature` +-- +*`auditd.data.feature`*:: ++ +-- type: keyword kernel feature being changed -[float] -=== `auditd.data.vm-ctx` +-- +*`auditd.data.vm-ctx`*:: ++ +-- type: keyword the vm's context string -[float] -=== `auditd.data.opid` +-- +*`auditd.data.opid`*:: ++ +-- type: keyword object's process ID -[float] -=== `auditd.data.seperms` +-- +*`auditd.data.seperms`*:: ++ +-- type: keyword SELinux permissions being used -[float] -=== `auditd.data.seresult` +-- +*`auditd.data.seresult`*:: ++ +-- type: keyword SELinux AVC decision granted/denied -[float] -=== `auditd.data.new-rng` +-- +*`auditd.data.new-rng`*:: ++ +-- type: keyword device name of rng being added from a vm -[float] -=== `auditd.data.old-net` +-- +*`auditd.data.old-net`*:: ++ +-- type: keyword present MAC address assigned to vm -[float] -=== `auditd.data.sigev_signo` +-- +*`auditd.data.sigev_signo`*:: ++ +-- type: keyword signal number -[float] -=== `auditd.data.ino` +-- +*`auditd.data.ino`*:: ++ +-- type: keyword inode number -[float] -=== `auditd.data.old_enforcing` +-- +*`auditd.data.old_enforcing`*:: ++ +-- type: keyword old MAC enforcement status -[float] -=== `auditd.data.old-vcpu` +-- +*`auditd.data.old-vcpu`*:: ++ +-- type: keyword present number of CPU cores -[float] -=== `auditd.data.range` +-- +*`auditd.data.range`*:: ++ +-- type: keyword user's SE Linux range -[float] -=== `auditd.data.res` +-- +*`auditd.data.res`*:: ++ +-- type: keyword result of the audited operation(success/fail) -[float] -=== `auditd.data.added` +-- +*`auditd.data.added`*:: ++ +-- type: keyword number of new files detected -[float] -=== `auditd.data.fam` +-- +*`auditd.data.fam`*:: ++ +-- type: keyword socket address family -[float] -=== `auditd.data.nlnk-pid` +-- +*`auditd.data.nlnk-pid`*:: ++ +-- type: keyword pid of netlink packet sender -[float] -=== `auditd.data.subj` +-- +*`auditd.data.subj`*:: ++ +-- type: keyword lspp subject's context string -[float] -=== `auditd.data.a[0-3]` +-- +*`auditd.data.a[0-3]`*:: ++ +-- type: keyword the arguments to a syscall -[float] -=== `auditd.data.cgroup` +-- +*`auditd.data.cgroup`*:: ++ +-- type: keyword path to cgroup in sysfs -[float] -=== `auditd.data.kernel` +-- +*`auditd.data.kernel`*:: ++ +-- type: keyword kernel's version number -[float] -=== `auditd.data.ocomm` +-- +*`auditd.data.ocomm`*:: ++ +-- type: keyword object's command line name -[float] -=== `auditd.data.new-net` +-- +*`auditd.data.new-net`*:: ++ +-- type: keyword MAC address being assigned to vm -[float] -=== `auditd.data.permissive` +-- +*`auditd.data.permissive`*:: ++ +-- type: keyword SELinux is in permissive mode -[float] -=== `auditd.data.class` +-- +*`auditd.data.class`*:: ++ +-- type: keyword resource class assigned to vm -[float] -=== `auditd.data.compat` +-- +*`auditd.data.compat`*:: ++ +-- type: keyword is_compat_task result -[float] -=== `auditd.data.fi` +-- +*`auditd.data.fi`*:: ++ +-- type: keyword file assigned inherited capability map -[float] -=== `auditd.data.changed` +-- +*`auditd.data.changed`*:: ++ +-- type: keyword number of changed files -[float] -=== `auditd.data.msg` +-- +*`auditd.data.msg`*:: ++ +-- type: keyword the payload of the audit record -[float] -=== `auditd.data.dport` +-- +*`auditd.data.dport`*:: ++ +-- type: keyword remote port number -[float] -=== `auditd.data.new-seuser` +-- +*`auditd.data.new-seuser`*:: ++ +-- type: keyword new SELinux user -[float] -=== `auditd.data.invalid_context` +-- +*`auditd.data.invalid_context`*:: ++ +-- type: keyword SELinux context -[float] -=== `auditd.data.dmac` +-- +*`auditd.data.dmac`*:: ++ +-- type: keyword remote MAC address -[float] -=== `auditd.data.ipx-net` +-- +*`auditd.data.ipx-net`*:: ++ +-- type: keyword IPX network number -[float] -=== `auditd.data.iuid` +-- +*`auditd.data.iuid`*:: ++ +-- type: keyword ipc object's user ID -[float] -=== `auditd.data.macproto` +-- +*`auditd.data.macproto`*:: ++ +-- type: keyword ethernet packet type ID field -[float] -=== `auditd.data.obj` +-- +*`auditd.data.obj`*:: ++ +-- type: keyword lspp object context string -[float] -=== `auditd.data.ipid` +-- +*`auditd.data.ipid`*:: ++ +-- type: keyword IP datagram fragment identifier -[float] -=== `auditd.data.new-fs` +-- +*`auditd.data.new-fs`*:: ++ +-- type: keyword file system being added to vm -[float] -=== `auditd.data.vm-pid` +-- +*`auditd.data.vm-pid`*:: ++ +-- type: keyword vm's process ID -[float] -=== `auditd.data.cap_pi` +-- +*`auditd.data.cap_pi`*:: ++ +-- type: keyword process inherited capability map -[float] -=== `auditd.data.old-auid` +-- +*`auditd.data.old-auid`*:: ++ +-- type: keyword previous auid value -[float] -=== `auditd.data.oses` +-- +*`auditd.data.oses`*:: ++ +-- type: keyword object's session ID -[float] -=== `auditd.data.fd` +-- +*`auditd.data.fd`*:: ++ +-- type: keyword file descriptor number -[float] -=== `auditd.data.igid` +-- +*`auditd.data.igid`*:: ++ +-- type: keyword ipc object's group ID -[float] -=== `auditd.data.new-disk` +-- +*`auditd.data.new-disk`*:: ++ +-- type: keyword disk being added to vm -[float] -=== `auditd.data.parent` +-- +*`auditd.data.parent`*:: ++ +-- type: keyword the inode number of the parent file -[float] -=== `auditd.data.len` +-- +*`auditd.data.len`*:: ++ +-- type: keyword length -[float] -=== `auditd.data.oflag` +-- +*`auditd.data.oflag`*:: ++ +-- type: keyword open syscall flags -[float] -=== `auditd.data.uuid` +-- +*`auditd.data.uuid`*:: ++ +-- type: keyword a UUID -[float] -=== `auditd.data.code` +-- +*`auditd.data.code`*:: ++ +-- type: keyword seccomp action code -[float] -=== `auditd.data.nlnk-grp` +-- +*`auditd.data.nlnk-grp`*:: ++ +-- type: keyword netlink group number -[float] -=== `auditd.data.cap_fp` +-- +*`auditd.data.cap_fp`*:: ++ +-- type: keyword file permitted capability map -[float] -=== `auditd.data.new-mem` +-- +*`auditd.data.new-mem`*:: ++ +-- type: keyword new amount of memory in KB -[float] -=== `auditd.data.seperm` +-- +*`auditd.data.seperm`*:: ++ +-- type: keyword SELinux permission being decided on -[float] -=== `auditd.data.enforcing` +-- +*`auditd.data.enforcing`*:: ++ +-- type: keyword new MAC enforcement status -[float] -=== `auditd.data.new-chardev` +-- +*`auditd.data.new-chardev`*:: ++ +-- type: keyword new character device being assigned to vm -[float] -=== `auditd.data.old-rng` +-- +*`auditd.data.old-rng`*:: ++ +-- type: keyword device name of rng being removed from a vm -[float] -=== `auditd.data.outif` +-- +*`auditd.data.outif`*:: ++ +-- type: keyword out interface number -[float] -=== `auditd.data.cmd` +-- +*`auditd.data.cmd`*:: ++ +-- type: keyword command being executed -[float] -=== `auditd.data.hook` +-- +*`auditd.data.hook`*:: ++ +-- type: keyword netfilter hook that packet came from -[float] -=== `auditd.data.new-level` +-- +*`auditd.data.new-level`*:: ++ +-- type: keyword new run level -[float] -=== `auditd.data.sauid` +-- +*`auditd.data.sauid`*:: ++ +-- type: keyword sent login user ID -[float] -=== `auditd.data.sig` +-- +*`auditd.data.sig`*:: ++ +-- type: keyword signal number -[float] -=== `auditd.data.audit_backlog_wait_time` +-- +*`auditd.data.audit_backlog_wait_time`*:: ++ +-- type: keyword audit system's backlog wait time -[float] -=== `auditd.data.printer` +-- +*`auditd.data.printer`*:: ++ +-- type: keyword printer name -[float] -=== `auditd.data.old-mem` +-- +*`auditd.data.old-mem`*:: ++ +-- type: keyword present amount of memory in KB -[float] -=== `auditd.data.perm` +-- +*`auditd.data.perm`*:: ++ +-- type: keyword the file permission being used -[float] -=== `auditd.data.old_pi` +-- +*`auditd.data.old_pi`*:: ++ +-- type: keyword old process inherited capability map -[float] -=== `auditd.data.state` +-- +*`auditd.data.state`*:: ++ +-- type: keyword audit daemon configuration resulting state -[float] -=== `auditd.data.format` +-- +*`auditd.data.format`*:: ++ +-- type: keyword audit log's format -[float] -=== `auditd.data.new_gid` +-- +*`auditd.data.new_gid`*:: ++ +-- type: keyword new group ID being assigned -[float] -=== `auditd.data.tcontext` +-- +*`auditd.data.tcontext`*:: ++ +-- type: keyword the target's or object's context string -[float] -=== `auditd.data.maj` +-- +*`auditd.data.maj`*:: ++ +-- type: keyword device major number -[float] -=== `auditd.data.watch` +-- +*`auditd.data.watch`*:: ++ +-- type: keyword file name in a watch record -[float] -=== `auditd.data.device` +-- +*`auditd.data.device`*:: ++ +-- type: keyword device name -[float] -=== `auditd.data.grp` +-- +*`auditd.data.grp`*:: ++ +-- type: keyword group name -[float] -=== `auditd.data.bool` +-- +*`auditd.data.bool`*:: ++ +-- type: keyword name of SELinux boolean -[float] -=== `auditd.data.icmp_type` +-- +*`auditd.data.icmp_type`*:: ++ +-- type: keyword type of icmp message -[float] -=== `auditd.data.new_lock` +-- +*`auditd.data.new_lock`*:: ++ +-- type: keyword new value of feature lock -[float] -=== `auditd.data.old_prom` +-- +*`auditd.data.old_prom`*:: ++ +-- type: keyword network promiscuity flag -[float] -=== `auditd.data.acl` +-- +*`auditd.data.acl`*:: ++ +-- type: keyword access mode of resource assigned to vm -[float] -=== `auditd.data.ip` +-- +*`auditd.data.ip`*:: ++ +-- type: keyword network address of a printer -[float] -=== `auditd.data.new_pi` +-- +*`auditd.data.new_pi`*:: ++ +-- type: keyword new process inherited capability map -[float] -=== `auditd.data.default-context` +-- +*`auditd.data.default-context`*:: ++ +-- type: keyword default MAC context -[float] -=== `auditd.data.inode_gid` +-- +*`auditd.data.inode_gid`*:: ++ +-- type: keyword group ID of the inode's owner -[float] -=== `auditd.data.new-log_passwd` +-- +*`auditd.data.new-log_passwd`*:: ++ +-- type: keyword new value for TTY password logging -[float] -=== `auditd.data.new_pe` +-- +*`auditd.data.new_pe`*:: ++ +-- type: keyword new process effective capability map -[float] -=== `auditd.data.selected-context` +-- +*`auditd.data.selected-context`*:: ++ +-- type: keyword new MAC context assigned to session -[float] -=== `auditd.data.cap_fver` +-- +*`auditd.data.cap_fver`*:: ++ +-- type: keyword file system capabilities version number -[float] -=== `auditd.data.file` +-- +*`auditd.data.file`*:: ++ +-- type: keyword file name -[float] -=== `auditd.data.net` +-- +*`auditd.data.net`*:: ++ +-- type: keyword network MAC address -[float] -=== `auditd.data.virt` +-- +*`auditd.data.virt`*:: ++ +-- type: keyword kind of virtualization being referenced -[float] -=== `auditd.data.cap_pp` +-- +*`auditd.data.cap_pp`*:: ++ +-- type: keyword process permitted capability map -[float] -=== `auditd.data.old-range` +-- +*`auditd.data.old-range`*:: ++ +-- type: keyword present SELinux range -[float] -=== `auditd.data.resrc` +-- +*`auditd.data.resrc`*:: ++ +-- type: keyword resource being assigned -[float] -=== `auditd.data.new-range` +-- +*`auditd.data.new-range`*:: ++ +-- type: keyword new SELinux range -[float] -=== `auditd.data.obj_gid` +-- +*`auditd.data.obj_gid`*:: ++ +-- type: keyword group ID of object -[float] -=== `auditd.data.proto` +-- +*`auditd.data.proto`*:: ++ +-- type: keyword network protocol -[float] -=== `auditd.data.old-disk` +-- +*`auditd.data.old-disk`*:: ++ +-- type: keyword disk being removed from vm -[float] -=== `auditd.data.audit_failure` +-- +*`auditd.data.audit_failure`*:: ++ +-- type: keyword audit system's failure mode -[float] -=== `auditd.data.inif` +-- +*`auditd.data.inif`*:: ++ +-- type: keyword in interface number -[float] -=== `auditd.data.vm` +-- +*`auditd.data.vm`*:: ++ +-- type: keyword virtual machine name -[float] -=== `auditd.data.flags` +-- +*`auditd.data.flags`*:: ++ +-- type: keyword mmap syscall flags -[float] -=== `auditd.data.nlnk-fam` +-- +*`auditd.data.nlnk-fam`*:: ++ +-- type: keyword netlink protocol number -[float] -=== `auditd.data.old-fs` +-- +*`auditd.data.old-fs`*:: ++ +-- type: keyword file system being removed from vm -[float] -=== `auditd.data.old-ses` +-- +*`auditd.data.old-ses`*:: ++ +-- type: keyword previous ses value -[float] -=== `auditd.data.seqno` +-- +*`auditd.data.seqno`*:: ++ +-- type: keyword sequence number -[float] -=== `auditd.data.fver` +-- +*`auditd.data.fver`*:: ++ +-- type: keyword file system capabilities version number -[float] -=== `auditd.data.qbytes` +-- +*`auditd.data.qbytes`*:: ++ +-- type: keyword ipc objects quantity of bytes -[float] -=== `auditd.data.seuser` +-- +*`auditd.data.seuser`*:: ++ +-- type: keyword user's SE Linux user acct -[float] -=== `auditd.data.cap_fe` +-- +*`auditd.data.cap_fe`*:: ++ +-- type: keyword file assigned effective capability map -[float] -=== `auditd.data.new-vcpu` +-- +*`auditd.data.new-vcpu`*:: ++ +-- type: keyword new number of CPU cores -[float] -=== `auditd.data.old-level` +-- +*`auditd.data.old-level`*:: ++ +-- type: keyword old run level -[float] -=== `auditd.data.old_pp` +-- +*`auditd.data.old_pp`*:: ++ +-- type: keyword old process permitted capability map -[float] -=== `auditd.data.daddr` +-- +*`auditd.data.daddr`*:: ++ +-- type: keyword remote IP address -[float] -=== `auditd.data.old-role` +-- +*`auditd.data.old-role`*:: ++ +-- type: keyword present SELinux role -[float] -=== `auditd.data.ioctlcmd` +-- +*`auditd.data.ioctlcmd`*:: ++ +-- type: keyword The request argument to the ioctl syscall -[float] -=== `auditd.data.smac` +-- +*`auditd.data.smac`*:: ++ +-- type: keyword local MAC address -[float] -=== `auditd.data.apparmor` +-- +*`auditd.data.apparmor`*:: ++ +-- type: keyword apparmor event information -[float] -=== `auditd.data.fe` +-- +*`auditd.data.fe`*:: ++ +-- type: keyword file assigned effective capability map -[float] -=== `auditd.data.perm_mask` +-- +*`auditd.data.perm_mask`*:: ++ +-- type: keyword file permission mask that triggered a watch event -[float] -=== `auditd.data.ses` +-- +*`auditd.data.ses`*:: ++ +-- type: keyword login session ID -[float] -=== `auditd.data.cap_fi` +-- +*`auditd.data.cap_fi`*:: ++ +-- type: keyword file inherited capability map -[float] -=== `auditd.data.obj_uid` +-- +*`auditd.data.obj_uid`*:: ++ +-- type: keyword user ID of object -[float] -=== `auditd.data.reason` +-- +*`auditd.data.reason`*:: ++ +-- type: keyword text string denoting a reason for the action -[float] -=== `auditd.data.list` +-- +*`auditd.data.list`*:: ++ +-- type: keyword the audit system's filter list number -[float] -=== `auditd.data.old_lock` +-- +*`auditd.data.old_lock`*:: ++ +-- type: keyword present value of feature lock -[float] -=== `auditd.data.bus` +-- +*`auditd.data.bus`*:: ++ +-- type: keyword name of subsystem bus a vm resource belongs to -[float] -=== `auditd.data.old_pe` +-- +*`auditd.data.old_pe`*:: ++ +-- type: keyword old process effective capability map -[float] -=== `auditd.data.new-role` +-- +*`auditd.data.new-role`*:: ++ +-- type: keyword new SELinux role -[float] -=== `auditd.data.prom` +-- +*`auditd.data.prom`*:: ++ +-- type: keyword network promiscuity flag -[float] -=== `auditd.data.uri` +-- +*`auditd.data.uri`*:: ++ +-- type: keyword URI pointing to a printer -[float] -=== `auditd.data.audit_enabled` +-- +*`auditd.data.audit_enabled`*:: ++ +-- type: keyword audit systems's enable/disable status -[float] -=== `auditd.data.old-log_passwd` +-- +*`auditd.data.old-log_passwd`*:: ++ +-- type: keyword present value for TTY password logging -[float] -=== `auditd.data.old-seuser` +-- +*`auditd.data.old-seuser`*:: ++ +-- type: keyword present SELinux user -[float] -=== `auditd.data.per` +-- +*`auditd.data.per`*:: ++ +-- type: keyword linux personality -[float] -=== `auditd.data.scontext` +-- +*`auditd.data.scontext`*:: ++ +-- type: keyword the subject's context string -[float] -=== `auditd.data.tclass` +-- +*`auditd.data.tclass`*:: ++ +-- type: keyword target's object classification -[float] -=== `auditd.data.ver` +-- +*`auditd.data.ver`*:: ++ +-- type: keyword audit daemon's version number -[float] -=== `auditd.data.new` +-- +*`auditd.data.new`*:: ++ +-- type: keyword value being set in feature -[float] -=== `auditd.data.val` +-- +*`auditd.data.val`*:: ++ +-- type: keyword generic value associated with the operation -[float] -=== `auditd.data.img-ctx` +-- +*`auditd.data.img-ctx`*:: ++ +-- type: keyword the vm's disk image context string -[float] -=== `auditd.data.old-chardev` +-- +*`auditd.data.old-chardev`*:: ++ +-- type: keyword present character device assigned to vm -[float] -=== `auditd.data.old_val` +-- +*`auditd.data.old_val`*:: ++ +-- type: keyword current value of SELinux boolean -[float] -=== `auditd.data.success` +-- +*`auditd.data.success`*:: ++ +-- type: keyword whether the syscall was successful or not -[float] -=== `auditd.data.inode_uid` +-- +*`auditd.data.inode_uid`*:: ++ +-- type: keyword user ID of the inode's owner -[float] -=== `auditd.data.removed` +-- +*`auditd.data.removed`*:: ++ +-- type: keyword number of deleted files +-- -[float] -=== `auditd.data.socket.port` +*`auditd.data.socket.port`*:: ++ +-- type: keyword The port number. -[float] -=== `auditd.data.socket.saddr` +-- +*`auditd.data.socket.saddr`*:: ++ +-- type: keyword The raw socket address structure. -[float] -=== `auditd.data.socket.addr` +-- +*`auditd.data.socket.addr`*:: ++ +-- type: keyword The remote address. -[float] -=== `auditd.data.socket.family` +-- +*`auditd.data.socket.family`*:: ++ +-- type: keyword example: unix The socket family (unix, ipv4, ipv6, netlink). -[float] -=== `auditd.data.socket.path` +-- +*`auditd.data.socket.path`*:: ++ +-- type: keyword This is the path associated with a unix socket. -[float] -=== `auditd.messages` +-- +*`auditd.messages`*:: ++ +-- type: text An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. -[float] -=== `auditd.warnings` +-- +*`auditd.warnings`*:: ++ +-- type: keyword The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. +-- + [float] == geoip fields @@ -1980,46 +2515,56 @@ The geoip fields are defined as a convenience in case you decide to enrich the d -[float] -=== `geoip.continent_name` - +*`geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `geoip.city_name` +-- +*`geoip.city_name`*:: ++ +-- type: keyword The name of the city. -[float] -=== `geoip.region_name` +-- +*`geoip.region_name`*:: ++ +-- type: keyword The name of the region. -[float] -=== `geoip.country_iso_code` +-- +*`geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `geoip.location` +-- +*`geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. +-- + [[exported-fields-beat]] == Beat fields @@ -2027,33 +2572,41 @@ Contains common beat fields available in all event types. -[float] -=== `beat.name` - +*`beat.name`*:: ++ +-- The name of the Beat sending the log messages. If the Beat name is set in the configuration file, then that value is used. If it is not set, the hostname is used. To set the Beat name, use the `name` option in the configuration file. -[float] -=== `beat.hostname` +-- +*`beat.hostname`*:: ++ +-- The hostname as returned by the operating system on which the Beat is running. -[float] -=== `beat.timezone` +-- +*`beat.timezone`*:: ++ +-- The timezone as returned by the operating system on which the Beat is running. -[float] -=== `beat.version` +-- +*`beat.version`*:: ++ +-- The version of the beat that generated this event. -[float] -=== `@timestamp` +-- +*`@timestamp`*:: ++ +-- type: date example: August 26th 2016, 12:35:53.332 @@ -2065,20 +2618,26 @@ required: True The timestamp when the event log record was generated. -[float] -=== `tags` +-- +*`tags`*:: ++ +-- Arbitrary tags that can be set per Beat and per transaction type. -[float] -=== `fields` +-- +*`fields`*:: ++ +-- type: object Contains user configurable fields. +-- + [float] == error fields @@ -2086,30 +2645,36 @@ Error fields containing additional info in case of errors. -[float] -=== `error.message` - +*`error.message`*:: ++ +-- type: text Error message. -[float] -=== `error.code` +-- +*`error.code`*:: ++ +-- type: long Error code. -[float] -=== `error.type` +-- +*`error.type`*:: ++ +-- type: keyword Error type. +-- + [[exported-fields-cloud]] == Cloud provider metadata fields @@ -2117,56 +2682,70 @@ Metadata from cloud providers added by the add_cloud_metadata processor. -[float] -=== `meta.cloud.provider` - +*`meta.cloud.provider`*:: ++ +-- example: ec2 Name of the cloud provider. Possible values are ec2, gce, or digitalocean. -[float] -=== `meta.cloud.instance_id` +-- +*`meta.cloud.instance_id`*:: ++ +-- Instance ID of the host machine. -[float] -=== `meta.cloud.instance_name` +-- +*`meta.cloud.instance_name`*:: ++ +-- Instance name of the host machine. -[float] -=== `meta.cloud.machine_type` +-- +*`meta.cloud.machine_type`*:: ++ +-- example: t2.medium Machine type of the host machine. -[float] -=== `meta.cloud.availability_zone` +-- +*`meta.cloud.availability_zone`*:: ++ +-- example: us-east-1c Availability zone in which this host is running. -[float] -=== `meta.cloud.project_id` +-- +*`meta.cloud.project_id`*:: ++ +-- example: project-x Name of the project in Google Cloud. -[float] -=== `meta.cloud.region` +-- +*`meta.cloud.region`*:: ++ +-- Region in which this host is running. +-- + [[exported-fields-common]] == Common fields @@ -2174,15 +2753,17 @@ Contains common fields available in all event types. -[float] -=== `event.module` - +*`event.module`*:: ++ +-- The name of the module that generated the event. -[float] -=== `event.action` +-- +*`event.action`*:: ++ +-- type: keyword example: logged-in @@ -2191,184 +2772,230 @@ Action describes the change that triggered the event. For the file integrity module the possible values are: attributes_modified, created, deleted, updated, moved, and config_change. +-- + [float] == file fields File attributes. -[float] -=== `file.path` - +*`file.path`*:: ++ +-- type: text The path to the file. -[float] -=== `file.path.raw` - +*`file.path.raw`*:: ++ +-- type: keyword The path to the file. This is a non-analyzed field that is useful for aggregations. -[float] -=== `file.target_path` +-- + +-- +*`file.target_path`*:: ++ +-- type: keyword The target path for symlinks. -[float] -=== `file.type` +-- +*`file.type`*:: ++ +-- type: keyword The file type (file, dir, or symlink). -[float] -=== `file.device` +-- +*`file.device`*:: ++ +-- type: keyword The device. -[float] -=== `file.inode` +-- +*`file.inode`*:: ++ +-- type: keyword The inode representing the file in the filesystem. -[float] -=== `file.uid` +-- +*`file.uid`*:: ++ +-- type: keyword The user ID (UID) or security identifier (SID) of the file owner. -[float] -=== `file.owner` +-- +*`file.owner`*:: ++ +-- type: keyword The file owner's username. -[float] -=== `file.gid` +-- +*`file.gid`*:: ++ +-- type: keyword The primary group ID (GID) of the file. -[float] -=== `file.group` +-- +*`file.group`*:: ++ +-- type: keyword The primary group name of the file. -[float] -=== `file.mode` +-- +*`file.mode`*:: ++ +-- type: keyword example: 416 The mode of the file in octal representation. -[float] -=== `file.setuid` +-- +*`file.setuid`*:: ++ +-- type: boolean example: True Set if the file has the `setuid` bit set. Omitted otherwise. -[float] -=== `file.setgid` +-- +*`file.setgid`*:: ++ +-- type: boolean example: True Set if the file has the `setgid` bit set. Omitted otherwise. -[float] -=== `file.size` +-- +*`file.size`*:: ++ +-- type: long The file size in bytes (field is only added when `type` is `file`). -[float] -=== `file.mtime` +-- +*`file.mtime`*:: ++ +-- type: date The last modified time of the file (time when content was modified). -[float] -=== `file.ctime` +-- +*`file.ctime`*:: ++ +-- type: date The last change time of the file (time when metadata was changed). -[float] -=== `file.origin` +-- +*`file.origin`*:: ++ +-- type: text An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. -[float] -=== `file.origin.raw` - +*`file.origin.raw`*:: ++ +-- type: keyword This is a non-analyzed field that is useful for aggregations on the origin data. +-- + +-- + [float] == selinux fields The SELinux identity of the file. -[float] -=== `file.selinux.user` - +*`file.selinux.user`*:: ++ +-- type: keyword The owner of the object. -[float] -=== `file.selinux.role` +-- +*`file.selinux.role`*:: ++ +-- type: keyword The object's SELinux role. -[float] -=== `file.selinux.domain` +-- +*`file.selinux.domain`*:: ++ +-- type: keyword The object's SELinux domain or type. -[float] -=== `file.selinux.level` +-- +*`file.selinux.level`*:: ++ +-- type: keyword example: s0 The object's SELinux level. +-- + [[exported-fields-docker-processor]] == Docker fields @@ -2377,38 +3004,46 @@ Docker stats collected from Docker. -[float] -=== `docker.container.id` - +*`docker.container.id`*:: ++ +-- type: keyword Unique container id. -[float] -=== `docker.container.image` +-- +*`docker.container.image`*:: ++ +-- type: keyword Name of the image the container was built on. -[float] -=== `docker.container.name` +-- +*`docker.container.name`*:: ++ +-- type: keyword Container name. -[float] -=== `docker.container.labels` +-- +*`docker.container.labels`*:: ++ +-- type: object Image labels. +-- + [[exported-fields-file_integrity]] == File Integrity fields @@ -2422,111 +3057,209 @@ Hashes of the file. The keys are algorithm names and the values are the hex enco -[float] -=== `hash.blake2b_256` - +*`hash.blake2b_256`*:: ++ +-- type: keyword BLAKE2b-256 hash of the file. -[float] -=== `hash.blake2b_384` +-- +*`hash.blake2b_384`*:: ++ +-- type: keyword BLAKE2b-384 hash of the file. -[float] -=== `hash.blake2b_512` +-- +*`hash.blake2b_512`*:: ++ +-- type: keyword BLAKE2b-512 hash of the file. -[float] -=== `hash.md5` +-- +*`hash.md5`*:: ++ +-- type: keyword MD5 hash of the file. -[float] -=== `hash.sha1` +-- +*`hash.sha1`*:: ++ +-- type: keyword SHA1 hash of the file. -[float] -=== `hash.sha224` +-- +*`hash.sha224`*:: ++ +-- type: keyword SHA224 hash of the file. -[float] -=== `hash.sha256` +-- +*`hash.sha256`*:: ++ +-- type: keyword SHA256 hash of the file. -[float] -=== `hash.sha384` +-- +*`hash.sha384`*:: ++ +-- type: keyword SHA384 hash of the file. -[float] -=== `hash.sha3_224` +-- +*`hash.sha3_224`*:: ++ +-- type: keyword SHA3_224 hash of the file. -[float] -=== `hash.sha3_256` +-- +*`hash.sha3_256`*:: ++ +-- type: keyword SHA3_256 hash of the file. -[float] -=== `hash.sha3_384` +-- +*`hash.sha3_384`*:: ++ +-- type: keyword SHA3_384 hash of the file. -[float] -=== `hash.sha3_512` +-- +*`hash.sha3_512`*:: ++ +-- type: keyword SHA3_512 hash of the file. -[float] -=== `hash.sha512` +-- +*`hash.sha512`*:: ++ +-- type: keyword SHA512 hash of the file. -[float] -=== `hash.sha512_224` +-- +*`hash.sha512_224`*:: ++ +-- type: keyword SHA512/224 hash of the file. -[float] -=== `hash.sha512_256` +-- +*`hash.sha512_256`*:: ++ +-- type: keyword SHA512/256 hash of the file. +-- + +[[exported-fields-host-processor]] +== Host fields + +Info collected for the host machine. + + + + +*`host.name`*:: ++ +-- +type: keyword + +Hostname. + + +-- + +*`host.id`*:: ++ +-- +type: keyword + +Unique host id. + + +-- + +*`host.architecture`*:: ++ +-- +type: keyword + +Host architecture (e.g. x86_64, arm, ppc, mips). + + +-- + +*`host.os.platform`*:: ++ +-- +type: keyword + +OS platform (e.g. centos, ubuntu, windows). + + +-- + +*`host.os.version`*:: ++ +-- +type: keyword + +OS version. + + +-- + +*`host.os.family`*:: ++ +-- +type: keyword + +OS family (e.g. redhat, debian, freebsd, windows). + + +-- + [[exported-fields-kubernetes-processor]] == Kubernetes fields @@ -2535,59 +3268,73 @@ Kubernetes metadata added by the kubernetes processor -[float] -=== `kubernetes.pod.name` - +*`kubernetes.pod.name`*:: ++ +-- type: keyword Kubernetes pod name -[float] -=== `kubernetes.namespace` +-- +*`kubernetes.namespace`*:: ++ +-- type: keyword Kubernetes namespace -[float] -=== `kubernetes.node.name` +-- +*`kubernetes.node.name`*:: ++ +-- type: keyword Kubernetes node name -[float] -=== `kubernetes.labels` +-- +*`kubernetes.labels`*:: ++ +-- type: object Kubernetes labels map -[float] -=== `kubernetes.annotations` +-- +*`kubernetes.annotations`*:: ++ +-- type: object Kubernetes annotations map -[float] -=== `kubernetes.container.name` +-- +*`kubernetes.container.name`*:: ++ +-- type: keyword Kubernetes container name -[float] -=== `kubernetes.container.image` +-- +*`kubernetes.container.image`*:: ++ +-- type: keyword Kubernetes container image +-- + diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/getting-started.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/getting-started.asciidoc index c9e2636d..46f25474 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/getting-started.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/getting-started.asciidoc @@ -1,18 +1,7 @@ [id="{beatname_lc}-getting-started"] == Getting started with {beatname_uc} -To get started with your own {beatname_uc} setup, install and configure these -related products: - - * Elasticsearch for storage and indexing the data. - * Kibana for the UI. - * Logstash (optional) for inserting data into Elasticsearch. - -See {libbeat}/getting-started.html[Getting Started with Beats and the Elastic Stack] -for more information. - -After installing the Elastic Stack, read the following topics to learn how to -install, configure, and run {beatname_uc}: +include::../../libbeat/docs/shared-getting-started-intro.asciidoc[] * <<{beatname_lc}-installation>> * <<{beatname_lc}-configuration>> @@ -25,7 +14,7 @@ install, configure, and run {beatname_uc}: [id="{beatname_lc}-installation"] === Step 1: Install {beatname_uc} -You should install {beatname_uc} on all the servers you want to monitor. +Install {beatname_uc} on all the servers you want to monitor. include::../../libbeat/docs/shared-download-and-install.asciidoc[] @@ -123,8 +112,7 @@ https://www.elastic.co/downloads/beats/{beatname_lc}[downloads page]. . Rename the +{beatname_lc}--windows+ directory to +{beatname_uc}+. . Open a PowerShell prompt as an Administrator (right-click the PowerShell icon -and select *Run As Administrator*). If you are running Windows XP, you may need -to download and install PowerShell. +and select *Run As Administrator*). . From the PowerShell prompt, run the following commands to install {beatname_uc} as a Windows service: diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/index.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/index.asciidoc index b8d90b17..7327f472 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/index.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/index.asciidoc @@ -2,19 +2,21 @@ include::../../libbeat/docs/version.asciidoc[] -include::{asciidoc-dir}/../../shared/attributes62.asciidoc[] +include::{asciidoc-dir}/../../shared/attributes.asciidoc[] :version: {stack-version} :beatname_lc: auditbeat :beatname_uc: Auditbeat :beatname_pkg: {beatname_lc} +:github_repo_name: beats +:discuss_forum: beats/{beatname_lc} +:beat_default_index_prefix: {beatname_lc} +:has_ml_jobs: yes include::../../libbeat/docs/shared-beats-attributes.asciidoc[] include::./overview.asciidoc[] -include::../../libbeat/docs/contributing-to-beats.asciidoc[] - include::./getting-started.asciidoc[] include::../../libbeat/docs/repositories.asciidoc[] @@ -38,3 +40,6 @@ include::../../libbeat/docs/security/securing-beats.asciidoc[] include::./troubleshooting.asciidoc[] include::./faq.asciidoc[] + +include::../../libbeat/docs/contributing-to-beats.asciidoc[] + diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/securing-auditbeat.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/securing-auditbeat.asciidoc index 44c4f85f..d68b5e4c 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/securing-auditbeat.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/securing-auditbeat.asciidoc @@ -9,6 +9,7 @@ and other products in the Elastic stack: * <> * <> +* <> //sets block macro for https.asciidoc included in next section diff --git a/vendor/github.com/elastic/beats/auditbeat/docs/setting-up-running.asciidoc b/vendor/github.com/elastic/beats/auditbeat/docs/setting-up-running.asciidoc index c666a8ab..8f7de65d 100644 --- a/vendor/github.com/elastic/beats/auditbeat/docs/setting-up-running.asciidoc +++ b/vendor/github.com/elastic/beats/auditbeat/docs/setting-up-running.asciidoc @@ -4,7 +4,7 @@ // that is unique to each beat. ///// -[[seting-up-and-running]] +[[setting-up-and-running]] == Setting up and running {beatname_uc} Before reading this section, see the @@ -30,3 +30,5 @@ include::../../libbeat/docs/keystore.asciidoc[] include::../../libbeat/docs/command-reference.asciidoc[] include::./running-on-docker.asciidoc[] + +include::../../libbeat/docs/shared-shutdown.asciidoc[] diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/config.yml.tpl b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/config.yml.tpl index 0ef6465c..30cb58df 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/config.yml.tpl +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/config.yml.tpl @@ -17,17 +17,19 @@ ## Create file watches (-w) or syscall audits (-a or -A). Uncomment these ## examples or add your own rules. + {{ if eq .goarch "amd64" -}} ## If you are on a 64 bit platform, everything should be running ## in 64 bit mode. This rule will detect any use of the 32 bit syscalls ## because this might be a sign of someone exploiting a hole in the 32 ## bit API. #-a always,exit -F arch=b32 -S all -F key=32bit-abi + {{ end -}} ## Executions. - #-a always,exit -F arch=b64 -S execve,execveat -k exec + #-a always,exit -F arch=b{{.arch_bits}} -S execve,execveat -k exec ## External access (warning: these can be expensive to audit). - #-a always,exit -F arch=b64 -S accept,bind,connect -F key=external-access + #-a always,exit -F arch=b{{.arch_bits}} -S accept,bind,connect -F key=external-access ## Identity changes. #-w /etc/group -p wa -k identity @@ -35,6 +37,6 @@ #-w /etc/gshadow -p wa -k identity ## Unauthorized access attempts. - #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -k access - #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -k access + #-a always,exit -F arch=b{{.arch_bits}} -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -k access + #-a always,exit -F arch=b{{.arch_bits}} -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -k access {{ end -}} diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-executions.json b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-executions.json index f84bcccd..1b0f82ea 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-executions.json +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-executions.json @@ -84,7 +84,7 @@ "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" }, "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", - "panelsJSON": "[{\"gridData\":{\"h\":3,\"i\":\"1\",\"w\":4,\"x\":4,\"y\":0},\"id\":\"20a8e8d0-c1c8-11e7-8995-936807a28b16\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"3\",\"w\":4,\"x\":8,\"y\":0},\"id\":\"f81a6de0-c1c1-11e7-8995-936807a28b16\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"5\",\"w\":4,\"x\":0,\"y\":0},\"id\":\"2efac370-c1ca-11e7-8995-936807a28b16\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":5,\"i\":\"6\",\"w\":12,\"x\":0,\"y\":3},\"id\":\"d382f5b0-c1c6-11e7-8995-936807a28b16\",\"panelIndex\":\"6\",\"type\":\"search\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"}]", + "panelsJSON": "[{\"gridData\":{\"h\":3,\"i\":\"1\",\"w\":4,\"x\":4,\"y\":0},\"id\":\"20a8e8d0-c1c8-11e7-8995-936807a28b16\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"3\",\"w\":4,\"x\":8,\"y\":0},\"id\":\"f81a6de0-c1c1-11e7-8995-936807a28b16\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"5\",\"w\":4,\"x\":0,\"y\":0},\"id\":\"2efac370-c1ca-11e7-8995-936807a28b16\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":5,\"i\":\"6\",\"w\":12,\"x\":0,\"y\":3},\"id\":\"d382f5b0-c1c6-11e7-8995-936807a28b16\",\"panelIndex\":\"6\",\"type\":\"search\",\"version\":\"6.2.4\"}]", "timeRestore": false, "title": "[Auditbeat Auditd] Executions", "version": 1 @@ -95,5 +95,5 @@ "version": 5 } ], - "version": "7.0.0-alpha1-SNAPSHOT" -} \ No newline at end of file + "version": "6.2.4" +} diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-overview.json b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-overview.json index 9a8bdfca..99e1a24c 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-overview.json +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-overview.json @@ -71,7 +71,7 @@ "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" }, "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", - "panelsJSON": "[{\"gridData\":{\"h\":3,\"i\":\"1\",\"w\":7,\"x\":0,\"y\":0},\"id\":\"97680df0-c1c0-11e7-8995-936807a28b16\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":5,\"x\":7,\"y\":0},\"id\":\"08679220-c25a-11e7-8692-232bd1143e8a\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":5,\"i\":\"5\",\"w\":12,\"x\":0,\"y\":3},\"id\":\"0f10c430-c1c3-11e7-8995-936807a28b16\",\"panelIndex\":\"5\",\"type\":\"search\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"}]", + "panelsJSON": "[{\"gridData\":{\"h\":3,\"i\":\"1\",\"w\":7,\"x\":0,\"y\":0},\"id\":\"97680df0-c1c0-11e7-8995-936807a28b16\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":5,\"x\":7,\"y\":0},\"id\":\"08679220-c25a-11e7-8692-232bd1143e8a\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":5,\"i\":\"5\",\"w\":12,\"x\":0,\"y\":3},\"id\":\"0f10c430-c1c3-11e7-8995-936807a28b16\",\"panelIndex\":\"5\",\"type\":\"search\",\"version\":\"6.2.4\"}]", "timeRestore": false, "title": "[Auditbeat Auditd] Overview", "version": 1 @@ -82,5 +82,5 @@ "version": 5 } ], - "version": "7.0.0-alpha1-SNAPSHOT" -} \ No newline at end of file + "version": "6.2.4" +} diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-sockets.json b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-sockets.json index fc34a7d2..f78214b2 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-sockets.json +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/_meta/kibana/6/dashboard/auditbeat-kernel-sockets.json @@ -173,7 +173,7 @@ "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"*\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" }, "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", - "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":4,\"i\":\"1\",\"w\":6,\"x\":6,\"y\":3},\"id\":\"faf882f0-c242-11e7-8692-232bd1143e8a\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":5,\"i\":\"2\",\"w\":6,\"x\":0,\"y\":7},\"id\":\"ea483730-c246-11e7-8692-232bd1143e8a\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":5,\"i\":\"3\",\"w\":6,\"x\":6,\"y\":7},\"id\":\"ceb91de0-c250-11e7-8692-232bd1143e8a\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":12,\"x\":0,\"y\":0},\"id\":\"b21e0c70-c252-11e7-8692-232bd1143e8a\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":4,\"i\":\"5\",\"w\":6,\"x\":0,\"y\":3},\"id\":\"a8e20450-c256-11e7-8692-232bd1143e8a\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"}]", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":4,\"i\":\"1\",\"w\":6,\"x\":6,\"y\":3},\"id\":\"faf882f0-c242-11e7-8692-232bd1143e8a\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":5,\"i\":\"2\",\"w\":6,\"x\":0,\"y\":7},\"id\":\"ea483730-c246-11e7-8692-232bd1143e8a\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":5,\"i\":\"3\",\"w\":6,\"x\":6,\"y\":7},\"id\":\"ceb91de0-c250-11e7-8692-232bd1143e8a\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":12,\"x\":0,\"y\":0},\"id\":\"b21e0c70-c252-11e7-8692-232bd1143e8a\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":4,\"i\":\"5\",\"w\":6,\"x\":0,\"y\":3},\"id\":\"a8e20450-c256-11e7-8692-232bd1143e8a\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.2.4\"}]", "timeRestore": false, "title": "[Auditbeat Auditd] Sockets", "version": 1 @@ -184,5 +184,5 @@ "version": 4 } ], - "version": "7.0.0-alpha1-SNAPSHOT" -} \ No newline at end of file + "version": "6.2.4" +} diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/audit_linux_test.go b/vendor/github.com/elastic/beats/auditbeat/module/auditd/audit_linux_test.go index af5489cf..39eef5fe 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/audit_linux_test.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/audit_linux_test.go @@ -12,12 +12,13 @@ import ( "github.com/stretchr/testify/assert" + "github.com/prometheus/procfs" + "github.com/elastic/beats/auditbeat/core" "github.com/elastic/beats/libbeat/logp" mbtest "github.com/elastic/beats/metricbeat/mb/testing" "github.com/elastic/go-libaudit" "github.com/elastic/go-libaudit/auparse" - "github.com/elastic/procfs" ) // Specify the -audit flag when running these tests to interact with the real diff --git a/vendor/github.com/elastic/beats/auditbeat/module/auditd/config_linux_test.go b/vendor/github.com/elastic/beats/auditbeat/module/auditd/config_linux_test.go index a5d48b97..4731a17d 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/auditd/config_linux_test.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/auditd/config_linux_test.go @@ -14,7 +14,7 @@ audit_rules: | # Comments and empty lines are ignored. -w /etc/passwd -p wa -k auth - -a always,exit -F arch=b64 -S execve -k exec` + -a always,exit -S execve -k exec` config, err := parseConfig(t, data) if err != nil { @@ -26,7 +26,7 @@ audit_rules: | } assert.EqualValues(t, []string{ "-w /etc/passwd -p wa -k auth", - "-a always,exit -F arch=b64 -S execve -k exec", + "-a always,exit -S execve -k exec", }, commands(rules)) } @@ -35,7 +35,7 @@ func TestConfigValidateWithError(t *testing.T) { audit_rules: | -x bad -F flag -a always,exit -w /etc/passwd - -a always,exit -F arch=b64 -S fake -k exec` + -a always,exit -S fake -k exec` _, err := parseConfig(t, data) if err == nil { diff --git a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/_meta/kibana/6/dashboard/auditbeat-file-integrity.json b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/_meta/kibana/6/dashboard/auditbeat-file-integrity.json index 043625b5..63a611a1 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/_meta/kibana/6/dashboard/auditbeat-file-integrity.json +++ b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/_meta/kibana/6/dashboard/auditbeat-file-integrity.json @@ -218,7 +218,7 @@ "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" }, "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", - "panelsJSON": "[{\"gridData\":{\"h\":6,\"i\":\"1\",\"w\":2,\"x\":0,\"y\":0},\"id\":\"AV0tVcg6g1PYniApZa-v\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":6,\"i\":\"2\",\"w\":7,\"x\":2,\"y\":0},\"id\":\"AV0tV05vg1PYniApZbA2\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"3\",\"w\":3,\"x\":9,\"y\":0},\"id\":\"AV0tWL-Yg1PYniApZbCs\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":3,\"x\":9,\"y\":3},\"id\":\"AV0tWSdXg1PYniApZbDU\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"5\",\"w\":4,\"x\":4,\"y\":8},\"id\":\"AV0tW0djg1PYniApZbGL\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":2,\"i\":\"6\",\"w\":4,\"x\":0,\"y\":6},\"id\":\"AV0tY6jwg1PYniApZbRY\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":2,\"i\":\"7\",\"w\":4,\"x\":4,\"y\":6},\"id\":\"AV0tav8Ag1PYniApZbbK\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":2,\"i\":\"8\",\"w\":4,\"x\":8,\"y\":6},\"id\":\"AV0tbcUdg1PYniApZbe1\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":5,\"i\":\"9\",\"w\":6,\"x\":0,\"y\":11},\"id\":\"AV0tc_xZg1PYniApZbnL\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"10\",\"w\":4,\"x\":8,\"y\":8},\"id\":\"AV0tes4Eg1PYniApZbwV\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"gridData\":{\"h\":3,\"i\":\"11\",\"w\":4,\"x\":0,\"y\":8},\"id\":\"AV0te0TCg1PYniApZbw9\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"},{\"columns\":[\"file.path\",\"event.action\"],\"gridData\":{\"h\":5,\"i\":\"12\",\"w\":6,\"x\":6,\"y\":11},\"id\":\"a380a060-cb44-11e7-9835-2f31fe08873b\",\"panelIndex\":\"12\",\"sort\":[\"@timestamp\",\"desc\"],\"type\":\"search\",\"version\":\"7.0.0-alpha1-SNAPSHOT\"}]", + "panelsJSON": "[{\"gridData\":{\"h\":6,\"i\":\"1\",\"w\":2,\"x\":0,\"y\":0},\"id\":\"AV0tVcg6g1PYniApZa-v\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":6,\"i\":\"2\",\"w\":7,\"x\":2,\"y\":0},\"id\":\"AV0tV05vg1PYniApZbA2\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"3\",\"w\":3,\"x\":9,\"y\":0},\"id\":\"AV0tWL-Yg1PYniApZbCs\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"4\",\"w\":3,\"x\":9,\"y\":3},\"id\":\"AV0tWSdXg1PYniApZbDU\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"5\",\"w\":4,\"x\":4,\"y\":8},\"id\":\"AV0tW0djg1PYniApZbGL\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":2,\"i\":\"6\",\"w\":4,\"x\":0,\"y\":6},\"id\":\"AV0tY6jwg1PYniApZbRY\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":2,\"i\":\"7\",\"w\":4,\"x\":4,\"y\":6},\"id\":\"AV0tav8Ag1PYniApZbbK\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":2,\"i\":\"8\",\"w\":4,\"x\":8,\"y\":6},\"id\":\"AV0tbcUdg1PYniApZbe1\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":5,\"i\":\"9\",\"w\":6,\"x\":0,\"y\":11},\"id\":\"AV0tc_xZg1PYniApZbnL\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"10\",\"w\":4,\"x\":8,\"y\":8},\"id\":\"AV0tes4Eg1PYniApZbwV\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"gridData\":{\"h\":3,\"i\":\"11\",\"w\":4,\"x\":0,\"y\":8},\"id\":\"AV0te0TCg1PYniApZbw9\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.2.4\"},{\"columns\":[\"file.path\",\"event.action\"],\"gridData\":{\"h\":5,\"i\":\"12\",\"w\":6,\"x\":6,\"y\":11},\"id\":\"a380a060-cb44-11e7-9835-2f31fe08873b\",\"panelIndex\":\"12\",\"sort\":[\"@timestamp\",\"desc\"],\"type\":\"search\",\"version\":\"6.2.4\"}]", "timeRestore": false, "title": "[Auditbeat File Integrity] Overview", "version": 1 @@ -230,4 +230,4 @@ } ], "version": "6.1.2" -} \ No newline at end of file +} diff --git a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/eventreader_fsnotify.go b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/eventreader_fsnotify.go index cac54162..731e370a 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/eventreader_fsnotify.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/eventreader_fsnotify.go @@ -36,6 +36,14 @@ func NewEventReader(c Config) (EventProducer, error) { } func (r *reader) Start(done <-chan struct{}) (<-chan Event, error) { + if err := r.watcher.Start(); err != nil { + return nil, errors.Wrap(err, "unable to start watcher") + } + go r.consumeEvents(done) + + // Windows implementation of fsnotify needs to have the watched paths + // installed after the event consumer is started, to avoid a potential + // deadlock. Do it on all platforms for simplicity. for _, p := range r.config.Paths { if err := r.watcher.Add(p); err != nil { if err == syscall.EMFILE { @@ -48,10 +56,6 @@ func (r *reader) Start(done <-chan struct{}) (<-chan Event, error) { } } - if err := r.watcher.Start(); err != nil { - return nil, errors.Wrap(err, "unable to start watcher") - } - go r.consumeEvents(done) r.log.Infow("Started fsnotify watcher", "file_path", r.config.Paths, "recursive", r.config.Recursive) diff --git a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/filetree_test.go b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/filetree_test.go index 710c4bc0..5f501578 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/filetree_test.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/filetree_test.go @@ -1,3 +1,5 @@ +// +build !integration + package monitor import ( diff --git a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor.go b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor.go index 560527e2..40b77fa9 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor.go @@ -21,7 +21,9 @@ func New(recursive bool) (Watcher, error) { if err != nil { return nil, err } - if recursive { + // Use our simulated recursive watches unless the fsnotify implementation + // supports OS-provided recursive watches + if recursive && fsnotify.SetRecursive() != nil { return newRecursiveWatcher(fsnotify), nil } return (*nonRecursiveWatcher)(fsnotify), nil diff --git a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor_test.go b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor_test.go index 283c6ac4..9dd15961 100644 --- a/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor_test.go +++ b/vendor/github.com/elastic/beats/auditbeat/module/file_integrity/monitor/monitor_test.go @@ -1,3 +1,5 @@ +// +build !integration + package monitor import ( diff --git a/vendor/github.com/elastic/beats/auditbeat/scripts/generate_config.go b/vendor/github.com/elastic/beats/auditbeat/scripts/generate_config.go index fd3489c8..9d295010 100644 --- a/vendor/github.com/elastic/beats/auditbeat/scripts/generate_config.go +++ b/vendor/github.com/elastic/beats/auditbeat/scripts/generate_config.go @@ -18,6 +18,7 @@ const defaultGlob = "module/*/_meta/config*.yml.tpl" var ( goos = flag.String("os", runtime.GOOS, "generate config specific to the specified operating system") + goarch = flag.String("arch", runtime.GOARCH, "generate config specific to the specified CPU architecture") reference = flag.Bool("ref", false, "generate a reference config") concat = flag.Bool("concat", false, "concatenate all configs instead writing individual files") ) @@ -40,9 +41,20 @@ func getConfig(file string) ([]byte, error) { return nil, errors.Wrapf(err, "failed reading %v", file) } + var archBits string + switch *goarch { + case "i386": + archBits = "32" + case "amd64": + archBits = "64" + default: + return nil, fmt.Errorf("supporting only i386 and amd64 architecture") + } data := map[string]interface{}{ + "goarch": *goarch, "goos": *goos, "reference": *reference, + "arch_bits": archBits, } buf := new(bytes.Buffer) if err = tpl.Execute(buf, data); err != nil { diff --git a/vendor/github.com/elastic/beats/auditbeat/tests/system/auditbeat.py b/vendor/github.com/elastic/beats/auditbeat/tests/system/auditbeat.py index de1af657..1c0f4e81 100644 --- a/vendor/github.com/elastic/beats/auditbeat/tests/system/auditbeat.py +++ b/vendor/github.com/elastic/beats/auditbeat/tests/system/auditbeat.py @@ -1,14 +1,54 @@ import os +import shutil import sys +import tempfile -sys.path.append('../../../libbeat/tests/system') -from beat.beat import TestCase +sys.path.append(os.path.join(os.path.dirname(__file__), '../../../metricbeat/tests/system')) +if os.name == "nt": + import win32file -class BaseTest(TestCase): +from metricbeat import BaseTest as MetricbeatTest + + +class BaseTest(MetricbeatTest): @classmethod def setUpClass(self): self.beat_name = "auditbeat" self.beat_path = os.path.abspath( os.path.join(os.path.dirname(__file__), "../../")) - super(BaseTest, self).setUpClass() + super(MetricbeatTest, self).setUpClass() + + def create_file(self, path, contents): + f = open(path, 'wb') + f.write(contents) + f.close() + + def check_event(self, event, expected): + for key in expected: + assert key in event, "key '{0}' not found in event".format(key) + assert event[key] == expected[key], \ + "key '{0}' has value '{1}', expected '{2}'".format(key, + event[key], + expected[key]) + + def temp_dir(self, prefix): + # os.path.realpath resolves any symlinks in path. Necessary for macOS + # where /var is a symlink to /private/var + p = os.path.realpath(tempfile.mkdtemp(prefix)) + if os.name == "nt": + # Under windows, get rid of any ~1 in path (short path) + p = str(win32file.GetLongPathName(p)) + return p + + +class PathCleanup: + def __init__(self, paths): + self.paths = paths + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_val, exc_tb): + for path in self.paths: + shutil.rmtree(path) diff --git a/vendor/github.com/elastic/beats/auditbeat/tests/system/config/auditbeat.yml.j2 b/vendor/github.com/elastic/beats/auditbeat/tests/system/config/auditbeat.yml.j2 index 8ec0ba10..6068b99e 100644 --- a/vendor/github.com/elastic/beats/auditbeat/tests/system/config/auditbeat.yml.j2 +++ b/vendor/github.com/elastic/beats/auditbeat/tests/system/config/auditbeat.yml.j2 @@ -18,15 +18,8 @@ auditbeat.modules: {%- endfor %} queue.mem: - events: 4096 - flush.min_events: 8 - flush.timeout: 0.1s + events: 4 + flush.min_events: 0 + flush.timeout: 0.01s -{%- if elasticsearch %} -output.elasticsearch: - hosts: ["{{ elasticsearch.host }}"] -{%- else %} -output.file: - path: '{{ output_file_path|default(beat.working_dir + "/output") }}' - filename: {{ output_file_filename|default("auditbeat") }} -{%- endif %} +{% include './tests/system/config/libbeat.yml.j2' %} diff --git a/vendor/github.com/elastic/beats/auditbeat/tests/system/test_base.py b/vendor/github.com/elastic/beats/auditbeat/tests/system/test_base.py index 8e622bbc..13990876 100644 --- a/vendor/github.com/elastic/beats/auditbeat/tests/system/test_base.py +++ b/vendor/github.com/elastic/beats/auditbeat/tests/system/test_base.py @@ -1,5 +1,7 @@ import re import sys +import os +import shutil import unittest from auditbeat import BaseTest from elasticsearch import Elasticsearch @@ -7,15 +9,18 @@ class Test(BaseTest): - @unittest.skipUnless(re.match("(?i)linux", sys.platform), "os") def test_start_stop(self): """ Auditbeat starts and stops without error. """ - self.render_config_template(modules=[{ - "name": "audit", - "metricsets": ["kernel"], - }]) + self.render_config_template( + modules=[{ + "name": "file_integrity", + "extras": { + "paths": ["file.example"], + } + }], + ) proc = self.start_beat() self.wait_until(lambda: self.log_contains("start running")) proc.check_kill_and_wait() @@ -35,11 +40,10 @@ def test_template(self): self.render_config_template( modules=[{ - "name": "audit", - "metricsets": ["file"], + "name": "file_integrity", "extras": { - "file.paths": ["file.example"], - }, + "paths": ["file.example"], + } }], elasticsearch={"host": self.get_elasticsearch_url()}) exit_code = self.run_beat(extra_args=["setup", "--template"]) @@ -47,3 +51,28 @@ def test_template(self): assert exit_code == 0 assert self.log_contains('Loaded index template') assert len(es.cat.templates(name='auditbeat-*', h='name')) > 0 + + @unittest.skipUnless(INTEGRATION_TESTS, "integration test") + def test_dashboards(self): + """ + Test that the dashboards can be loaded with `setup --dashboards` + """ + + kibana_dir = os.path.join(self.beat_path, "_meta", "kibana") + shutil.copytree(kibana_dir, os.path.join(self.working_dir, "kibana")) + + es = Elasticsearch([self.get_elasticsearch_url()]) + self.render_config_template( + modules=[{ + "name": "file_integrity", + "extras": { + "paths": ["file.example"], + } + }], + elasticsearch={"host": self.get_elasticsearch_url()}, + kibana={"host": self.get_kibana_url()}, + ) + exit_code = self.run_beat(extra_args=["setup", "--dashboards"]) + + assert exit_code == 0 + assert self.log_contains("Kibana dashboards successfully loaded.") diff --git a/vendor/github.com/elastic/beats/auditbeat/tests/system/test_file_integrity.py b/vendor/github.com/elastic/beats/auditbeat/tests/system/test_file_integrity.py new file mode 100644 index 00000000..8688a5bb --- /dev/null +++ b/vendor/github.com/elastic/beats/auditbeat/tests/system/test_file_integrity.py @@ -0,0 +1,189 @@ +import sys +import os +import shutil +import time +import unittest +from auditbeat import * +from beat.beat import INTEGRATION_TESTS + + +# Escapes a path to match what's printed in the logs +def escape_path(path): + return path.replace('\\', '\\\\') + + +def has_file(objs, path, sha1hash): + found = False + for obj in objs: + if 'file.path' in obj and 'hash.sha1' in obj \ + and obj['file.path'].lower() == path.lower() and obj['hash.sha1'] == sha1hash: + found = True + break + assert found, "File '{0}' with sha1sum '{1}' not found".format(path, sha1hash) + + +def has_dir(objs, path): + found = False + for obj in objs: + if 'file.path' in obj and obj['file.path'].lower() == path.lower() and obj['file.type'] == "dir": + found = True + break + assert found, "Dir '{0}' not found".format(path) + + +def file_events(objs, path, expected): + evts = set() + for obj in objs: + if 'file.path' in obj and 'event.action' in obj and obj['file.path'].lower() == path.lower(): + if type(obj['event.action']) == list: + evts = evts.union(set(obj['event.action'])) + else: + evts.add(obj['event.action']) + for wanted in set(expected): + assert wanted in evts, "Event {0} for path '{1}' not found (got {2})".format( + wanted, path, evts) + + +def wrap_except(expr): + try: + return expr() + except IOError: + return False + + +class Test(BaseTest): + + def wait_output(self, min_events): + self.wait_until(lambda: wrap_except(lambda: len(self.read_output()) >= min_events)) + # wait for the number of lines in the file to stay constant for a second + prev_lines = -1 + while True: + num_lines = self.output_lines() + if prev_lines < num_lines: + prev_lines = num_lines + time.sleep(1) + else: + break + + def test_non_recursive(self): + """ + file_integrity monitors watched directories (non recursive). + """ + + dirs = [self.temp_dir("auditbeat_test"), + self.temp_dir("auditbeat_test")] + + with PathCleanup(dirs): + self.render_config_template( + modules=[{ + "name": "file_integrity", + "extras": { + "paths": dirs, + "scan_at_start": False + } + }], + ) + proc = self.start_beat() + + # wait until the directories to watch are printed in the logs + # this happens when the file_integrity module starts. + # Case must be ignored under windows as capitalisation of paths + # may differ + self.wait_log_contains(escape_path(dirs[0]), max_timeout=30, ignore_case=True) + + file1 = os.path.join(dirs[0], 'file.txt') + self.create_file(file1, "hello world!") + + file2 = os.path.join(dirs[1], 'file2.txt') + self.create_file(file2, "Foo bar") + + # wait until file1 is reported before deleting. Otherwise the hash + # might not be calculated + self.wait_log_contains("\"path\": \"{0}\"".format(escape_path(file1)), ignore_case=True) + + os.unlink(file1) + + subdir = os.path.join(dirs[0], "subdir") + os.mkdir(subdir) + file3 = os.path.join(subdir, "other_file.txt") + self.create_file(file3, "not reported.") + + self.wait_log_contains("\"deleted\"") + self.wait_log_contains("\"path\": \"{0}\"".format(escape_path(subdir)), ignore_case=True) + self.wait_output(3) + + proc.check_kill_and_wait() + self.assert_no_logged_warnings() + + # Ensure all Beater stages are used. + assert self.log_contains("Setup Beat: auditbeat") + assert self.log_contains("auditbeat start running") + assert self.log_contains("auditbeat stopped") + + objs = self.read_output() + + has_file(objs, file1, "430ce34d020724ed75a196dfc2ad67c77772d169") + has_file(objs, file2, "d23be250530a24be33069572db67995f21244c51") + has_dir(objs, subdir) + + file_events(objs, file1, ['created', 'deleted']) + file_events(objs, file2, ['created']) + + # assert file inside subdir is not reported + assert self.log_contains(file3) is False + + def test_recursive(self): + """ + file_integrity monitors watched directories (recursive). + """ + + dirs = [self.temp_dir("auditbeat_test")] + + with PathCleanup(dirs): + self.render_config_template( + modules=[{ + "name": "file_integrity", + "extras": { + "paths": dirs, + "scan_at_start": False, + "recursive": True + } + }], + ) + proc = self.start_beat() + + # wait until the directories to watch are printed in the logs + # this happens when the file_integrity module starts + self.wait_log_contains(escape_path(dirs[0]), max_timeout=30, ignore_case=True) + self.wait_log_contains("\"recursive\": true") + + subdir = os.path.join(dirs[0], "subdir") + os.mkdir(subdir) + file1 = os.path.join(subdir, "file.txt") + self.create_file(file1, "hello world!") + + subdir2 = os.path.join(subdir, "other") + os.mkdir(subdir2) + file2 = os.path.join(subdir2, "more.txt") + self.create_file(file2, "") + + self.wait_log_contains("\"path\": \"{0}\"".format(escape_path(file2)), ignore_case=True) + self.wait_output(4) + + proc.check_kill_and_wait() + self.assert_no_logged_warnings() + + # Ensure all Beater stages are used. + assert self.log_contains("Setup Beat: auditbeat") + assert self.log_contains("auditbeat start running") + assert self.log_contains("auditbeat stopped") + + objs = self.read_output() + + has_file(objs, file1, "430ce34d020724ed75a196dfc2ad67c77772d169") + has_file(objs, file2, "da39a3ee5e6b4b0d3255bfef95601890afd80709") + has_dir(objs, subdir) + has_dir(objs, subdir2) + + file_events(objs, file1, ['created']) + file_events(objs, file2, ['created']) diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/.travis/setup.sh b/vendor/github.com/elastic/beats/deploy/kubernetes/.travis/setup.sh index 7de6f3ad..1e2bb57a 100755 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/.travis/setup.sh +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/.travis/setup.sh @@ -3,59 +3,13 @@ set -x -# set docker0 to promiscuous mode -sudo ip link set docker0 promisc on +export CHANGE_MINIKUBE_NONE_USER=true -# install etcd -wget https://github.com/coreos/etcd/releases/download/$TRAVIS_ETCD_VERSION/etcd-$TRAVIS_ETCD_VERSION-linux-amd64.tar.gz -tar xzf etcd-$TRAVIS_ETCD_VERSION-linux-amd64.tar.gz -sudo mv etcd-$TRAVIS_ETCD_VERSION-linux-amd64/etcd /usr/local/bin/etcd -rm etcd-$TRAVIS_ETCD_VERSION-linux-amd64.tar.gz -rm -rf etcd-$TRAVIS_ETCD_VERSION-linux-amd64 +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$TRAVIS_K8S_VERSION/bin/linux/amd64/kubectl && \ + chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo minikube https://storage.googleapis.com/minikube/releases/$TRAVIS_MINIKUBE_VERSION/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ +sudo minikube start --vm-driver=none --kubernetes-version=$TRAVIS_K8S_VERSION --logtostderr +minikube update-context +JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'; \ + until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do sleep 1; done -# download kubectl -wget https://storage.googleapis.com/kubernetes-release/release/$TRAVIS_KUBE_VERSION/bin/linux/amd64/kubectl -chmod +x kubectl -sudo mv kubectl /usr/local/bin/kubectl - -# download kubernetes -git clone https://github.com/kubernetes/kubernetes $HOME/kubernetes - -# install cfssl -go get -u github.com/cloudflare/cfssl/cmd/... - -pushd $HOME/kubernetes - git checkout $TRAVIS_KUBE_VERSION - kubectl config set-credentials myself --username=admin --password=admin - kubectl config set-context local --cluster=local --user=myself - kubectl config set-cluster local --server=http://localhost:8080 - kubectl config use-context local - - # start kubernetes in the background - sudo PATH=$PATH:/home/travis/.gimme/versions/go1.7.linux.amd64/bin/go \ - KUBE_ENABLE_CLUSTER_DNS=true \ - hack/local-up-cluster.sh & -popd - -# Wait until kube is up and running -TIMEOUT=0 -TIMEOUT_COUNT=800 -until $(curl --output /dev/null --silent http://localhost:8080) || [ $TIMEOUT -eq $TIMEOUT_COUNT ]; do - echo "Kube is not up yet" - let TIMEOUT=TIMEOUT+1 - sleep 1 -done - -if [ $TIMEOUT -eq $TIMEOUT_COUNT ]; then - echo "Kubernetes is not up and running" - exit 1 -fi - -echo "Kubernetes is deployed and reachable" - -# Try and sleep before issuing chown. Currently, Kubernetes is started by -# a command that is run in the background. Technically Kubernetes could be -# up and running, but those files might not exist yet as the previous command -# could create them after Kube starts successfully. -sleep 30 -sudo chown -R $USER:$USER $HOME/.kube diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat-kubernetes.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat-kubernetes.yaml index a8b08b7b..49212246 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat-kubernetes.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat-kubernetes.yaml @@ -6,14 +6,13 @@ metadata: namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" data: filebeat.yml: |- filebeat.config: - prospectors: - # Mounted `filebeat-prospectors` configmap: - path: ${path.config}/prospectors.d/*.yml - # Reload prospectors configs as they change: + inputs: + # Mounted `filebeat-inputs` configmap: + path: ${path.config}/inputs.d/*.yml + # Reload inputs configs as they change: reload.enabled: false modules: path: ${path.config}/modules.d/*.yml @@ -34,11 +33,10 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: filebeat-prospectors + name: filebeat-inputs namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" data: kubernetes.yml: |- - type: docker @@ -55,19 +53,17 @@ metadata: namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" spec: serviceAccountName: filebeat terminationGracePeriodSeconds: 30 containers: - name: filebeat - image: docker.elastic.co/beats/filebeat:6.2.3 + image: docker.elastic.co/beats/filebeat:6.3.2 args: [ "-c", "/etc/filebeat.yml", "-e", @@ -98,8 +94,8 @@ spec: mountPath: /etc/filebeat.yml readOnly: true subPath: filebeat.yml - - name: prospectors - mountPath: /usr/share/filebeat/prospectors.d + - name: inputs + mountPath: /usr/share/filebeat/inputs.d readOnly: true - name: data mountPath: /usr/share/filebeat/data @@ -114,10 +110,13 @@ spec: - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - - name: prospectors + - name: inputs configMap: defaultMode: 0600 - name: filebeat-prospectors + name: filebeat-inputs + # We set an `emptyDir` here to ensure the manifest will deploy correctly. + # It's recommended to change this to a `hostPath` folder, to ensure internal data + # files survive pod changes (ie: version upgrade) - name: data emptyDir: {} --- diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/README.md b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/README.md index e5e8a70b..f384411e 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/README.md +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/README.md @@ -8,7 +8,7 @@ By deploying filebeat as a [DaemonSet](https://kubernetes.io/docs/concepts/workl we ensure we get a running filebeat daemon on each node of the cluster. Docker logs host folder (`/var/lib/docker/containers`) is mounted on the -filebeat container. Filebeat will start a prospector for these files and start +filebeat container. Filebeat will start an input for these files and start harvesting them as they appear. Everything is deployed under `kube-system` namespace, you can change that by diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-configmap.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-configmap.yaml index ab0321a0..ca1d0329 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-configmap.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-configmap.yaml @@ -6,14 +6,13 @@ metadata: namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" data: filebeat.yml: |- filebeat.config: - prospectors: - # Mounted `filebeat-prospectors` configmap: - path: ${path.config}/prospectors.d/*.yml - # Reload prospectors configs as they change: + inputs: + # Mounted `filebeat-inputs` configmap: + path: ${path.config}/inputs.d/*.yml + # Reload inputs configs as they change: reload.enabled: false modules: path: ${path.config}/modules.d/*.yml @@ -34,11 +33,10 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: filebeat-prospectors + name: filebeat-inputs namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" data: kubernetes.yml: |- - type: docker diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-daemonset.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-daemonset.yaml index 9ffb06d4..a04fceea 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-daemonset.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/filebeat/filebeat-daemonset.yaml @@ -5,13 +5,11 @@ metadata: namespace: kube-system labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: filebeat - kubernetes.io/cluster-service: "true" spec: serviceAccountName: filebeat terminationGracePeriodSeconds: 30 @@ -48,8 +46,8 @@ spec: mountPath: /etc/filebeat.yml readOnly: true subPath: filebeat.yml - - name: prospectors - mountPath: /usr/share/filebeat/prospectors.d + - name: inputs + mountPath: /usr/share/filebeat/inputs.d readOnly: true - name: data mountPath: /usr/share/filebeat/data @@ -64,9 +62,12 @@ spec: - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - - name: prospectors + - name: inputs configMap: defaultMode: 0600 - name: filebeat-prospectors + name: filebeat-inputs + # We set an `emptyDir` here to ensure the manifest will deploy correctly. + # It's recommended to change this to a `hostPath` folder, to ensure internal data + # files survive pod changes (ie: version upgrade) - name: data emptyDir: {} diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat-kubernetes.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat-kubernetes.yaml index 46f28220..fac0a7f9 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat-kubernetes.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat-kubernetes.yaml @@ -6,7 +6,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: metricbeat.yml: |- metricbeat.config.modules: @@ -33,7 +32,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: system.yml: |- - module: system @@ -80,20 +78,19 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: serviceAccountName: metricbeat terminationGracePeriodSeconds: 30 hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet containers: - name: metricbeat - image: docker.elastic.co/beats/metricbeat:6.2.3 + image: docker.elastic.co/beats/metricbeat:6.3.2 args: [ "-c", "/etc/metricbeat.yml", "-e", @@ -158,6 +155,9 @@ spec: configMap: defaultMode: 0600 name: metricbeat-daemonset-modules + # We set an `emptyDir` here to ensure the manifest will deploy correctly. + # It's recommended to change this to a `hostPath` folder, to ensure internal data + # files survive pod changes (ie: version upgrade) - name: data emptyDir: {} --- @@ -168,7 +168,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: # This module requires `kube-state-metrics` up and running under `kube-system` namespace kubernetes.yml: |- @@ -192,17 +191,16 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: + serviceAccountName: metricbeat containers: - name: metricbeat - image: docker.elastic.co/beats/metricbeat:6.2.3 + image: docker.elastic.co/beats/metricbeat:6.3.2 args: [ "-c", "/etc/metricbeat.yml", "-e", diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset-configmap.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset-configmap.yaml index c4b0fb5a..1af92f4b 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset-configmap.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset-configmap.yaml @@ -6,7 +6,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: metricbeat.yml: |- metricbeat.config.modules: @@ -33,7 +32,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: system.yml: |- - module: system diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset.yaml index c5d99f26..34301262 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-daemonset.yaml @@ -6,17 +6,16 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: serviceAccountName: metricbeat terminationGracePeriodSeconds: 30 hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet containers: - name: metricbeat image: docker.elastic.co/beats/metricbeat:%VERSION% @@ -84,5 +83,8 @@ spec: configMap: defaultMode: 0600 name: metricbeat-daemonset-modules + # We set an `emptyDir` here to ensure the manifest will deploy correctly. + # It's recommended to change this to a `hostPath` folder, to ensure internal data + # files survive pod changes (ie: version upgrade) - name: data emptyDir: {} diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment-configmap.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment-configmap.yaml index b526cb71..eb0f672e 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment-configmap.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment-configmap.yaml @@ -5,7 +5,6 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" data: # This module requires `kube-state-metrics` up and running under `kube-system` namespace kubernetes.yml: |- diff --git a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment.yaml b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment.yaml index baf77ab8..6601cdc8 100644 --- a/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment.yaml +++ b/vendor/github.com/elastic/beats/deploy/kubernetes/metricbeat/metricbeat-deployment.yaml @@ -6,14 +6,13 @@ metadata: namespace: kube-system labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: template: metadata: labels: k8s-app: metricbeat - kubernetes.io/cluster-service: "true" spec: + serviceAccountName: metricbeat containers: - name: metricbeat image: docker.elastic.co/beats/metricbeat:%VERSION% diff --git a/vendor/github.com/elastic/beats/dev-tools/cherrypick_pr b/vendor/github.com/elastic/beats/dev-tools/cherrypick_pr index a148622c..c648d6a1 100755 --- a/vendor/github.com/elastic/beats/dev-tools/cherrypick_pr +++ b/vendor/github.com/elastic/beats/dev-tools/cherrypick_pr @@ -2,6 +2,7 @@ """Cherry pick and backport a PR""" import sys +import os import argparse from os.path import expanduser import re @@ -57,6 +58,8 @@ def main(): parser.add_argument("--create_pr", action="store_true", help="Create a PR using the Github API " + "(requires token in ~/.elastic/github.token)") + parser.add_argument("--diff", action="store_true", + help="Display the diff before pushing the PR") args = parser.parse_args() print(args) @@ -97,6 +100,12 @@ def main(): print("No commit to push") return 1 + if args.diff: + call("git diff {}".format(args.to_branch), shell=True) + if raw_input("Continue? [y/n]: ") != "y": + print("Aborting cherry-pick.") + return 1 + print("Ready to push branch.") remote = raw_input("To which remote should I push? (your fork): ") call("git push {} :{} > /dev/null".format(remote, tmp_branch), @@ -140,9 +149,23 @@ def main(): # remove needs backport label from the original PR session.delete(base + "/issues/{}/labels/needs_backport".format(args.pr_number)) + # get version and set a version label on the original PR + version = get_version(os.getcwd()) + if version: + session.post( + base + "/issues/{}/labels".format(args.pr_number), json=["v" + version]) + print("\nDone. PR created: {}".format(new_pr["html_url"])) print("Please go and check it and add the review tags") +def get_version(beats_dir): + pattern = re.compile(r'(const\s|)\w*(v|V)ersion\s=\s"(?P.*)"') + with open(os.path.join(beats_dir, "libbeat/version/version.go"), "r") as f: + for line in f: + match = pattern.match(line) + if match: + return match.group('version') + if __name__ == "__main__": sys.exit(main()) diff --git a/vendor/github.com/elastic/beats/dev-tools/deploy b/vendor/github.com/elastic/beats/dev-tools/deploy index f09ae357..812a0034 100755 --- a/vendor/github.com/elastic/beats/dev-tools/deploy +++ b/vendor/github.com/elastic/beats/dev-tools/deploy @@ -16,9 +16,9 @@ def main(): check_call("make clean", shell=True) print("Done building Docker images.") if args.no_snapshot: - check_call("make SNAPSHOT=no package", shell=True) + check_call("make SNAPSHOT=no package-all", shell=True) else: - check_call("make SNAPSHOT=yes package", shell=True) + check_call("make SNAPSHOT=yes package-all", shell=True) print("All done") if __name__ == "__main__": diff --git a/vendor/github.com/elastic/beats/dev-tools/generate_notice.py b/vendor/github.com/elastic/beats/dev-tools/generate_notice.py index f7925e1c..09a4443c 100644 --- a/vendor/github.com/elastic/beats/dev-tools/generate_notice.py +++ b/vendor/github.com/elastic/beats/dev-tools/generate_notice.py @@ -44,33 +44,37 @@ def read_versions(vendor): return libs -def gather_dependencies(vendor_dirs): +def gather_dependencies(vendor_dirs, overrides=None): dependencies = {} # lib_path -> [array of lib] for vendor in vendor_dirs: libs = read_versions(vendor) # walk looking for LICENSE files for root, dirs, filenames in os.walk(vendor): - for filename in sorted(filenames): - if filename.startswith("LICENSE"): - lib_path = get_library_path(root) - lib_search = [l for l in libs if l["path"].startswith(lib_path)] - if len(lib_search) == 0: - print("WARNING: No version information found for: {}".format(lib_path)) - lib = {"path": lib_path} - else: - lib = lib_search[0] - lib["license_file"] = os.path.join(root, filename) - - lib["license_contents"] = read_file(lib["license_file"]) - lib["license_summary"] = detect_license_summary(lib["license_contents"]) - if lib["license_summary"] == "UNKNOWN": - print("WARNING: Unknown license for: {}".format(lib_path)) - - if lib_path not in dependencies: - dependencies[lib_path] = [lib] - else: - dependencies[lib_path].append(lib) + licenses = get_licenses(root) + for filename in licenses: + lib_path = get_library_path(root) + lib_search = [l for l in libs if l["path"].startswith(lib_path)] + if len(lib_search) == 0: + print("WARNING: No version information found for: {}".format(lib_path)) + lib = {"path": lib_path} + else: + lib = lib_search[0] + lib["license_file"] = os.path.join(root, filename) + + lib["license_contents"] = read_file(lib["license_file"]) + lib["license_summary"] = detect_license_summary(lib["license_contents"]) + if lib["license_summary"] == "UNKNOWN": + print("WARNING: Unknown license for: {}".format(lib_path)) + + revision = overrides.get(lib_path, {}).get("revision") + if revision: + lib["revision"] = revision + + if lib_path not in dependencies: + dependencies[lib_path] = [lib] + else: + dependencies[lib_path].append(lib) # don't walk down into another vendor dir if "vendor" in dirs: @@ -78,6 +82,61 @@ def gather_dependencies(vendor_dirs): return dependencies +def get_licenses(folder): + """ + Get a list of license files from a given directory. + """ + licenses = [] + for filename in sorted(os.listdir(folder)): + if filename.startswith("LICENSE") and "docs" not in filename: + licenses.append(filename) + elif filename.startswith("APLv2"): # gorhill/cronexpr + licenses.append(filename) + return licenses + + +def has_license(folder): + """ + Checks if a particular repo has a license files. + + There are two cases accepted: + * The folder contains a LICENSE + * The folder only contains subdirectories AND all these + subdirectories contain a LICENSE + """ + if len(get_licenses(folder)) > 0: + return True, "" + + for subdir in os.listdir(folder): + if not os.path.isdir(os.path.join(folder, subdir)): + return False, folder + if len(get_licenses(os.path.join(folder, subdir))) == 0: + return False, os.path.join(folder, subdir) + return True, "" + + +def check_all_have_license_files(vendor_dirs): + """ + Checks that everything in the vendor folders has a license one way + or the other. This doesn't collect the licenses, because the code that + collects the licenses needs to walk the full tree. This one makes sure + that every folder in the `vendor` directories has at least one license. + """ + issues = [] + for vendor in vendor_dirs: + for root, dirs, filenames in os.walk(vendor): + if root.count(os.sep) - vendor.count(os.sep) == 2: # two levels deep + # Two level deep means folders like `github.com/elastic`. + # look for the license in root but also one level up + ok, issue = has_license(root) + if not ok: + print("No license in: {}".format(issue)) + issues.append(issue) + if len(issues) > 0: + raise Exception("I have found licensing issues in the following folders: {}" + .format(issues)) + + def write_notice_file(f, beat, copyright, dependencies): now = datetime.datetime.now() @@ -137,20 +196,27 @@ def get_url(repo): return "https://github.com/{}/{}".format(words[1], words[2]) -def create_notice(filename, beat, copyright, vendor_dirs, csvfile): - dependencies = gather_dependencies(vendor_dirs) +def create_notice(filename, beat, copyright, vendor_dirs, csvfile, overrides=None): + dependencies = gather_dependencies(vendor_dirs, overrides=overrides) if not csvfile: with open(filename, "w+") as f: write_notice_file(f, beat, copyright, dependencies) + print("Available at {}".format(filename)) else: with open(csvfile, "wb") as f: csvwriter = csv.writer(f) write_csv_file(csvwriter, dependencies) + print("Available at {}".format(csvfile)) + return dependencies APACHE2_LICENSE_TITLES = [ "Apache License Version 2.0", - "Apache License, Version 2.0" + "Apache License, Version 2.0", + re.sub(r"\s+", " ", """Apache License + ============== + + _Version 2.0, January 2004_"""), ] MIT_LICENSES = [ @@ -166,7 +232,7 @@ def create_notice(filename, beat, copyright, vendor_dirs, csvfile): """), re.sub(r"\s+", " ", """Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies.""") +copyright notice and this permission notice appear in all copies."""), ] BSD_LICENSE_CONTENTS = [ @@ -209,6 +275,8 @@ def create_notice(filename, beat, copyright, vendor_dirs, csvfile): def detect_license_summary(content): # replace all white spaces with a single space content = re.sub(r"\s+", ' ', content) + # replace smart quotes with less intelligent ones + content = content.replace(b'\xe2\x80\x9c', '"').replace(b'\xe2\x80\x9d', '"') if any(sentence in content[0:1000] for sentence in APACHE2_LICENSE_TITLES): return "Apache-2.0" if any(sentence in content[0:1000] for sentence in MIT_LICENSES): @@ -230,6 +298,14 @@ def detect_license_summary(content): return "UNKNOWN" +ACCEPTED_LICENSES = [ + "Apache-2.0", + "MIT", + "BSD-4-Clause", + "BSD-3-Clause", + "BSD-2-Clause", + "MPL-2.0", +] SKIP_NOTICE = [] if __name__ == "__main__": @@ -246,6 +322,9 @@ def detect_license_summary(content): help="Output to a csv file") parser.add_argument("-e", "--excludes", default=["dev-tools", "build"], help="List of top directories to exclude") + # no need to be generic for now, no other transitive dependency information available + parser.add_argument("--beats-origin", type=argparse.FileType('r'), + help="path to beats vendor.json") parser.add_argument("-s", "--skip-notice", default=[], help="List of NOTICE files to skip") args = parser.parse_args() @@ -273,7 +352,18 @@ def detect_license_summary(content): if exclude in dirs: dirs.remove(exclude) - print("Get the licenses available from {}".format(vendor_dirs)) - create_notice(notice, args.beat, args.copyright, vendor_dirs, args.csvfile) + overrides = {} # revision overrides only for now + if args.beats_origin: + govendor = json.load(args.beats_origin) + overrides = {package['path']: package for package in govendor["package"]} - print("Available at {}".format(notice)) + print("Get the licenses available from {}".format(vendor_dirs)) + check_all_have_license_files(vendor_dirs) + dependencies = create_notice(notice, args.beat, args.copyright, vendor_dirs, args.csvfile, overrides=overrides) + + # check that all licenses are accepted + for _, deps in dependencies.items(): + for dep in deps: + if dep["license_summary"] not in ACCEPTED_LICENSES: + raise Exception("Dependency {} has invalid license {}" + .format(dep["path"], dep["license_summary"])) diff --git a/vendor/github.com/elastic/beats/dev-tools/jenkins_ci.ps1 b/vendor/github.com/elastic/beats/dev-tools/jenkins_ci.ps1 index 35e7ee8d..4db34c03 100755 --- a/vendor/github.com/elastic/beats/dev-tools/jenkins_ci.ps1 +++ b/vendor/github.com/elastic/beats/dev-tools/jenkins_ci.ps1 @@ -36,13 +36,14 @@ exec { go get -u github.com/jstemmer/go-junit-report } echo "Building $env:beat" exec { go build } "Build FAILURE" +# always build the libbeat fields +cp ..\libbeat\_meta\fields.common.yml ..\libbeat\_meta\fields.generated.yml +cat ..\libbeat\processors\*\_meta\fields.yml | Out-File -append -encoding UTF8 -filepath ..\libbeat\_meta\fields.generated.yml +cp ..\libbeat\_meta\fields.generated.yml ..\libbeat\fields.yml + if ($env:beat -eq "metricbeat") { cp .\_meta\fields.common.yml .\_meta\fields.generated.yml python .\scripts\fields_collector.py | out-file -append -encoding UTF8 -filepath .\_meta\fields.generated.yml -} elseif ($env:beat -eq "libbeat") { - cp .\_meta\fields.common.yml .\_meta\fields.generated.yml - cat processors\*\_meta\fields.yml | Out-File -append -encoding UTF8 -filepath .\_meta\fields.generated.yml - cp .\_meta\fields.generated.yml .\fields.yml } echo "Unit testing $env:beat" diff --git a/vendor/github.com/elastic/beats/dev-tools/open_pr b/vendor/github.com/elastic/beats/dev-tools/open_pr index b98599ca..1bde2d38 100755 --- a/vendor/github.com/elastic/beats/dev-tools/open_pr +++ b/vendor/github.com/elastic/beats/dev-tools/open_pr @@ -2,6 +2,7 @@ """Open a PR from the current branch""" import sys +import os import argparse import requests import re @@ -54,6 +55,11 @@ def main(): if args.wip: lables += "in progress" + # get version and set a version label on the original PR + version = get_version(os.getcwd()) + if version: + labels.append("v" + version) + print("Branch: {}".format(args.branch)) print("Remote: {}".format(args.remote)) print("Local branch: {}".format(local_branch)) @@ -98,5 +104,14 @@ def main(): print("Please go and review it for the message and labels.") +def get_version(beats_dir): + pattern = re.compile(r'(const\s|)\w*(v|V)ersion\s=\s"(?P.*)"') + with open(os.path.join(beats_dir, "libbeat/version/version.go"), "r") as f: + for line in f: + match = pattern.match(line) + if match: + return match.group('version') + + if __name__ == "__main__": sys.exit(main()) diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/Makefile b/vendor/github.com/elastic/beats/dev-tools/packer/Makefile index 542e0171..1c157d5d 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/Makefile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/Makefile @@ -12,32 +12,32 @@ beat_abspath=${BEATS_GOPATH}/src/${BEAT_PATH} %/deb: ${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64 fpm-image echo Creating DEB packages for $(@D) - ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh - ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh + ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh + ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh %/rpm: ${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64 fpm-image echo Creating RPM packages for $(@D) - ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh - ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh + ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh + ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh %/darwin: echo Creating Darwin packages for $(@D) - ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/darwin/build.sh + ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/darwin/build.sh %/win: echo Creating Darwin packages for $(@D) - ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh - ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh + ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh + ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh %/bin: echo Creating Linux packages for $(@D) - ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh - ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh + ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh + ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} UPLOAD_DIR=${UPLOAD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh .PHONY: package-dashboards package-dashboards: echo Creating the Dashboards package - BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/dashboards/build.sh + UPLOAD_DIR=${UPLOAD_DIR} BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/dashboards/build.sh .PHONY: deps deps: @@ -61,11 +61,11 @@ go-daemon-image: ${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64: docker run --rm -v ${BUILD_DIR}:/build tudorg/go-daemon -${BUILD_DIR}/upload: - mkdir -p ${BUILD_DIR}/upload +${UPLOAD_DIR}: + mkdir -p ${UPLOAD_DIR} -${BUILD_DIR}/upload/build_id.txt: - echo $(BUILDID) > ${BUILD_DIR}/upload/build_id.txt +${UPLOAD_DIR}/build_id.txt: + echo $(BUILDID) > ${UPLOAD_DIR}/build_id.txt # Build the image required for package-upload. .PHONY: deb-rpm-s3 diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/Dockerfile b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/Dockerfile index 9d87bb57..ce4f8922 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/Dockerfile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/Dockerfile @@ -1,4 +1,4 @@ -FROM tudorg/xgo-deb7-1.9.2 +FROM tudorg/xgo-deb7-1.9.4 MAINTAINER Tudor Golubenco diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/gopacket_pcap.patch b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/gopacket_pcap.patch index 12ed61d1..cc7592b7 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/gopacket_pcap.patch +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/beats-builder/gopacket_pcap.patch @@ -7,10 +7,10 @@ index f5612e6..0c77efa 100644 /* -#cgo linux LDFLAGS: -lpcap -+#cgo linux,386 CFLAGS: -I /libpcap/i386/usr/include/ -+#cgo linux,386 LDFLAGS: /libpcap/i386/usr/lib/libpcap.a -+#cgo linux,amd64 CFLAGS: -I /libpcap/amd64/libpcap-1.8.1 -+#cgo linux,amd64 LDFLAGS: /libpcap/amd64/libpcap-1.8.1/libpcap.a ++#cgo linux,386 CFLAGS: -I/libpcap/i386/usr/include/ ++#cgo linux,386 LDFLAGS: -L/libpcap/i386/usr/lib/ -lpcap ++#cgo linux,amd64 CFLAGS: -I/libpcap/amd64/libpcap-1.8.1 ++#cgo linux,amd64 LDFLAGS: -L/libpcap/amd64/libpcap-1.8.1 -lpcap #cgo freebsd LDFLAGS: -lpcap #cgo openbsd LDFLAGS: -lpcap #cgo darwin LDFLAGS: -lpcap @@ -18,9 +18,9 @@ index f5612e6..0c77efa 100644 -#cgo windows CFLAGS: -I C:/WpdPack/Include -#cgo windows,386 LDFLAGS: -L C:/WpdPack/Lib -lwpcap -#cgo windows,amd64 LDFLAGS: -L C:/WpdPack/Lib/x64 -lwpcap -+#cgo windows CFLAGS: -I /libpcap/win/WpdPack/Include -+#cgo windows,386 LDFLAGS: -L /libpcap/win/WpdPack/Lib -lwpcap -+#cgo windows,amd64 LDFLAGS: -L /libpcap/win/WpdPack/Lib/x64 -lwpcap ++#cgo windows CFLAGS: -I/libpcap/win/WpdPack/Include ++#cgo windows,386 LDFLAGS: -L/libpcap/win/WpdPack/Lib -lwpcap ++#cgo windows,amd64 LDFLAGS: -L/libpcap/win/WpdPack/Lib/x64 -lwpcap #include #include diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/build.sh index 7eee43ce..16676c29 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/build.sh @@ -2,5 +2,5 @@ cp -r ../../../vendor/gopkg.in/yaml.v2 beats-builder/yaml.v2 cp -r ../../../vendor/github.com/tsg/gotpl beats-builder/gotpl docker build --rm=true -t tudorg/xgo-deb7-base base/ && \ - docker build --rm=true -t tudorg/xgo-deb7-1.9.2 go-1.9.2/ && + docker build --rm=true -t tudorg/xgo-deb7-1.9.4 go-1.9.4/ && docker build --rm=true -t tudorg/beats-builder-deb7 beats-builder diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.2/Dockerfile b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.4/Dockerfile similarity index 69% rename from vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.2/Dockerfile rename to vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.4/Dockerfile index b74bb87a..2db357c9 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.2/Dockerfile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image-deb7/go-1.9.4/Dockerfile @@ -1,4 +1,4 @@ -# Go cross compiler (xgo): Go 1.9.2 layer +# Go cross compiler (xgo): Go 1.9.4 layer # Copyright (c) 2014 Péter Szilágyi. All rights reserved. # # Released under the MIT license. @@ -9,7 +9,7 @@ MAINTAINER Tudor Golubenco # Configure the root Go distribution and bootstrap based on it RUN \ - export ROOT_DIST="https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz" && \ - export ROOT_DIST_SHA1="94c889e039e3d2e94ed95e8f8cb747c5bc1c2b58" && \ + export ROOT_DIST="https://storage.googleapis.com/golang/go1.9.4.linux-amd64.tar.gz" && \ + export ROOT_DIST_SHA1="ed1bd37c356338a5a04923c183931a96687f202e" && \ \ $BOOTSTRAP_PURE diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/Dockerfile b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/Dockerfile index ceadbb30..81ea1eb4 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/Dockerfile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/Dockerfile @@ -19,7 +19,10 @@ RUN chmod +x $FETCH # Make sure apt-get is up to date and dependent packages are installed +# XXX: The first line is a workaround for the "Sum hash mismatch" error, from here: +# https://askubuntu.com/questions/760574/sudo-apt-get-update-failes-due-to-hash-sum-mismatch RUN \ + apt-get clean && \ apt-get update && \ apt-get install -y automake autogen build-essential ca-certificates \ gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-dev-armel-cross \ diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/build.sh index 7c58e63d..50adedb1 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/base/build.sh @@ -105,7 +105,14 @@ fi if [ "$FLAG_V" == "true" ]; then V=-v; fi if [ "$FLAG_RACE" == "true" ]; then R=-race; fi -if [ "$STATIC" == "true" ]; then LDARGS=--ldflags\ \'-extldflags\ \"-static\"\'; fi + +# exactly one -ldflags allowed +LDFLAGS_STATIC="" +if [ "$STATIC" == "true" ]; then LDFLAGS_STATIC='-extldflags "-static"'; fi +NOW=$(date -u '+%Y-%m-%dT%H:%M:%SZ') +LDFLAGS_VERSION="-X=github.com/elastic/beats/libbeat/version.buildTime=${NOW} -X=github.com/elastic/beats/libbeat/version.commit=${BUILDID}" +LDFLAGS_VENDOR_VERSION="-X=${BEAT_PATH}/vendor/github.com/elastic/beats/libbeat/version.buildTime=${NOW} -X=${BEAT_PATH}/vendor/github.com/elastic/beats/libbeat/version.commit=${BUILDID}" +LDFLAGS="${LDFLAGS_VERSION} ${LDFLAGS_VENDOR_VERSION} ${LDFLAGS_STATIC}" if [ -n $BEFORE_BUILD ]; then chmod +x /scripts/$BEFORE_BUILD @@ -132,20 +139,20 @@ for TARGET in $TARGETS; do export PKG_CONFIG_PATH=/usr/aarch64-linux-gnu/lib/pkgconfig GOOS=linux GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go get -d ./$PACK - sh -c "GOOS=linux GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go build $V $R $LDARGS -o /build/$NAME-linux-amd64$R ./$PACK" + sh -c "GOOS=linux GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go build $V $R -ldflags=\"${LDFLAGS}\" -o /build/$NAME-linux-amd64$R ./$PACK" fi if ([ $XGOOS == "." ] || [ $XGOOS == "linux" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "386" ]); then echo "Compiling $PACK for linux/386..." CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 HOST=i686-linux PREFIX=/usr/local $BUILD_DEPS /deps $LIST_DEPS GOOS=linux GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go get -d ./$PACK - sh -c "GOOS=linux GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go build $V $R $LDARGS -o /build/$NAME-linux-386$R ./$PACK" + sh -c "GOOS=linux GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go build $V $R -ldflags=\"${LDFLAGS}\" -o /build/$NAME-linux-386$R ./$PACK" fi if ([ $XGOOS == "." ] || [ $XGOOS == "linux" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "arm" ]); then echo "Compiling $PACK for linux/arm..." CC=arm-linux-gnueabi-gcc CXX=rm-linux-gnueabi-g++ HOST=arm-linux PREFIX=/usr/local/arm $BUILD_DEPS /deps $LIST_DEPS CC=arm-linux-gnueabi-gcc CXX=rm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=${CGO_ENABLED} GOARM=5 go get -d ./$PACK - CC=arm-linux-gnueabi-gcc CXX=rm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=${CGO_ENABLED} GOARM=5 go build $V -o /build/$NAME-linux-arm ./$PACK + CC=arm-linux-gnueabi-gcc CXX=rm-linux-gnueabi-g++ GOOS=linux GOARCH=arm CGO_ENABLED=${CGO_ENABLED} GOARM=5 go build $V -ldflags="${LDFLAGS}" -o /build/$NAME-linux-arm ./$PACK fi # Check and build for Windows targets @@ -169,7 +176,7 @@ for TARGET in $TARGETS; do export PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go get -d ./$PACK - CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go build $V $R -o /build/$NAME-windows-amd64$R.exe ./$PACK + CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go build $V $R -ldflags="${LDFLAGS}" -o /build/$NAME-windows-amd64$R.exe ./$PACK fi if [ $XGOARCH == "." ] || [ $XGOARCH == "386" ]; then @@ -178,7 +185,7 @@ for TARGET in $TARGETS; do export PKG_CONFIG_PATH=/usr/i686-w64-mingw32/lib/pkgconfig CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go get -d ./$PACK - CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go build $V -o /build/$NAME-windows-386.exe ./$PACK + CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ GOOS=windows GOARCH=386 CGO_ENABLED=${CGO_ENABLED} CGO_CFLAGS="$CGO_NTDEF" CGO_CXXFLAGS="$CGO_NTDEF" go build $V -ldflags="${LDFLAGS}" -o /build/$NAME-windows-386.exe ./$PACK fi fi @@ -187,13 +194,13 @@ for TARGET in $TARGETS; do echo "Compiling $PACK for darwin/amd64..." CC=o64-clang CXX=o64-clang++ HOST=x86_64-apple-darwin10 PREFIX=/usr/local $BUILD_DEPS /deps $LIST_DEPS CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go get -d ./$PACK - CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go build -ldflags=-s $V $R -o /build/$NAME-darwin-amd64$R ./$PACK + CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go build $V $R -ldflags="-s ${LDFLAGS}" -o /build/$NAME-darwin-amd64$R ./$PACK fi if ([ $XGOOS == "." ] || [ $XGOOS == "darwin" ]) && ([ $XGOARCH == "." ] || [ $XGOARCH == "386" ]); then echo "Compiling for darwin/386..." CC=o32-clang CXX=o32-clang++ HOST=i386-apple-darwin10 PREFIX=/usr/local $BUILD_DEPS /deps $LIST_DEPS CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go get -d ./$PACK - CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go build $V -o /build/$NAME-darwin-386 ./$PACK + CC=o32-clang CXX=o32-clang++ GOOS=darwin GOARCH=386 CGO_ENABLED=${CGO_ENABLED} go build $V -ldflags="${LDFLAGS}" -o /build/$NAME-darwin-386 ./$PACK fi done diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/beats-builder/Dockerfile b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/beats-builder/Dockerfile index c1c0dfb0..8c0bd2c6 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/beats-builder/Dockerfile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/beats-builder/Dockerfile @@ -1,4 +1,4 @@ -FROM tudorg/xgo-1.9.2 +FROM tudorg/xgo-1.9.4 MAINTAINER Tudor Golubenco diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/build.sh index f5ba7887..c4b48e5a 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/build.sh @@ -3,5 +3,5 @@ cp -r ../../../vendor/gopkg.in/yaml.v2 beats-builder/yaml.v2 cp -r ../../../vendor/github.com/tsg/gotpl beats-builder/gotpl docker pull tudorg/xgo-base:v20180222 && \ - docker build --rm=true -t tudorg/xgo-1.9.2 go-1.9.2/ && + docker build --rm=true -t tudorg/xgo-1.9.4 go-1.9.4/ && docker build --rm=true -t tudorg/beats-builder beats-builder diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.2/Dockerfile b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.4/Dockerfile similarity index 69% rename from vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.2/Dockerfile rename to vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.4/Dockerfile index 28a60254..c3ed621a 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.2/Dockerfile +++ b/vendor/github.com/elastic/beats/dev-tools/packer/docker/xgo-image/go-1.9.4/Dockerfile @@ -1,4 +1,4 @@ -# Go cross compiler (xgo): Go 1.9.2 layer +# Go cross compiler (xgo): Go 1.9.4 layer # Copyright (c) 2014 Péter Szilágyi. All rights reserved. # # Released under the MIT license. @@ -9,7 +9,7 @@ MAINTAINER Tudor Golubenco # Configure the root Go distribution and bootstrap based on it RUN \ - export ROOT_DIST="https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz" && \ - export ROOT_DIST_SHA1="94c889e039e3d2e94ed95e8f8cb747c5bc1c2b58" && \ + export ROOT_DIST="https://storage.googleapis.com/golang/go1.9.4.linux-amd64.tar.gz" && \ + export ROOT_DIST_SHA1="ed1bd37c356338a5a04923c183931a96687f202e" && \ \ $BOOTSTRAP_PURE diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/build.sh index f968cbaf..6603b810 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/build.sh @@ -12,7 +12,7 @@ cat ${BUILD_DIR}/package.yml ${ARCHDIR}/archs/$ARCH.yml > ${BUILD_DIR}/settings- gotpl ${BASEDIR}/run.sh.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/run-$runid.sh chmod +x ${BUILD_DIR}/run-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/run.sh.j2 index cec09ba8..f057dcbf 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/binary/run.sh.j2 @@ -10,18 +10,20 @@ if [ "$SNAPSHOT" = "yes" ]; then VERSION="${VERSION}-SNAPSHOT" fi +BEATS_YML_NAME="{{.beat_name}}-linux-{{.arch}}" +[ -f "${BEATS_YML_NAME}.yml" ] || BEATS_YML_NAME="{{.beat_name}}-linux" + mkdir /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}} cp -a homedir/. /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/ cp {{.beat_name}}-linux-{{.arch}} /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/{{.beat_name}} -cp {{.beat_name}}-linux.yml /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/{{.beat_name}}.yml -cp {{.beat_name}}-linux.reference.yml /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/{{.beat_name}}.reference.yml +cp ${BEATS_YML_NAME}.yml /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/{{.beat_name}}.yml +cp ${BEATS_YML_NAME}.reference.yml /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/{{.beat_name}}.reference.yml cp fields.yml /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/ cp -a modules.d-linux/ /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}/modules.d || true -mkdir -p upload -tar czvf upload/{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}.tar.gz /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}} -echo "Created upload/{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}.tar.gz" +tar czvf /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-linux-{{.bin_arch}}.tar.gz /{{.beat_name}}-${VERSION}-linux-{{.bin_arch}} +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}--${VERSION}-linux-{{.bin_arch}}.tar.gz" -cd upload -sha512sum {{.beat_name}}-${VERSION}-linux-{{.bin_arch}}.tar.gz > {{.beat_name}}-${VERSION}-linux-{{.bin_arch}}.tar.gz.sha512 -echo "Created upload/{{.beat_name}}-${VERSION}-linux-{{.bin_arch}}.tar.gz.sha512" +cd /upload +sha512sum {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-linux-{{.bin_arch}}.tar.gz > {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-linux-{{.bin_arch}}.tar.gz.sha512 +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-linux-{{.bin_arch}}.tar.gz.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/build.sh index 57d02fb5..6fcd4fc9 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/build.sh @@ -16,7 +16,7 @@ gotpl ${BASEDIR}/systemd.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/$r gotpl ${BASEDIR}/beatname.sh.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/beatname-$runid.sh chmod +x ${BUILD_DIR}/beatname-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/run.sh.j2 index baac361f..0ea1bba8 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/centos/run.sh.j2 @@ -17,13 +17,16 @@ if [ "$SNAPSHOT" = "yes" ]; then VERSION="${VERSION}-SNAPSHOT" fi +BEATS_YML_NAME="{{.beat_name}}-linux-{{.arch}}" +[ -f "${BEATS_YML_NAME}.yml" ] || BEATS_YML_NAME="{{.beat_name}}-linux" + # fpm replaces - with _ in the version RPM_VERSION=`echo ${VERSION} | sed 's/-/_/g'` # create rpm FPM_ARGS=( --force -s dir -t rpm - -n {{.beat_pkg_name}} -v ${RPM_VERSION} + -n {{.beat_pkg_name}}{{.beat_pkg_suffix}} -v ${RPM_VERSION} --architecture {{.rpm_arch}} --vendor "{{.beat_vendor}}" --license "{{.beat_license}}" @@ -35,8 +38,8 @@ FPM_ARGS=( homedir/=/usr/share/{{.beat_name}} 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 + ${BEATS_YML_NAME}.yml=/etc/{{.beat_name}}/{{.beat_name}}.yml + ${BEATS_YML_NAME}.reference.yml=/etc/{{.beat_name}}/{{.beat_name}}.reference.yml fields.yml=/etc/{{.beat_name}}/fields.yml ${RUNID}.service=/lib/systemd/system/{{.beat_pkg_name}}.service god-linux-{{.arch}}=/usr/share/{{.beat_name}}/bin/{{.beat_name}}-god @@ -49,11 +52,10 @@ fi fpm "${FPM_ARGS[@]}" # rename so that the filename respects semver rules -mkdir -p upload -mv {{.beat_pkg_name}}-${RPM_VERSION}-1.{{.rpm_arch}}.rpm upload/{{.beat_name}}-${VERSION}-{{.rpm_arch}}.rpm -echo "Created upload/{{.beat_name}}-${VERSION}-{{.rpm_arch}}.rpm" +mv {{.beat_pkg_name}}{{.beat_pkg_suffix}}-${RPM_VERSION}-1.{{.rpm_arch}}.rpm /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.rpm_arch}}.rpm +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.rpm_arch}}.rpm" # create sha512 file -cd upload -sha512sum {{.beat_name}}-${VERSION}-{{.rpm_arch}}.rpm > {{.beat_name}}-${VERSION}-{{.rpm_arch}}.rpm.sha512 -echo "Created upload/{{.beat_name}}-${VERSION}-{{.rpm_arch}}.rpm.sha512" +cd /upload +sha512sum {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.rpm_arch}}.rpm > {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.rpm_arch}}.rpm.sha512 +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.rpm_arch}}.rpm.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/build.sh index 78d23025..d0340f26 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/build.sh @@ -12,7 +12,7 @@ cat ${BUILD_DIR}/package.yml ${ARCHDIR}/archs/$ARCH.yml > ${BUILD_DIR}/settings- gotpl ${BASEDIR}/run.sh.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/run-$runid.sh chmod +x ${BUILD_DIR}/run-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/run.sh.j2 index 0238950c..42a48220 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/darwin/run.sh.j2 @@ -18,10 +18,9 @@ cp {{.beat_name}}-darwin.reference.yml /{{.beat_name}}-${VERSION}-darwin-x86_64/ cp fields.yml /{{.beat_name}}-${VERSION}-darwin-x86_64/ cp -a modules.d-darwin/ /{{.beat_name}}-${VERSION}-darwin-x86_64/modules.d || true -mkdir -p upload -tar czvf upload/{{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz /{{.beat_name}}-${VERSION}-darwin-x86_64 -echo "Created upload/{{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz" +tar czvf /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-darwin-x86_64.tar.gz /{{.beat_name}}-${VERSION}-darwin-x86_64 +echo "Created /upload/{{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz" -cd upload -sha512sum {{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz > {{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz.sha512 -echo "Created upload/{{.beat_name}}-${VERSION}-darwin-x86_64.tar.gz.sha512" +cd /upload +sha512sum {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-darwin-x86_64.tar.gz > {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-darwin-x86_64.tar.gz.sha512 +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-darwin-x86_64.tar.gz.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/build.sh index 8051fbb2..8d427f1c 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/build.sh @@ -11,7 +11,7 @@ cat ${ARCHDIR}/version.yml > ${BUILD_DIR}/settings-$runid.yml gotpl ${BASEDIR}/run.sh.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/run-$runid.sh chmod +x ${BUILD_DIR}/run-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid -e BEAT_NAME=$BEAT_NAME \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/run.sh.j2 index 494a9b20..96d272aa 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/dashboards/run.sh.j2 @@ -14,10 +14,9 @@ mkdir /${BEAT_NAME:-beats}-dashboards-${VERSION} cp -a dashboards/. /${BEAT_NAME:-beats}-dashboards-${VERSION}/ echo "$BUILDID" > /${BEAT_NAME:-beats}-dashboards-${VERSION}/.build_hash.txt -mkdir -p upload -zip -r upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip /${BEAT_NAME:-beats}-dashboards-${VERSION} -echo "Created upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip" +zip -r /upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip /${BEAT_NAME:-beats}-dashboards-${VERSION} +echo "Created /upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip" -cd upload +cd /upload sha512sum ${BEAT_NAME:-beats}-dashboards-${VERSION}.zip > ${BEAT_NAME:-beats}-dashboards-${VERSION}.zip.sha512 -echo "Created upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip.sha512" +echo "Created /upload/${BEAT_NAME:-beats}-dashboards-${VERSION}.zip.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/build.sh index 0093a15a..be79fac7 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/build.sh @@ -16,7 +16,7 @@ gotpl ${BASEDIR}/systemd.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/$r gotpl ${BASEDIR}/beatname.sh.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/beatname-$runid.sh chmod +x ${BUILD_DIR}/beatname-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/run.sh.j2 index 6dcc1c0d..a88afd1e 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/debian/run.sh.j2 @@ -17,12 +17,15 @@ if [ "$SNAPSHOT" = "yes" ]; then VERSION="${VERSION}-SNAPSHOT" fi +BEATS_YML_NAME="{{.beat_name}}-linux-{{.arch}}" +[ -f "${BEATS_YML_NAME}.yml" ] || BEATS_YML_NAME="{{.beat_name}}-linux" + # create deb FPM_ARGS=( --force -s dir -t deb - -n {{.beat_pkg_name}} -v ${VERSION} + -n {{.beat_pkg_name}}{{.beat_pkg_suffix}} -v ${VERSION} --vendor "{{.beat_vendor}}" - --license "{{.beat_license}}" + --license $(echo {{.beat_license}} | tr " " "-") --architecture {{.deb_arch}} --description "{{.beat_description}}" --url {{.beat_url}} @@ -32,8 +35,8 @@ FPM_ARGS=( homedir/=/usr/share/{{.beat_name}} 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 + ${BEATS_YML_NAME}.yml=/etc/{{.beat_name}}/{{.beat_name}}.yml + ${BEATS_YML_NAME}.reference.yml=/etc/{{.beat_name}}/{{.beat_name}}.reference.yml fields.yml=/etc/{{.beat_name}}/fields.yml ${RUNID}.service=/lib/systemd/system/{{.beat_pkg_name}}.service god-linux-{{.arch}}=/usr/share/{{.beat_name}}/bin/{{.beat_name}}-god @@ -46,11 +49,10 @@ fi fpm "${FPM_ARGS[@]}" # move and rename to use the elastic conventions -mkdir -p upload -mv {{.beat_pkg_name}}_${VERSION}_{{.deb_arch}}.deb upload/{{.beat_name}}-${VERSION}-{{.deb_arch}}.deb -echo "Created upload/{{.beat_name}}-${VERSION}-{{.deb_arch}}.deb" +mv {{.beat_pkg_name}}{{.beat_pkg_suffix}}_${VERSION}_{{.deb_arch}}.deb /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.deb_arch}}.deb +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.deb_arch}}.deb" # create sha512 file -cd upload -sha512sum {{.beat_name}}-${VERSION}-{{.deb_arch}}.deb > {{.beat_name}}-${VERSION}-{{.deb_arch}}.deb.sha512 -echo "Created upload/{{.beat_name}}-${VERSION}-{{.deb_arch}}.deb.sha512" +cd /upload +sha512sum {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.deb_arch}}.deb > {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.deb_arch}}.deb.sha512 +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-{{.deb_arch}}.deb.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/build.sh index c52a9e23..8b5e169e 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/build.sh @@ -14,7 +14,7 @@ gotpl ${BASEDIR}/install-service.ps1.j2 < ${BUILD_DIR}/settings-$runid.yml > ${B gotpl ${BASEDIR}/uninstall-service.ps1.j2 < ${BUILD_DIR}/settings-$runid.yml > ${BUILD_DIR}/uninstall-service-$BEAT.ps1 chmod +x ${BUILD_DIR}/run-$runid.sh -docker run --rm -v ${BUILD_DIR}:/build \ +docker run --rm -v ${BUILD_DIR}:/build -v ${UPLOAD_DIR}:/upload \ -e BUILDID=$BUILDID -e SNAPSHOT=$SNAPSHOT -e RUNID=$runid \ tudorg/fpm /build/run-$runid.sh diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/install-service.ps1.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/install-service.ps1.j2 index 556d7a4e..e95e4311 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/install-service.ps1.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/install-service.ps1.j2 @@ -11,4 +11,4 @@ $workdir = Split-Path $MyInvocation.MyCommand.Path # create new service New-Service -name {{.beat_name}} ` -displayName {{.beat_name}} ` - -binaryPathName "`"$workdir\\{{.beat_name}}.exe`" -c `"$workdir\\{{.beat_name}}.yml`" -path.home `"$workdir`" -path.data `"C:\\ProgramData\\{{.beat_name}}`" -path.logs `"C:\\ProgramData\\{{.beat_name}}\logs`"" + -binaryPathName "`"$workdir\{{.beat_name}}.exe`" -c `"$workdir\{{.beat_name}}.yml`" -path.home `"$workdir`" -path.data `"C:\ProgramData\{{.beat_name}}`" -path.logs `"C:\ProgramData\{{.beat_name}}\logs`"" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/run.sh.j2 b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/run.sh.j2 index b7c2258e..d57fb15e 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/run.sh.j2 +++ b/vendor/github.com/elastic/beats/dev-tools/packer/platforms/windows/run.sh.j2 @@ -21,10 +21,9 @@ cp -a modules.d-win/ /{{.beat_name}}-${VERSION}-windows-{{.win_arch}}/modules.d cp install-service-{{.beat_name}}.ps1 /{{.beat_name}}-${VERSION}-windows-{{.win_arch}}/ cp uninstall-service-{{.beat_name}}.ps1 /{{.beat_name}}-${VERSION}-windows-{{.win_arch}}/ -mkdir -p upload -zip -r upload/{{.beat_name}}-${VERSION}-windows-{{.win_arch}}.zip /{{.beat_name}}-${VERSION}-windows-{{.win_arch}} -echo "Created upload/{{.beat_name}}-${VERSION}-windows-{{.win_arch}}.zip" +zip -r /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-windows-{{.win_arch}}.zip /{{.beat_name}}-${VERSION}-windows-{{.win_arch}} +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-windows-{{.win_arch}}.zip" -cd upload -sha512sum {{.beat_name}}-${VERSION}-windows-{{.win_arch}}.zip > {{.beat_name}}-${VERSION}-windows-{{.win_arch}}.zip.sha512 -echo "Created upload/{{.beat_name}}-${VERSION}-windows-{{.win_arch}}.zip.sha512" +cd /upload +sha512sum {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-windows-{{.win_arch}}.zip > {{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-windows-{{.win_arch}}.zip.sha512 +echo "Created /upload/{{.beat_name}}{{.beat_pkg_suffix}}-${VERSION}-windows-{{.win_arch}}.zip.sha512" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/version.yml b/vendor/github.com/elastic/beats/dev-tools/packer/version.yml index 7aaf182b..11ec50de 100644 --- a/vendor/github.com/elastic/beats/dev-tools/packer/version.yml +++ b/vendor/github.com/elastic/beats/dev-tools/packer/version.yml @@ -1 +1 @@ -version: "6.2.4" +version: "6.3.3" diff --git a/vendor/github.com/elastic/beats/dev-tools/packer/xgo-scripts/before_build.sh b/vendor/github.com/elastic/beats/dev-tools/packer/xgo-scripts/before_build.sh index e54bead9..6d746678 100755 --- a/vendor/github.com/elastic/beats/dev-tools/packer/xgo-scripts/before_build.sh +++ b/vendor/github.com/elastic/beats/dev-tools/packer/xgo-scripts/before_build.sh @@ -18,6 +18,7 @@ cp fields.yml $PREFIX/fields.yml # linux cp $BEAT_NAME.yml $PREFIX/$BEAT_NAME-linux.yml chmod 0600 $PREFIX/$BEAT_NAME-linux.yml +chmod 0600 $PREFIX/$BEAT_NAME-linux-386.yml || true cp $BEAT_NAME.reference.yml $PREFIX/$BEAT_NAME-linux.reference.yml rm -rf $PREFIX/modules.d-linux cp -r modules.d/ $PREFIX/modules.d-linux || true @@ -44,7 +45,7 @@ PREFIX=$PREFIX make before-build # Add data to the home directory mkdir -p $PREFIX/homedir -make install-home HOME_PREFIX=$PREFIX/homedir +make install-home HOME_PREFIX=$PREFIX/homedir LICENSE_FILE=${LICENSE_FILE} if [ -n "BUILDID" ]; then echo "$BUILDID" > $PREFIX/homedir/.build_hash.txt diff --git a/vendor/github.com/elastic/beats/dev-tools/promote_docs b/vendor/github.com/elastic/beats/dev-tools/promote_docs new file mode 100755 index 00000000..ab3dbcbe --- /dev/null +++ b/vendor/github.com/elastic/beats/dev-tools/promote_docs @@ -0,0 +1,35 @@ +#!/usr/bin/env python +import argparse +from subprocess import check_call + +def main(): + parser = argparse.ArgumentParser( + description="Used to promote doc version and branch. Doesn't commit changes.") + parser.add_argument("version", + help="The new docs version") + parser.add_argument("branch", + help="The new docs branch") + args = parser.parse_args() + version = args.version + branch = args.branch + + # make sure we have no dirty files in this branch (might throw off `make update`) + check_call("git clean -dfx", shell=True) + + # edit the file + with open("libbeat/docs/version.asciidoc", "r") as f: + lines = f.readlines() + for i, line in enumerate(lines): + if line.startswith(":stack-version:"): + lines[i] = ":stack-version: {}\n".format(version) + if line.startswith(":branch:"): + lines[i] = ":branch: {}\n".format(branch) + if line.startswith(":doc-branch:"): + lines[i] = ":doc-branch: {}\n".format(branch) + with open("libbeat/docs/version.asciidoc", "w") as f: + f.writelines(lines) + + check_call("make update", shell=True) + +if __name__ == "__main__": + main() diff --git a/vendor/github.com/elastic/beats/dev-tools/set_version b/vendor/github.com/elastic/beats/dev-tools/set_version index 44888caa..2607e397 100755 --- a/vendor/github.com/elastic/beats/dev-tools/set_version +++ b/vendor/github.com/elastic/beats/dev-tools/set_version @@ -13,7 +13,8 @@ goversion_template = '''package main const appVersion = "{version}" ''' -goversion_template_libbeat = '''package version +goversion_template_libbeat = '''// Code generated by dev-tools/set_version +package version const defaultBeatVersion = "{version}" ''' diff --git a/vendor/github.com/elastic/beats/docs/devguide/contributing.asciidoc b/vendor/github.com/elastic/beats/docs/devguide/contributing.asciidoc index e6d8b354..eab4ff52 100644 --- a/vendor/github.com/elastic/beats/docs/devguide/contributing.asciidoc +++ b/vendor/github.com/elastic/beats/docs/devguide/contributing.asciidoc @@ -16,14 +16,18 @@ The process for contributing to any of the Elastic repositories is similar. [[contribution-steps]] === Contribution Steps -. Please make sure you have signed our https://www.elastic.co/contributor-agreement/[Contributor License Agreement]. We are not asking you to assign -copyright to us, but to give us the right to distribute your code without -restriction. We ask this of all contributors in order to assure our users of the -origin and continuing existence of the code. You only need to sign the CLA once. - -. Send a pull request! Push your changes to your fork of the repository and https://help.github.com/articles/using-pull-requests[submit a pull request]. In +. Please make sure you have signed our +https://www.elastic.co/contributor-agreement/[Contributor License Agreement]. We +are not asking you to assign copyright to us, but to give us the right to +distribute your code without restriction. We ask this of all contributors in +order to assure our users of the origin and continuing existence of the code. +You only need to sign the CLA once. + +. Send a pull request! Push your changes to your fork of the repository and +https://help.github.com/articles/using-pull-requests[submit a pull request]. In the pull request, describe what your changes do and mention any bugs/issues -related to the pull request. Please also add a changelog entry to https://github.com/elastic/beats/blob/master/CHANGELOG.asciidoc[CHANGELOG.asciidoc]. +related to the pull request. Please also add a changelog entry to +https://github.com/elastic/beats/blob/master/CHANGELOG.asciidoc[CHANGELOG.asciidoc]. [float] [[adding-new-beat]] @@ -92,8 +96,9 @@ This command has the following dependencies: * Python >= {python} * https://virtualenv.pypa.io/en/latest/[virtualenv] for Python -Virtualenv can be installed with the command `easy_install virtualenv` or `pip install virtualenv`. -More details can be found https://virtualenv.pypa.io/en/latest/installation.html[here]. +Virtualenv can be installed with the command `easy_install virtualenv` or `pip +install virtualenv`. More details can be found +https://virtualenv.pypa.io/en/latest/installation.html[here]. [float] [[running-testsuite]] @@ -136,3 +141,10 @@ the govendor documentation on how to add or update vendored dependencies. In most cases `govendor fetch your/dependency@version +out` will get the job done. +[float] +[[changelog]] +=== Changelog + +To keep up to date with changes to the official Beats for community developers, +follow the developer changelog +https://github.com/elastic/beats/blob/master/CHANGELOG-developer.md[here]. diff --git a/vendor/github.com/elastic/beats/docs/devguide/index.asciidoc b/vendor/github.com/elastic/beats/docs/devguide/index.asciidoc index 24991084..ad6934c7 100644 --- a/vendor/github.com/elastic/beats/docs/devguide/index.asciidoc +++ b/vendor/github.com/elastic/beats/docs/devguide/index.asciidoc @@ -3,9 +3,12 @@ include::../../libbeat/docs/version.asciidoc[] +:dev-guide: true :beatname_lc: beatname :beatname_uc: a Beat +include::{asciidoc-dir}/../../shared/attributes.asciidoc[] + include::../../libbeat/docs/shared-beats-attributes.asciidoc[] include::./contributing.asciidoc[] diff --git a/vendor/github.com/elastic/beats/docs/devguide/modules-dev-guide.asciidoc b/vendor/github.com/elastic/beats/docs/devguide/modules-dev-guide.asciidoc index b7951f7b..902fa340 100644 --- a/vendor/github.com/elastic/beats/docs/devguide/modules-dev-guide.asciidoc +++ b/vendor/github.com/elastic/beats/docs/devguide/modules-dev-guide.asciidoc @@ -18,25 +18,97 @@ example, the Nginx module has `access` and `error` filesets. You can contribute a new module (with at least one fileset), or a new fileset for an existing module. +NOTE: In this guide we use `{module}` and `{fileset}` as placeholders for the +module and fileset names. You need to replace these with the actual names you +entered when your created the module and fileset. Only use characters `[a-z]` and, if required, underscores (`_`). No other characters are allowed. + [float] -=== Creating a new fileset +=== Creating a new module -Regardless of whether you are creating a fileset in a new or existing module, -the procedure is similar. Run the following command in the `filebeat` folder: +Run the following command in the `filebeat` folder: [source,bash] ---- -make create-fileset MODULE={module} FILESET={fileset} +make create-module MODULE={module} ---- -Only use characters `[a-z]` and, if required, underscores (`_`). -No other characters are allowed. -For the module name, you can us either a new module name or an existing module -name. If the module doesn't exist, it will be created. +After running the `make create-module` command, you'll find the module, +along with its generated files, under `module/{module}`. This +directory contains the following files: + +[source,bash] +---- +module/{module} +├── module.yml +└── _meta +    └── docs.asciidoc +    └── fields.yml +    └── kibana +---- -NOTE: In this guide we use `{fileset}` and `{module}` as placeholders for the -fileset and module names. You need to replace these with the actual names you -entered when your created the module and fileset. +Let's look at these files one by one. + +[float] +==== module.yml + +This file contains list of all the dashboards available for the module and used by `export_dashboards.go` script for exporting dashboards. +Each dashboard is defined by an id and the name of json file where the dashboard is saved locally. +At generation new fileset this file will be automatically updated with "default" dashboard settings for new fileset. +Please ensure that this settings are correct. + +[float] +==== _meta/docs.asciidoc + +This file contains module-specific documentation. You should include information +about which versions of the service were tested and the variables that are +defined in each fileset. + +[float] +==== _meta/fields.yml + +The module level `fields.yml` contains descriptions for the module-level fields. +Please review and update the title and the descriptions in this file. The title +is used as a title in the docs, so it's best to capitalize it. + +[float] +==== _meta/kibana + +This folder contains the sample Kibana dashboards for this module. To create +them, you can build them visually in Kibana and then run the following command: + +[source,shell] +---- +$ cd dev-tools/cmd/dashboards +$ make # if export_dashboard is not built +$ ./export_dashboards -dashboard '{dashboard-id}' -output '../../../filebeat/module/{module}/_meta/kibana/default/dashboard' +---- + +New Filebeat modules might not be compatible with Kibana 5.x. To export dashboards that are compatible with 5.x, run the following command inside the developer virtualenv: + +[source,shell] +---- +$ cd filebeat +$ make python-env +$ cd module/{module}/ +$ python ../../../dev-tools/export_5x_dashboards.py --regex {module} --dir _meta/kibana/5.x +---- + +Where the `--regex` parameter should match the dashboard you want to export. + +Please note that dashboards exported from Kibana 5.x are not compatible with Kibana 6.x. + +You can find more details about the process of creating and exporting the Kibana +dashboards by reading {beatsdevguide}/new-dashboards.html[this guide]. + +[float] +=== Creating a new fileset + +Run the following command in the `filebeat` folder: + +[source,bash] +---- +make create-fileset MODULE={module} FILESET={fileset} +---- After running the `make create-fileset` command, you'll find the fileset, along with its generated files, under `module/{module}/{fileset}`. This @@ -104,8 +176,7 @@ There's quite a lot going on in this file, so let's break it down: element: `"/example/test.log*"`. * Note that variable values don't have to be strings. They can be also numbers, objects, or as shown in this example, arrays. -* We will use the `paths` variable to set the prospector - {filebeat}/configuration-filebeat-options.html#prospector-paths[paths] +* We will use the `paths` variable to set the input `paths` setting, so "glob" values can be used here. * Besides the `default` value, the file defines values for particular operating systems: a default for darwin/OS X/macOS systems and a default for @@ -114,13 +185,13 @@ There's quite a lot going on in this file, so let's break it down: Filebeat is executed on the respective OS. Besides the variable definition, the `manifest.yml` file also contains -references to the ingest pipeline and prospector configuration to use (see next +references to the ingest pipeline and input configuration to use (see next sections): [source,yaml] ---- ingest_pipeline: ingest/pipeline.json -prospector: config/testfileset.yml +input: config/testfileset.yml ---- These should point to the respective files from the fileset. @@ -142,8 +213,8 @@ overridden at runtime.) [float] ==== config/*.yml -The `config/` folder contains template files that generate Filebeat prospector -configurations. The Filebeat prospectors are primarily responsible for tailing +The `config/` folder contains template files that generate Filebeat input +configurations. The Filebeat inputs are primarily responsible for tailing files, filtering, and multi-line stitching, so that's what you configure in the template files. @@ -161,12 +232,12 @@ exclude_files: [".gz$"] You'll find this example in the template file that gets generated automatically when you run `make create-fileset`. In this example, the `paths` variable is -used to construct the `paths` list for the {filebeat}/configuration-filebeat-options.html#prospector-paths[paths] option. +used to construct the `paths` list for the input `paths` option. Any template files that you add to the `config/` folder need to generate a valid -Filebeat prospector configuration in YAML format. The options accepted by the -prospector configuration are documented in the -{filebeat}/configuration-filebeat-options.html[Filebeat Prospectors] section of +Filebeat input configuration in YAML format. The options accepted by the +input configuration are documented in the +{filebeat}/configuration-filebeat-options.html[Filebeat Inputs] section of the Filebeat documentation. The template files use the templating language defined by the @@ -250,6 +321,9 @@ While developing the pipeline definition, we recommend making use of the {elasticsearch}/simulate-pipeline-api.html[Simulate Pipeline API] for testing and quick iteration. +By default Filebeat does not update Ingest pipelines if already loaded. If you want to force updating your pipeline +during development, use `--update-pipelines` flag. This uploads pipelines even if they are already available on the node. + [float] ==== _meta/fields.yml @@ -289,53 +363,3 @@ In addition, assuming you have a `test.log` file, you can add a documents as they are found via an Elasticsearch search. In this case, the integration tests will automatically check that the result is the same on each run. - -[float] -=== Module-level files - -Besides the files in the fileset folder, there is also data that needs to be -filled at the module level. - -[float] -==== _meta/docs.asciidoc - -This file contains module-specific documentation. You should include information -about which versions of the service were tested and the variables that are -defined in each fileset. - -[float] -==== _meta/fields.yml - -The module level `fields.yml` contains descriptions for the module-level fields. -Please review and update the title and the descriptions in this file. The title -is used as a title in the docs, so it's best to capitalize it. - -[float] -==== _meta/kibana - -This folder contains the sample Kibana dashboards for this module. To create -them, you can build them visually in Kibana and then run the following command: - -[source,shell] ----- -$ cd dev-tools/cmd/dashboards -$ make # if export_dashboard is not built -$ ./export_dashboards -dashboard '{dashboard-id}' -output '../../../filebeat/module/{module}/_meta/kibana/default/dashboard' ----- - -New Filebeat modules might not be compatible with Kibana 5.x. To export dashboards that are compatible with 5.x, run the following command inside the developer virtualenv: - -[source,shell] ----- -$ cd filebeat -$ make python-env -$ cd module/{module}/ -$ python ../../../dev-tools/export_5x_dashboards.py --regex {module} --dir _meta/kibana/5.x ----- - -Where the `--regex` parameter should match the dashboard you want to export. - -Please note that dashboards exported from Kibana 5.x are not compatible with Kibana 6.x. - -You can find more details about the process of creating and exporting the Kibana -dashboards by reading {beatsdevguide}/new-dashboards.html[this guide]. diff --git a/vendor/github.com/elastic/beats/docs/devguide/newbeat.asciidoc b/vendor/github.com/elastic/beats/docs/devguide/newbeat.asciidoc index 8722713f..01c926ab 100644 --- a/vendor/github.com/elastic/beats/docs/devguide/newbeat.asciidoc +++ b/vendor/github.com/elastic/beats/docs/devguide/newbeat.asciidoc @@ -41,17 +41,16 @@ For general information about contributing to Beats, see <>. After you have https://golang.org/doc/install[installed Go] and set up the https://golang.org/doc/code.html#GOPATH[GOPATH] environment variable to point to -your preferred workspace location, a simple way of getting the source code for -Beats, including libbeat and the Beat generator, is to do: +your preferred workspace location, clone the Beats repository in the correct location +under `GOPATH`: [source,shell] ---------------------------------------------------------------------- -go get github.com/elastic/beats +mkdir -p ${GOPATH}/src/github.com/elastic +git clone https://github.com/elastic/beats ${GOPATH}/src/github.com/elastic/beats ---------------------------------------------------------------------- -When you run the command, all source files are downloaded to the -`$GOPATH/src/github.com/elastic/beats` path. You can ignore the "no buildable Go source files" message because -you will build the source later. By default `go get` fetches the master branch. To build your beat +To build your beat on a specific version of libbeat, check out the specific branch ({doc-branch} in the example below): ["source","sh",subs="attributes"] @@ -474,9 +473,9 @@ package main import ( "os" - "github.com/spf13/cobra" "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/cmd" "github.com/kimjmin/countbeat/beater" ) diff --git a/vendor/github.com/elastic/beats/docs/devguide/newdashboards.asciidoc b/vendor/github.com/elastic/beats/docs/devguide/newdashboards.asciidoc index 8757b0dc..fb431cd5 100644 --- a/vendor/github.com/elastic/beats/docs/devguide/newdashboards.asciidoc +++ b/vendor/github.com/elastic/beats/docs/devguide/newdashboards.asciidoc @@ -85,7 +85,7 @@ import only the dashboards, use the `--dashboards` flag: Starting with Beats 6.0.0, the dashboards are no longer loaded directly into Elasticsearch. Instead, they are imported directly into Kibana. Thus, if your Kibana instance is not listening on localhost, or you enabled -X-Pack for Kibana, you need to either configure the Kibana endpoint in +{xpack} for Kibana, you need to either configure the Kibana endpoint in the config for the Beat, or pass the Kibana host and credentials as arguments to the `setup` command. For example: diff --git a/vendor/github.com/elastic/beats/filebeat/Dockerfile b/vendor/github.com/elastic/beats/filebeat/Dockerfile index b5557a4f..fcd088da 100644 --- a/vendor/github.com/elastic/beats/filebeat/Dockerfile +++ b/vendor/github.com/elastic/beats/filebeat/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.9.2 +FROM golang:1.9.4 MAINTAINER Nicolas Ruflin RUN set -x && \ diff --git a/vendor/github.com/elastic/beats/filebeat/Makefile b/vendor/github.com/elastic/beats/filebeat/Makefile index 37594d83..af3acdd3 100644 --- a/vendor/github.com/elastic/beats/filebeat/Makefile +++ b/vendor/github.com/elastic/beats/filebeat/Makefile @@ -21,7 +21,7 @@ kibana: # Collects all module and dataset fields .PHONY: fields -fields: +fields: python-env @mkdir -p _meta/ @cp ${ES_BEATS}/filebeat/_meta/fields.common.yml _meta/fields.generated.yml @${PYTHON_ENV}/bin/python ${ES_BEATS}/metricbeat/scripts/fields_collector.py >> _meta/fields.generated.yml @@ -62,6 +62,11 @@ imports: python-env .PHONY: collect collect: fields kibana modules configs collect-docs imports +# Creates a new module. Requires the params MODULE +.PHONY: create-module +create-module: + @go run ${ES_BEATS}/filebeat/scripts/generator/module/main.go --path=$(PWD) --beats_path=$(BEAT_GOPATH)/src/$(BEAT_PATH) --module=$(MODULE) + # Creates a new fileset. Requires the params MODULE and FILESET .PHONY: create-fileset create-fileset: diff --git a/vendor/github.com/elastic/beats/filebeat/_meta/common.p2.yml b/vendor/github.com/elastic/beats/filebeat/_meta/common.p2.yml index e1d40443..c6924437 100644 --- a/vendor/github.com/elastic/beats/filebeat/_meta/common.p2.yml +++ b/vendor/github.com/elastic/beats/filebeat/_meta/common.p2.yml @@ -1,17 +1,17 @@ # For more available modules and options, please see the filebeat.reference.yml sample # configuration file. -#=========================== Filebeat prospectors ============================= +#=========================== Filebeat inputs ============================= -filebeat.prospectors: +filebeat.inputs: -# Each - is a prospector. Most options can be set at the prospector level, so -# you can use different prospectors for various configurations. -# Below are the prospector specific configurations. +# Each - is an input. Most options can be set at the input level, so +# you can use different inputs for various configurations. +# Below are the input specific configurations. - type: log - # Change to true to enable this prospector configuration. + # Change to true to enable this input configuration. enabled: false # Paths that should be crawled and fetched. Glob based paths. diff --git a/vendor/github.com/elastic/beats/filebeat/_meta/common.reference.p2.yml b/vendor/github.com/elastic/beats/filebeat/_meta/common.reference.p2.yml index c6b01a14..1ab1c9c3 100644 --- a/vendor/github.com/elastic/beats/filebeat/_meta/common.reference.p2.yml +++ b/vendor/github.com/elastic/beats/filebeat/_meta/common.reference.p2.yml @@ -1,22 +1,22 @@ -#=========================== Filebeat prospectors ============================= +#=========================== Filebeat inputs ============================= -# List of prospectors to fetch data. -filebeat.prospectors: -# Each - is a prospector. Most options can be set at the prospector level, so -# you can use different prospectors for various configurations. -# Below are the prospector specific configurations. +# List of inputs to fetch data. +filebeat.inputs: +# Each - is an input. Most options can be set at the input level, so +# you can use different inputs for various configurations. +# Below are the input specific configurations. # Type of the files. Based on this the way the file is read is decided. -# The different types cannot be mixed in one prospector +# The different types cannot be mixed in one input # # Possible options are: # * log: Reads every line of the log file (default) # * stdin: Reads the standard in -#------------------------------ Log prospector -------------------------------- +#------------------------------ Log input -------------------------------- - type: log - # Change to true to enable this prospector configuration. + # Change to true to enable this input configuration. enabled: false # Paths that should be crawled and fetched. Glob based paths. @@ -67,7 +67,7 @@ filebeat.prospectors: # Time strings like 2h (2 hours), 5m (5 minutes) can be used. #ignore_older: 0 - # How often the prospector checks for new files in the paths that are specified + # How often the input checks for new files in the paths that are specified # for harvesting. Specify 1s to scan the directory as frequently as possible # without causing Filebeat to scan too frequently. Default: 10s. #scan_frequency: 10s @@ -137,7 +137,7 @@ filebeat.prospectors: # this can mean that the first entries of a new file are skipped. #tail_files: false - # The Ingest Node pipeline ID associated with this prospector. If this is set, it + # The Ingest Node pipeline ID associated with this input. If this is set, it # overwrites the pipeline option from the Elasticsearch output. #pipeline: @@ -203,23 +203,25 @@ filebeat.prospectors: # Note: Potential data loss. Make sure to read and understand the docs for this option. #close_timeout: 0 - # Defines if prospectors is enabled + # Defines if inputs is enabled #enabled: true -#----------------------------- Stdin prospector ------------------------------- +#----------------------------- Stdin input ------------------------------- # Configuration to use stdin input #- type: stdin -#------------------------- Redis slowlog prospector --------------------------- -# Experimental: Config options for the redis slow log prospector +#------------------------- Redis slowlog input --------------------------- +# Experimental: Config options for the redis slow log input #- type: redis - #hosts: ["localhost:6379"] - #username: - #password: #enabled: false + + # List of hosts to pool to retrieve the slow log information. + #hosts: ["localhost:6379"] + + # How often the input checks for redis slow log. #scan_frequency: 10s - # Timeout after which time the prospector should return an error + # Timeout after which time the input should return an error #timeout: 1s # Network type to be used for redis connection. Default: tcp @@ -231,17 +233,64 @@ filebeat.prospectors: # Redis AUTH password. Empty by default. #password: foobared -#------------------------------ Udp prospector -------------------------------- -# Experimental: Config options for the udp prospector +#------------------------------ Udp input -------------------------------- +# Experimental: Config options for the udp input #- type: udp + #enabled: false # Maximum size of the message received over UDP - #max_message_size: 10240 + #max_message_size: 10KiB + +#------------------------------ TCP input -------------------------------- +# Experimental: Config options for the TCP input +#- type: tcp + #enabled: false + + # The host and port to receive the new event + #host: "localhost:9000" + + # Character used to split new message + #line_delimiter: "\n" + + # Maximum size in bytes of the message received over TCP + #max_message_size: 20MiB + + # The number of seconds of inactivity before a remote connection is closed. + #timeout: 300s + +#------------------------------ Syslog input -------------------------------- +# Experimental: Config options for the Syslog input +# Accept RFC3164 formatted syslog event via UDP. +#- type: syslog + #enabled: false + #protocol.udp: + # The host and port to receive the new event + #host: "localhost:9000" + + # Maximum size of the message received over UDP + #max_message_size: 10KiB + +# Accept RFC3164 formatted syslog event via TCP. +#- type: syslog + #enabled: false + + #protocol.tcp: + # The host and port to receive the new event + #host: "localhost:9000" + + # Character used to split new message + #line_delimiter: "\n" + + # Maximum size in bytes of the message received over TCP + #max_message_size: 20MiB + + # The number of seconds of inactivity before a remote connection is closed. + #timeout: 300s #========================== Filebeat autodiscover ============================== # Autodiscover allows you to detect changes in the system and spawn new modules -# or prospectors as they happen. +# or inputs as they happen. #filebeat.autodiscover: # List of enabled autodiscover providers @@ -261,10 +310,15 @@ filebeat.prospectors: # data path. #filebeat.registry_file: ${path.data}/registry -# These config files must have the full filebeat config part inside, but only -# the prospector part is processed. All global options like spool_size are ignored. -# The config_dir MUST point to a different directory then where the main filebeat config file is in. -#filebeat.config_dir: +# The permissions mask to apply on registry file. The default value is 0600. +# Must be a valid Unix-style file permissions mask expressed in octal notation. +# This option is not supported on Windows. +#filebeat.registry_file_permissions: 0600 + +# By default Ingest pipelines are not updated if a pipeline with the same ID +# already exists. If this option is enabled Filebeat overwrites pipelines +# everytime a new Elasticsearch connection is established. +#filebeat.overwrite_pipelines: false # How long filebeat waits on shutdown for the publisher to finish. # Default is 0, not waiting. @@ -272,9 +326,9 @@ filebeat.prospectors: # Enable filebeat config reloading #filebeat.config: - #prospectors: + #inputs: #enabled: false - #path: prospectors.d/*.yml + #path: inputs.d/*.yml #reload.enabled: true #reload.period: 10s #modules: diff --git a/vendor/github.com/elastic/beats/filebeat/_meta/fields.common.yml b/vendor/github.com/elastic/beats/filebeat/_meta/fields.common.yml index 886cde08..1a020265 100644 --- a/vendor/github.com/elastic/beats/filebeat/_meta/fields.common.yml +++ b/vendor/github.com/elastic/beats/filebeat/_meta/fields.common.yml @@ -32,7 +32,14 @@ - name: prospector.type required: true description: > - The prospector type from which the event was generated. This field is set to the value specified for the `type` option in the prospector section of the Filebeat config file. + The input type from which the event was generated. This field is set to the value specified + for the `type` option in the input section of the Filebeat config file. (DEPRECATED: see `input.type`) + + - name: input.type + required: true + description: > + The input type from which the event was generated. This field is set to the value specified + for the `type` option in the input section of the Filebeat config file. - name: read_timestamp description: > @@ -47,3 +54,45 @@ - name: fileset.name description: > The Filebeat fileset that generated this event. + + - name: syslog.facility + type: long + required: false + description: > + The facility extracted from the priority. + + - name: syslog.priority + type: long + required: false + description: > + The priority of the syslog event. + + - name: syslog.severity_label + type: keyword + required: false + description: > + The human readable severity. + + - name: syslog.facility_label + type: keyword + required: false + description: > + The human readable facility. + + - name: process.program + type: keyword + required: false + description: > + The name of the program. + + - name: process.pid + type: long + required: false + description: > + The pid of the process. + + - name: event.severity + type: long + required: false + description: > + The severity of the event. diff --git a/vendor/github.com/elastic/beats/filebeat/beater/autodiscover.go b/vendor/github.com/elastic/beats/filebeat/autodiscover/autodiscover.go similarity index 72% rename from vendor/github.com/elastic/beats/filebeat/beater/autodiscover.go rename to vendor/github.com/elastic/beats/filebeat/autodiscover/autodiscover.go index 01c9757b..08e8c1b4 100644 --- a/vendor/github.com/elastic/beats/filebeat/beater/autodiscover.go +++ b/vendor/github.com/elastic/beats/filebeat/autodiscover/autodiscover.go @@ -1,4 +1,4 @@ -package beater +package autodiscover import ( "errors" @@ -8,17 +8,17 @@ import ( "github.com/elastic/beats/libbeat/common/bus" ) -// AutodiscoverAdapter for Filebeat modules & prospectors +// AutodiscoverAdapter for Filebeat modules & input type AutodiscoverAdapter struct { - prospectorFactory cfgfile.RunnerFactory - moduleFactory cfgfile.RunnerFactory + inputFactory cfgfile.RunnerFactory + moduleFactory cfgfile.RunnerFactory } -// NewAutodiscoverAdapter builds and returns an autodiscover adapter for Filebeat modules & prospectors -func NewAutodiscoverAdapter(prospectorFactory, moduleFactory cfgfile.RunnerFactory) *AutodiscoverAdapter { +// NewAutodiscoverAdapter builds and returns an autodiscover adapter for Filebeat modules & input +func NewAutodiscoverAdapter(inputFactory, moduleFactory cfgfile.RunnerFactory) *AutodiscoverAdapter { return &AutodiscoverAdapter{ - prospectorFactory: prospectorFactory, - moduleFactory: moduleFactory, + inputFactory: inputFactory, + moduleFactory: moduleFactory, } } @@ -37,12 +37,12 @@ func (m *AutodiscoverAdapter) CheckConfig(c *common.Config) error { return nil } -// Create a module or prospector from the given config +// Create a module or input from the given config func (m *AutodiscoverAdapter) Create(c *common.Config, meta *common.MapStrPointer) (cfgfile.Runner, error) { if c.HasField("module") { return m.moduleFactory.Create(c, meta) } - return m.prospectorFactory.Create(c, meta) + return m.inputFactory.Create(c, meta) } // EventFilter returns the bus filter to retrieve runner start/stop triggering events diff --git a/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/config.go b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/config.go new file mode 100644 index 00000000..adbe9222 --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/config.go @@ -0,0 +1,24 @@ +package hints + +import "github.com/elastic/beats/libbeat/common" + +type config struct { + Key string `config:"key"` + Config *common.Config `config:"config"` +} + +func defaultConfig() config { + rawCfg := map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "ids": []string{ + "${data.container.id}", + }, + }, + } + cfg, _ := common.NewConfigFrom(rawCfg) + return config{ + Key: "logs", + Config: cfg, + } +} diff --git a/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs.go b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs.go new file mode 100644 index 00000000..20c1a678 --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs.go @@ -0,0 +1,183 @@ +package hints + +import ( + "fmt" + "regexp" + + "github.com/elastic/beats/filebeat/fileset" + "github.com/elastic/beats/libbeat/autodiscover" + "github.com/elastic/beats/libbeat/autodiscover/builder" + "github.com/elastic/beats/libbeat/autodiscover/template" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/bus" + "github.com/elastic/beats/libbeat/common/cfgwarn" + "github.com/elastic/beats/libbeat/logp" +) + +func init() { + autodiscover.Registry.AddBuilder("hints", NewLogHints) +} + +const ( + multiline = "multiline" + includeLines = "include_lines" + excludeLines = "exclude_lines" +) + +// validModuleNames to sanitize user input +var validModuleNames = regexp.MustCompile("[^a-zA-Z0-9]+") + +type logHints struct { + Key string + Config *common.Config + Registry *fileset.ModuleRegistry +} + +// NewLogHints builds a log hints builder +func NewLogHints(cfg *common.Config) (autodiscover.Builder, error) { + cfgwarn.Beta("The hints builder is beta") + config := defaultConfig() + err := cfg.Unpack(&config) + + if err != nil { + return nil, fmt.Errorf("unable to unpack hints config due to error: %v", err) + } + + moduleRegistry, err := fileset.NewModuleRegistry([]*common.Config{}, "", false) + if err != nil { + return nil, err + } + + return &logHints{config.Key, config.Config, moduleRegistry}, nil +} + +// Create config based on input hints in the bus event +func (l *logHints) CreateConfig(event bus.Event) []*common.Config { + // Clone original config + config, _ := common.NewConfigFrom(l.Config) + host, _ := event["host"].(string) + if host == "" { + return []*common.Config{} + } + + var hints common.MapStr + hIface, ok := event["hints"] + if ok { + hints, _ = hIface.(common.MapStr) + } + + if builder.IsNoOp(hints, l.Key) == true { + return []*common.Config{config} + } + + tempCfg := common.MapStr{} + mline := l.getMultiline(hints) + if len(mline) != 0 { + tempCfg.Put(multiline, mline) + } + if ilines := l.getIncludeLines(hints); len(ilines) != 0 { + tempCfg.Put(includeLines, ilines) + } + if elines := l.getExcludeLines(hints); len(elines) != 0 { + tempCfg.Put(excludeLines, elines) + } + + // Merge config template with the configs from the annotations + if err := config.Merge(tempCfg); err != nil { + logp.Debug("hints.builder", "config merge failed with error: %v", err) + return []*common.Config{config} + } + + module := l.getModule(hints) + if module != "" { + moduleConf := map[string]interface{}{ + "module": module, + } + + filesets := l.getFilesets(hints, module) + for fileset, conf := range filesets { + filesetConf, _ := common.NewConfigFrom(config) + filesetConf.SetString("containers.stream", -1, conf.Stream) + + moduleConf[fileset+".enabled"] = conf.Enabled + moduleConf[fileset+".input"] = filesetConf + + logp.Debug("hints.builder", "generated config %+v", moduleConf) + } + config, _ = common.NewConfigFrom(moduleConf) + } + + logp.Debug("hints.builder", "generated config %+v", config) + + // Apply information in event to the template to generate the final config + return template.ApplyConfigTemplate(event, []*common.Config{config}) +} + +func (l *logHints) getMultiline(hints common.MapStr) common.MapStr { + return builder.GetHintMapStr(hints, l.Key, multiline) +} + +func (l *logHints) getIncludeLines(hints common.MapStr) []string { + return builder.GetHintAsList(hints, l.Key, includeLines) +} + +func (l *logHints) getExcludeLines(hints common.MapStr) []string { + return builder.GetHintAsList(hints, l.Key, excludeLines) +} + +func (l *logHints) getModule(hints common.MapStr) string { + module := builder.GetHintString(hints, l.Key, "module") + // for security, strip module name + return validModuleNames.ReplaceAllString(module, "") +} + +type filesetConfig struct { + Enabled bool + Stream string +} + +// Return a map containing filesets -> enabled & stream (stdout, stderr, all) +func (l *logHints) getFilesets(hints common.MapStr, module string) map[string]*filesetConfig { + var configured bool + filesets := make(map[string]*filesetConfig) + + moduleFilesets, err := l.Registry.ModuleFilesets(module) + if err != nil { + logp.Err("Error retrieving module filesets", err) + return nil + } + + for _, fileset := range moduleFilesets { + filesets[fileset] = &filesetConfig{Enabled: false, Stream: "all"} + } + + // If a single fileset is given, pass all streams to it + fileset := builder.GetHintString(hints, l.Key, "fileset") + if fileset != "" { + if conf, ok := filesets[fileset]; ok { + conf.Enabled = true + configured = true + } + } + + // If fileset is defined per stream, return all of them + for _, stream := range []string{"all", "stdout", "stderr"} { + fileset := builder.GetHintString(hints, l.Key, "fileset."+stream) + if fileset != "" { + if conf, ok := filesets[fileset]; ok { + conf.Enabled = true + conf.Stream = stream + configured = true + } + } + } + + // No fileseat defined, return defaults for the module, all streams to all filesets + if !configured { + for _, conf := range filesets { + conf.Enabled = true + } + } + + return filesets +} diff --git a/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs_test.go b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs_test.go new file mode 100644 index 00000000..6b1de4da --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/autodiscover/builder/hints/logs_test.go @@ -0,0 +1,295 @@ +package hints + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/bus" + "github.com/elastic/beats/libbeat/paths" +) + +func TestGenerateHints(t *testing.T) { + tests := []struct { + msg string + event bus.Event + len int + result common.MapStr + }{ + { + msg: "Hints without host should return nothing", + event: bus.Event{ + "hints": common.MapStr{ + "metrics": common.MapStr{ + "module": "prometheus", + }, + }, + }, + len: 0, + result: common.MapStr{}, + }, + { + msg: "Empty event hints should return default config", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + len: 1, + result: common.MapStr{ + "type": "docker", + "containers": map[string]interface{}{ + "ids": []interface{}{"abc"}, + }, + }, + }, + { + msg: "Hint with include|exclude_lines must be part of the input config", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + "hints": common.MapStr{ + "logs": common.MapStr{ + "include_lines": "^test, ^test1", + "exclude_lines": "^test2, ^test3", + }, + }, + }, + len: 1, + result: common.MapStr{ + "type": "docker", + "containers": map[string]interface{}{ + "ids": []interface{}{"abc"}, + }, + "include_lines": []interface{}{"^test", "^test1"}, + "exclude_lines": []interface{}{"^test2", "^test3"}, + }, + }, + { + msg: "Hint with multiline config must have a multiline in the input config", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + "hints": common.MapStr{ + "logs": common.MapStr{ + "multiline": common.MapStr{ + "pattern": "^test", + "negate": "true", + }, + }, + }, + }, + len: 1, + result: common.MapStr{ + "type": "docker", + "containers": map[string]interface{}{ + "ids": []interface{}{"abc"}, + }, + "multiline": map[string]interface{}{ + "pattern": "^test", + "negate": "true", + }, + }, + }, + { + msg: "Hint with module should attach input to its filesets", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + "hints": common.MapStr{ + "logs": common.MapStr{ + "module": "apache2", + }, + }, + }, + len: 1, + result: common.MapStr{ + "module": "apache2", + "error": map[string]interface{}{ + "enabled": true, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "all", + "ids": []interface{}{"abc"}, + }, + }, + }, + "access": map[string]interface{}{ + "enabled": true, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "all", + "ids": []interface{}{"abc"}, + }, + }, + }, + }, + }, + { + msg: "Hint with module should honor defined filesets", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + "hints": common.MapStr{ + "logs": common.MapStr{ + "module": "apache2", + "fileset": "access", + }, + }, + }, + len: 1, + result: common.MapStr{ + "module": "apache2", + "access": map[string]interface{}{ + "enabled": true, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "all", + "ids": []interface{}{"abc"}, + }, + }, + }, + "error": map[string]interface{}{ + "enabled": false, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "all", + "ids": []interface{}{"abc"}, + }, + }, + }, + }, + }, + { + msg: "Hint with module should honor defined filesets with streams", + event: bus.Event{ + "host": "1.2.3.4", + "kubernetes": common.MapStr{ + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + }, + "container": common.MapStr{ + "name": "foobar", + "id": "abc", + }, + "hints": common.MapStr{ + "logs": common.MapStr{ + "module": "apache2", + "fileset.stdout": "access", + "fileset.stderr": "error", + }, + }, + }, + len: 1, + result: common.MapStr{ + "module": "apache2", + "access": map[string]interface{}{ + "enabled": true, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "stdout", + "ids": []interface{}{"abc"}, + }, + }, + }, + "error": map[string]interface{}{ + "enabled": true, + "input": map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "stream": "stderr", + "ids": []interface{}{"abc"}, + }, + }, + }, + }, + }, + } + + for _, test := range tests { + cfg, _ := common.NewConfigFrom(map[string]interface{}{ + "type": "docker", + "containers": map[string]interface{}{ + "ids": []string{ + "${data.container.id}", + }, + }, + }) + + // Configure path for modules access + abs, _ := filepath.Abs("../../..") + err := paths.InitPaths(&paths.Path{ + Home: abs, + }) + + l, err := NewLogHints(cfg) + if err != nil { + t.Fatal(err) + } + + cfgs := l.CreateConfig(test.event) + assert.Equal(t, len(cfgs), test.len, test.msg) + + if test.len != 0 { + config := common.MapStr{} + err := cfgs[0].Unpack(&config) + assert.Nil(t, err, test.msg) + + assert.Equal(t, test.result, config, test.msg) + } + + } +} diff --git a/vendor/github.com/elastic/beats/filebeat/autodiscover/include.go b/vendor/github.com/elastic/beats/filebeat/autodiscover/include.go new file mode 100644 index 00000000..33e1c5ae --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/autodiscover/include.go @@ -0,0 +1,6 @@ +package autodiscover + +import ( + // include all filebeat specific builders + _ "github.com/elastic/beats/filebeat/autodiscover/builder/hints" +) diff --git a/vendor/github.com/elastic/beats/filebeat/beater/acker.go b/vendor/github.com/elastic/beats/filebeat/beater/acker.go index 3c39c551..fd1074d0 100644 --- a/vendor/github.com/elastic/beats/filebeat/beater/acker.go +++ b/vendor/github.com/elastic/beats/filebeat/beater/acker.go @@ -2,31 +2,41 @@ package beater import ( "github.com/elastic/beats/filebeat/input/file" + "github.com/elastic/beats/libbeat/logp" ) // eventAcker handles publisher pipeline ACKs and forwards -// them to the registrar. +// them to the registrar or directly to the stateless logger. type eventACKer struct { - out successLogger + stateful statefulLogger + stateless statelessLogger + log *logp.Logger } -type successLogger interface { +type statefulLogger interface { Published(states []file.State) } -func newEventACKer(out successLogger) *eventACKer { - return &eventACKer{out: out} +type statelessLogger interface { + Published(c int) bool +} + +func newEventACKer(stateless statelessLogger, stateful statefulLogger) *eventACKer { + return &eventACKer{stateless: stateless, stateful: stateful, log: logp.NewLogger("acker")} } func (a *eventACKer) ackEvents(data []interface{}) { + stateless := 0 states := make([]file.State, 0, len(data)) for _, datum := range data { if datum == nil { + stateless++ continue } st, ok := datum.(file.State) if !ok { + stateless++ continue } @@ -34,6 +44,12 @@ func (a *eventACKer) ackEvents(data []interface{}) { } if len(states) > 0 { - a.out.Published(states) + a.log.Debugw("stateful ack", "count", len(states)) + a.stateful.Published(states) + } + + if stateless > 0 { + a.log.Debugw("stateless ack", "count", stateless) + a.stateless.Published(stateless) } } diff --git a/vendor/github.com/elastic/beats/filebeat/beater/acker_test.go b/vendor/github.com/elastic/beats/filebeat/beater/acker_test.go new file mode 100644 index 00000000..806a9773 --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/beater/acker_test.go @@ -0,0 +1,71 @@ +package beater + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/filebeat/input/file" +) + +type mockStatefulLogger struct { + states []file.State +} + +func (sf *mockStatefulLogger) Published(states []file.State) { + sf.states = states +} + +type mockStatelessLogger struct { + count int +} + +func (sl *mockStatelessLogger) Published(count int) bool { + sl.count = count + return true +} + +func TestACKer(t *testing.T) { + tests := []struct { + name string + data []interface{} + stateless int + stateful []file.State + }{ + { + name: "only stateless", + data: []interface{}{nil, nil}, + stateless: 2, + }, + { + name: "only stateful", + data: []interface{}{file.State{Source: "-"}, file.State{Source: "-"}}, + stateful: []file.State{file.State{Source: "-"}, file.State{Source: "-"}}, + stateless: 0, + }, + { + name: "both", + data: []interface{}{file.State{Source: "-"}, nil, file.State{Source: "-"}}, + stateful: []file.State{file.State{Source: "-"}, file.State{Source: "-"}}, + stateless: 1, + }, + { + name: "any other Private type", + data: []interface{}{struct{}{}, nil}, + stateless: 2, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + sl := &mockStatelessLogger{} + sf := &mockStatefulLogger{} + + h := newEventACKer(sl, sf) + + h.ackEvents(test.data) + assert.Equal(t, test.stateless, sl.count) + assert.Equal(t, test.stateful, sf.states) + }) + } +} diff --git a/vendor/github.com/elastic/beats/filebeat/beater/filebeat.go b/vendor/github.com/elastic/beats/filebeat/beater/filebeat.go index 0d7ef669..cb42d018 100644 --- a/vendor/github.com/elastic/beats/filebeat/beater/filebeat.go +++ b/vendor/github.com/elastic/beats/filebeat/beater/filebeat.go @@ -3,6 +3,7 @@ package beater import ( "flag" "fmt" + "strings" "github.com/joeshaw/multierror" "github.com/pkg/errors" @@ -15,7 +16,9 @@ import ( "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/monitoring" "github.com/elastic/beats/libbeat/outputs/elasticsearch" + "github.com/elastic/beats/libbeat/setup/kibana" + fbautodiscover "github.com/elastic/beats/filebeat/autodiscover" "github.com/elastic/beats/filebeat/channel" cfg "github.com/elastic/beats/filebeat/config" "github.com/elastic/beats/filebeat/crawler" @@ -54,6 +57,22 @@ func New(b *beat.Beat, rawConfig *common.Config) (beat.Beater, error) { return nil, err } + if len(config.Prospectors) > 0 { + cfgwarn.Deprecate("7.0.0", "prospectors are deprecated, Use `inputs` instead.") + if len(config.Inputs) > 0 { + return nil, fmt.Errorf("prospectors and inputs used in the configuration file, define only inputs not both") + } + config.Inputs = config.Prospectors + } + + if config.ConfigProspector != nil { + cfgwarn.Deprecate("7.0.0", "config.prospectors are deprecated, Use `config.inputs` instead.") + if config.ConfigInput != nil { + return nil, fmt.Errorf("config.prospectors and config.inputs used in the configuration file, define only config.inputs not both") + } + config.ConfigInput = config.ConfigProspector + } + moduleRegistry, err := fileset.NewModuleRegistry(config.Modules, b.Info.Version, true) if err != nil { return nil, err @@ -62,7 +81,7 @@ func New(b *beat.Beat, rawConfig *common.Config) (beat.Beater, error) { logp.Info("Enabled modules/filesets: %s", moduleRegistry.InfoString()) } - moduleProspectors, err := moduleRegistry.GetProspectorConfigs() + moduleInputs, err := moduleRegistry.GetInputConfigs() if err != nil { return nil, err } @@ -71,28 +90,30 @@ func New(b *beat.Beat, rawConfig *common.Config) (beat.Beater, error) { return nil, err } - // Add prospectors created by the modules - config.Prospectors = append(config.Prospectors, moduleProspectors...) + // Add inputs created by the modules + config.Inputs = append(config.Inputs, moduleInputs...) - haveEnabledProspectors := false - for _, prospector := range config.Prospectors { - if prospector.Enabled() { - haveEnabledProspectors = true - break - } + enabledInputs := config.ListEnabledInputs() + var haveEnabledInputs bool + if len(enabledInputs) > 0 { + haveEnabledInputs = true } - if !config.ConfigProspector.Enabled() && !config.ConfigModules.Enabled() && !haveEnabledProspectors && config.Autodiscover == nil { + if !config.ConfigInput.Enabled() && !config.ConfigModules.Enabled() && !haveEnabledInputs && config.Autodiscover == nil { if !b.InSetupCmd { - return nil, errors.New("No modules or prospectors enabled and configuration reloading disabled. What files do you want me to watch?") + return nil, errors.New("no modules or inputs enabled and configuration reloading disabled. What files do you want me to watch?") } // in the `setup` command, log this only as a warning logp.Warn("Setup called, but no modules enabled.") } - if *once && config.ConfigProspector.Enabled() && config.ConfigModules.Enabled() { - return nil, errors.New("prospector configs and -once cannot be used together") + if *once && config.ConfigInput.Enabled() && config.ConfigModules.Enabled() { + return nil, errors.New("input configs and -once cannot be used together") + } + + if config.IsInputEnabled("stdin") && len(enabledInputs) > 1 { + return nil, fmt.Errorf("stdin requires to be run in exclusive mode, configured inputs: %s", strings.Join(enabledInputs, ", ")) } fb := &Filebeat{ @@ -102,12 +123,36 @@ func New(b *beat.Beat, rawConfig *common.Config) (beat.Beater, error) { } // register `setup` callback for ML jobs - b.SetupMLCallback = func(b *beat.Beat) error { - return fb.loadModulesML(b) + b.SetupMLCallback = func(b *beat.Beat, kibanaConfig *common.Config) error { + return fb.loadModulesML(b, kibanaConfig) + } + + err = fb.setupPipelineLoaderCallback(b) + if err != nil { + return nil, err } + return fb, nil } +func (fb *Filebeat) setupPipelineLoaderCallback(b *beat.Beat) error { + if !fb.moduleRegistry.Empty() { + overwritePipelines := fb.config.OverwritePipelines + if b.InSetupCmd { + overwritePipelines = true + } + + b.OverwritePipelinesCallback = func(esConfig *common.Config) error { + esClient, err := elasticsearch.NewConnectedClient(esConfig) + if err != nil { + return err + } + return fb.moduleRegistry.LoadPipelines(esClient, overwritePipelines) + } + } + return nil +} + // loadModulesPipelines is called when modules are configured to do the initial // setup. func (fb *Filebeat) loadModulesPipelines(b *beat.Beat) error { @@ -116,20 +161,26 @@ func (fb *Filebeat) loadModulesPipelines(b *beat.Beat) error { return nil } + overwritePipelines := fb.config.OverwritePipelines + if b.InSetupCmd { + overwritePipelines = true + } + // register pipeline loading to happen every time a new ES connection is // established callback := func(esClient *elasticsearch.Client) error { - return fb.moduleRegistry.LoadPipelines(esClient) + return fb.moduleRegistry.LoadPipelines(esClient, overwritePipelines) } elasticsearch.RegisterConnectCallback(callback) return nil } -func (fb *Filebeat) loadModulesML(b *beat.Beat) error { - logp.Debug("machine-learning", "Setting up ML jobs for modules") +func (fb *Filebeat) loadModulesML(b *beat.Beat, kibanaConfig *common.Config) error { var errs multierror.Errors + logp.Debug("machine-learning", "Setting up ML jobs for modules") + if b.Config.Output.Name() != "elasticsearch" { logp.Warn("Filebeat is unable to load the Xpack Machine Learning configurations for the" + " modules because the Elasticsearch output is not configured/enabled.") @@ -141,7 +192,34 @@ func (fb *Filebeat) loadModulesML(b *beat.Beat) error { if err != nil { return errors.Errorf("Error creating Elasticsearch client: %v", err) } - if err := fb.moduleRegistry.LoadML(esClient); err != nil { + + if kibanaConfig == nil { + kibanaConfig = common.NewConfig() + } + + if esConfig.Enabled() { + username, _ := esConfig.String("username", -1) + password, _ := esConfig.String("password", -1) + + if !kibanaConfig.HasField("username") && username != "" { + kibanaConfig.SetString("username", -1, username) + } + if !kibanaConfig.HasField("password") && password != "" { + kibanaConfig.SetString("password", -1, password) + } + } + + kibanaClient, err := kibana.NewKibanaClient(kibanaConfig) + if err != nil { + return errors.Errorf("Error creating Kibana client: %v", err) + } + + kibanaVersion, err := common.NewVersion(kibanaClient.GetVersion()) + if err != nil { + return errors.Errorf("Error checking Kibana version: %v", err) + } + + if err := setupMLBasedOnVersion(fb.moduleRegistry, esClient, kibanaClient, kibanaVersion); err != nil { errs = append(errs, err) } @@ -167,15 +245,30 @@ func (fb *Filebeat) loadModulesML(b *beat.Beat) error { continue } - if err := set.LoadML(esClient); err != nil { + if err := setupMLBasedOnVersion(set, esClient, kibanaClient, kibanaVersion); err != nil { errs = append(errs, err) } + } } return errs.Err() } +func setupMLBasedOnVersion(reg *fileset.ModuleRegistry, esClient *elasticsearch.Client, kibanaClient *kibana.Client, kibanaVersion *common.Version) error { + if isElasticsearchLoads(kibanaVersion) { + return reg.LoadML(esClient) + } + return reg.SetupML(esClient, kibanaClient) +} + +func isElasticsearchLoads(kibanaVersion *common.Version) bool { + if kibanaVersion.Major < 6 || kibanaVersion.Major == 6 && kibanaVersion.Minor < 1 { + return true + } + return false +} + // Run allows the beater to be run as a beat. func (fb *Filebeat) Run(b *beat.Beat) error { var err error @@ -200,7 +293,7 @@ func (fb *Filebeat) Run(b *beat.Beat) error { finishedLogger := newFinishedLogger(wgEvents) // Setup registrar to persist state - registrar, err := registrar.New(config.RegistryFile, config.RegistryFlush, finishedLogger) + registrar, err := registrar.New(config.RegistryFile, config.RegistryFilePermissions, config.RegistryFlush, finishedLogger) if err != nil { logp.Err("Could not init registrar: %v", err) return err @@ -210,7 +303,7 @@ func (fb *Filebeat) Run(b *beat.Beat) error { registrarChannel := newRegistrarLogger(registrar) err = b.Publisher.SetACKHandler(beat.PipelineACKHandler{ - ACKEvents: newEventACKer(registrarChannel).ackEvents, + ACKEvents: newEventACKer(finishedLogger, registrarChannel).ackEvents, }) if err != nil { logp.Err("Failed to install the registry with the publisher pipeline: %v", err) @@ -220,7 +313,7 @@ func (fb *Filebeat) Run(b *beat.Beat) error { outDone := make(chan struct{}) // outDone closes down all active pipeline connections crawler, err := crawler.New( channel.NewOutletFactory(outDone, b.Publisher, wgEvents).Create, - config.Prospectors, + config.Inputs, b.Info.Version, fb.done, *once) @@ -261,7 +354,11 @@ func (fb *Filebeat) Run(b *beat.Beat) error { logp.Warn(pipelinesWarning) } - err = crawler.Start(registrar, config.ConfigProspector, config.ConfigModules, pipelineLoaderFactory) + if config.OverwritePipelines { + logp.Debug("modules", "Existing Ingest pipelines will be updated") + } + + err = crawler.Start(registrar, config.ConfigInput, config.ConfigModules, pipelineLoaderFactory, config.OverwritePipelines) if err != nil { crawler.Stop() return err @@ -279,7 +376,7 @@ func (fb *Filebeat) Run(b *beat.Beat) error { var adiscover *autodiscover.Autodiscover if fb.config.Autodiscover != nil { - adapter := NewAutodiscoverAdapter(crawler.ProspectorsFactory, crawler.ModulesFactory) + adapter := fbautodiscover.NewAutodiscoverAdapter(crawler.InputsFactory, crawler.ModulesFactory) adiscover, err = autodiscover.NewAutodiscover("filebeat", adapter, config.Autodiscover) if err != nil { return err @@ -291,7 +388,7 @@ func (fb *Filebeat) Run(b *beat.Beat) error { waitFinished.AddChan(fb.done) waitFinished.Wait() - // Stop autodiscover -> Stop crawler -> stop prospectors -> stop harvesters + // Stop autodiscover -> Stop crawler -> stop inputs -> stop harvesters // Note: waiting for crawlers to stop here in order to install wgEvents.Wait // after all events have been enqueued for publishing. Otherwise wgEvents.Wait // or publisher might panic due to concurrent updates. diff --git a/vendor/github.com/elastic/beats/filebeat/channel/factory.go b/vendor/github.com/elastic/beats/filebeat/channel/factory.go index 025df89a..cf3b2de3 100644 --- a/vendor/github.com/elastic/beats/filebeat/channel/factory.go +++ b/vendor/github.com/elastic/beats/filebeat/channel/factory.go @@ -24,15 +24,15 @@ type clientEventer struct { wgEvents eventCounter } -// prospectorOutletConfig defines common prospector settings +// inputOutletConfig defines common input settings // for the publisher pipline. -type prospectorOutletConfig struct { +type inputOutletConfig struct { // event processing common.EventMetadata `config:",inline"` // Fields and tags to add to events. Processors processors.PluginConfig `config:"processors"` // implicit event fields - Type string `config:"type"` // prospector.type + Type string `config:"type"` // input.type // hidden filebeat modules settings Module string `config:"_module_name"` // hidden setting @@ -44,7 +44,7 @@ type prospectorOutletConfig struct { } // NewOutletFactory creates a new outlet factory for -// connecting a prospector to the publisher pipeline. +// connecting an input to the publisher pipeline. func NewOutletFactory( done <-chan struct{}, pipeline beat.Pipeline, @@ -63,12 +63,12 @@ func NewOutletFactory( return o } -// Create builds a new Outleter, while applying common prospector settings. -// Prospectors and all harvesters use the same pipeline client instance. +// Create builds a new Outleter, while applying common input settings. +// Inputs and all harvesters use the same pipeline client instance. // This guarantees ordering between events as required by the registrar for // file.State updates func (f *OutletFactory) Create(cfg *common.Config, dynFields *common.MapStrPointer) (Outleter, error) { - config := prospectorOutletConfig{} + config := inputOutletConfig{} if err := cfg.Unpack(&config); err != nil { return nil, err } @@ -99,6 +99,9 @@ func (f *OutletFactory) Create(cfg *common.Config, dynFields *common.MapStrPoint fields["prospector"] = common.MapStr{ "type": config.Type, } + fields["input"] = common.MapStr{ + "type": config.Type, + } } client, err := f.pipeline.ConnectWith(beat.ClientConfig{ diff --git a/vendor/github.com/elastic/beats/filebeat/channel/interface.go b/vendor/github.com/elastic/beats/filebeat/channel/interface.go index 2fbed63b..06bbcd43 100644 --- a/vendor/github.com/elastic/beats/filebeat/channel/interface.go +++ b/vendor/github.com/elastic/beats/filebeat/channel/interface.go @@ -8,7 +8,7 @@ import ( // Factory is used to create a new Outlet instance type Factory func(*common.Config, *common.MapStrPointer) (Outleter, error) -// Outleter is the outlet for a prospector +// Outleter is the outlet for an input type Outleter interface { Close() error OnEvent(data *util.Data) bool diff --git a/vendor/github.com/elastic/beats/filebeat/config/config.go b/vendor/github.com/elastic/beats/filebeat/config/config.go index d3a0ee31..2a1aa3ba 100644 --- a/vendor/github.com/elastic/beats/filebeat/config/config.go +++ b/vendor/github.com/elastic/beats/filebeat/config/config.go @@ -5,6 +5,7 @@ import ( "log" "os" "path/filepath" + "sort" "time" "github.com/elastic/beats/libbeat/autodiscover" @@ -21,21 +22,27 @@ const ( ) type Config struct { - Prospectors []*common.Config `config:"prospectors"` - RegistryFile string `config:"registry_file"` - RegistryFlush time.Duration `config:"registry_flush"` - ConfigDir string `config:"config_dir"` - ShutdownTimeout time.Duration `config:"shutdown_timeout"` - Modules []*common.Config `config:"modules"` - ConfigProspector *common.Config `config:"config.prospectors"` - ConfigModules *common.Config `config:"config.modules"` - Autodiscover *autodiscover.Config `config:"autodiscover"` + Inputs []*common.Config `config:"inputs"` + Prospectors []*common.Config `config:"prospectors"` + RegistryFile string `config:"registry_file"` + RegistryFilePermissions os.FileMode `config:"registry_file_permissions"` + RegistryFlush time.Duration `config:"registry_flush"` + ConfigDir string `config:"config_dir"` + ShutdownTimeout time.Duration `config:"shutdown_timeout"` + Modules []*common.Config `config:"modules"` + ConfigInput *common.Config `config:"config.inputs"` + ConfigProspector *common.Config `config:"config.prospectors"` + ConfigModules *common.Config `config:"config.modules"` + Autodiscover *autodiscover.Config `config:"autodiscover"` + OverwritePipelines bool `config:"overwrite_pipelines"` } var ( DefaultConfig = Config{ - RegistryFile: "registry", - ShutdownTimeout: 0, + RegistryFile: "registry", + RegistryFilePermissions: 0600, + ShutdownTimeout: 0, + OverwritePipelines: false, } ) @@ -82,7 +89,15 @@ func mergeConfigFiles(configFiles []string, config *Config) error { return fmt.Errorf("Failed to read %s: %s", file, err) } - config.Prospectors = append(config.Prospectors, tmpConfig.Filebeat.Prospectors...) + if len(tmpConfig.Filebeat.Prospectors) > 0 { + cfgwarn.Deprecate("7.0.0", "prospectors are deprecated, Use `inputs` instead.") + if len(tmpConfig.Filebeat.Inputs) > 0 { + return fmt.Errorf("prospectors and inputs used in the configuration file, define only inputs not both") + } + tmpConfig.Filebeat.Inputs = append(tmpConfig.Filebeat.Inputs, tmpConfig.Filebeat.Prospectors...) + } + + config.Inputs = append(config.Inputs, tmpConfig.Filebeat.Inputs...) } return nil @@ -97,7 +112,7 @@ func (config *Config) FetchConfigs() error { return nil } - cfgwarn.Deprecate("7.0.0", "config_dir is deprecated. Use `filebeat.config.prospectors` instead.") + cfgwarn.Deprecate("7.0.0", "config_dir is deprecated. Use `filebeat.config.inputs` instead.") // If configDir is relative, consider it relative to the config path configDir = paths.Resolve(paths.Config, configDir) @@ -120,3 +135,30 @@ func (config *Config) FetchConfigs() error { return nil } + +// ListEnabledInputs returns a list of enabled inputs sorted by alphabetical order. +func (config *Config) ListEnabledInputs() []string { + t := struct { + Type string `config:"type"` + }{} + var inputs []string + for _, input := range config.Inputs { + if input.Enabled() { + input.Unpack(&t) + inputs = append(inputs, t.Type) + } + } + sort.Strings(inputs) + return inputs +} + +// IsInputEnabled returns true if the plugin name is enabled. +func (config *Config) IsInputEnabled(name string) bool { + enabledInputs := config.ListEnabledInputs() + for _, input := range enabledInputs { + if name == input { + return true + } + } + return false +} diff --git a/vendor/github.com/elastic/beats/filebeat/config/config_test.go b/vendor/github.com/elastic/beats/filebeat/config/config_test.go index 0c95a5fa..6c793783 100644 --- a/vendor/github.com/elastic/beats/filebeat/config/config_test.go +++ b/vendor/github.com/elastic/beats/filebeat/config/config_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/elastic/beats/libbeat/cfgfile" + "github.com/elastic/beats/libbeat/common" ) func TestReadConfig2(t *testing.T) { @@ -93,5 +94,83 @@ func TestMergeConfigFiles(t *testing.T) { config := &Config{} mergeConfigFiles(files, config) - assert.Equal(t, 4, len(config.Prospectors)) + assert.Equal(t, 4, len(config.Inputs)) +} + +func TestEnabledInputs(t *testing.T) { + stdinEnabled, err := common.NewConfigFrom(map[string]interface{}{ + "type": "stdin", + "enabled": true, + }) + if !assert.NoError(t, err) { + return + } + + udpDisabled, err := common.NewConfigFrom(map[string]interface{}{ + "type": "udp", + "enabled": false, + }) + if !assert.NoError(t, err) { + return + } + + logDisabled, err := common.NewConfigFrom(map[string]interface{}{ + "type": "log", + "enabled": false, + }) + if !assert.NoError(t, err) { + return + } + + t.Run("ListEnabledInputs", func(t *testing.T) { + tests := []struct { + name string + config *Config + expected []string + }{ + { + name: "all inputs disabled", + config: &Config{Inputs: []*common.Config{udpDisabled, logDisabled}}, + expected: []string{}, + }, + { + name: "all inputs enabled", + config: &Config{Inputs: []*common.Config{stdinEnabled}}, + expected: []string{"stdin"}, + }, + { + name: "disabled and enabled inputs", + config: &Config{Inputs: []*common.Config{stdinEnabled, udpDisabled, logDisabled}}, + expected: []string{"stdin"}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + assert.ElementsMatch(t, test.expected, test.config.ListEnabledInputs()) + }) + } + }) + + t.Run("IsInputEnabled", func(t *testing.T) { + config := &Config{Inputs: []*common.Config{stdinEnabled, udpDisabled, logDisabled}} + + tests := []struct { + name string + input string + expected bool + config *Config + }{ + {name: "input exists and enabled", input: "stdin", expected: true, config: config}, + {name: "input exists and disabled", input: "udp", expected: false, config: config}, + {name: "input doesn't exist", input: "redis", expected: false, config: config}, + {name: "no inputs are enabled", input: "redis", expected: false, config: &Config{}}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + assert.Equal(t, test.expected, config.IsInputEnabled(test.input)) + }) + } + }) } diff --git a/vendor/github.com/elastic/beats/filebeat/crawler/crawler.go b/vendor/github.com/elastic/beats/filebeat/crawler/crawler.go index 54a2162a..a1f92005 100644 --- a/vendor/github.com/elastic/beats/filebeat/crawler/crawler.go +++ b/vendor/github.com/elastic/beats/filebeat/crawler/crawler.go @@ -7,7 +7,7 @@ import ( "github.com/elastic/beats/filebeat/channel" "github.com/elastic/beats/filebeat/fileset" "github.com/elastic/beats/filebeat/input/file" - "github.com/elastic/beats/filebeat/prospector" + input "github.com/elastic/beats/filebeat/prospector" "github.com/elastic/beats/filebeat/registrar" "github.com/elastic/beats/libbeat/cfgfile" "github.com/elastic/beats/libbeat/common" @@ -17,57 +17,57 @@ import ( ) type Crawler struct { - prospectors map[uint64]*prospector.Prospector - prospectorConfigs []*common.Config - out channel.Factory - wg sync.WaitGroup - ProspectorsFactory cfgfile.RunnerFactory - ModulesFactory cfgfile.RunnerFactory - modulesReloader *cfgfile.Reloader - prospectorsReloader *cfgfile.Reloader - once bool - beatVersion string - beatDone chan struct{} + inputs map[uint64]*input.Runner + inputConfigs []*common.Config + out channel.Factory + wg sync.WaitGroup + InputsFactory cfgfile.RunnerFactory + ModulesFactory cfgfile.RunnerFactory + modulesReloader *cfgfile.Reloader + inputReloader *cfgfile.Reloader + once bool + beatVersion string + beatDone chan struct{} } -func New(out channel.Factory, prospectorConfigs []*common.Config, beatVersion string, beatDone chan struct{}, once bool) (*Crawler, error) { +func New(out channel.Factory, inputConfigs []*common.Config, beatVersion string, beatDone chan struct{}, once bool) (*Crawler, error) { return &Crawler{ - out: out, - prospectors: map[uint64]*prospector.Prospector{}, - prospectorConfigs: prospectorConfigs, - once: once, - beatVersion: beatVersion, - beatDone: beatDone, + out: out, + inputs: map[uint64]*input.Runner{}, + inputConfigs: inputConfigs, + once: once, + beatVersion: beatVersion, + beatDone: beatDone, }, nil } -// Start starts the crawler with all prospectors -func (c *Crawler) Start(r *registrar.Registrar, configProspectors *common.Config, - configModules *common.Config, pipelineLoaderFactory fileset.PipelineLoaderFactory) error { +// Start starts the crawler with all inputs +func (c *Crawler) Start(r *registrar.Registrar, configInputs *common.Config, + configModules *common.Config, pipelineLoaderFactory fileset.PipelineLoaderFactory, overwritePipelines bool) error { - logp.Info("Loading Prospectors: %v", len(c.prospectorConfigs)) + logp.Info("Loading Inputs: %v", len(c.inputConfigs)) // Prospect the globs/paths given on the command line and launch harvesters - for _, prospectorConfig := range c.prospectorConfigs { - err := c.startProspector(prospectorConfig, r.GetStates()) + for _, inputConfig := range c.inputConfigs { + err := c.startInput(inputConfig, r.GetStates()) if err != nil { return err } } - c.ProspectorsFactory = prospector.NewRunnerFactory(c.out, r, c.beatDone) - if configProspectors.Enabled() { - c.prospectorsReloader = cfgfile.NewReloader(configProspectors) - if err := c.prospectorsReloader.Check(c.ProspectorsFactory); err != nil { + c.InputsFactory = input.NewRunnerFactory(c.out, r, c.beatDone) + if configInputs.Enabled() { + c.inputReloader = cfgfile.NewReloader(configInputs) + if err := c.inputReloader.Check(c.InputsFactory); err != nil { return err } go func() { - c.prospectorsReloader.Run(c.ProspectorsFactory) + c.inputReloader.Run(c.InputsFactory) }() } - c.ModulesFactory = fileset.NewFactory(c.out, r, c.beatVersion, pipelineLoaderFactory, c.beatDone) + c.ModulesFactory = fileset.NewFactory(c.out, r, c.beatVersion, pipelineLoaderFactory, overwritePipelines, c.beatDone) if configModules.Enabled() { c.modulesReloader = cfgfile.NewReloader(configModules) if err := c.modulesReloader.Check(c.ModulesFactory); err != nil { @@ -79,26 +79,26 @@ func (c *Crawler) Start(r *registrar.Registrar, configProspectors *common.Config }() } - logp.Info("Loading and starting Prospectors completed. Enabled prospectors: %v", len(c.prospectors)) + logp.Info("Loading and starting Inputs completed. Enabled inputs: %v", len(c.inputs)) return nil } -func (c *Crawler) startProspector(config *common.Config, states []file.State) error { +func (c *Crawler) startInput(config *common.Config, states []file.State) error { if !config.Enabled() { return nil } - p, err := prospector.New(config, c.out, c.beatDone, states, nil) + p, err := input.New(config, c.out, c.beatDone, states, nil) if err != nil { - return fmt.Errorf("Error in initing prospector: %s", err) + return fmt.Errorf("Error in initing input: %s", err) } p.Once = c.once - if _, ok := c.prospectors[p.ID]; ok { - return fmt.Errorf("Prospector with same ID already exists: %d", p.ID) + if _, ok := c.inputs[p.ID]; ok { + return fmt.Errorf("Input with same ID already exists: %d", p.ID) } - c.prospectors[p.ID] = p + c.inputs[p.ID] = p p.Start() @@ -116,14 +116,14 @@ func (c *Crawler) Stop() { }() } - logp.Info("Stopping %v prospectors", len(c.prospectors)) - for _, p := range c.prospectors { - // Stop prospectors in parallel + logp.Info("Stopping %v inputs", len(c.inputs)) + for _, p := range c.inputs { + // Stop inputs in parallel asyncWaitStop(p.Stop) } - if c.prospectorsReloader != nil { - asyncWaitStop(c.prospectorsReloader.Stop) + if c.inputReloader != nil { + asyncWaitStop(c.inputReloader.Stop) } if c.modulesReloader != nil { diff --git a/vendor/github.com/elastic/beats/filebeat/docker-compose.yml b/vendor/github.com/elastic/beats/filebeat/docker-compose.yml index c0bd070d..f010c8c9 100644 --- a/vendor/github.com/elastic/beats/filebeat/docker-compose.yml +++ b/vendor/github.com/elastic/beats/filebeat/docker-compose.yml @@ -6,7 +6,7 @@ services: - proxy_dep env_file: - ${PWD}/build/test.env - - ${PWD}/prospector/redis/_meta/env + - ${PWD}/input/redis/_meta/env environment: - KIBANA_HOST=kibana - KIBANA_PORT=5601 @@ -37,4 +37,4 @@ services: service: kibana redis: - build: ${PWD}/prospector/redis/_meta + build: ${PWD}/input/redis/_meta diff --git a/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-docker-config.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-docker-config.asciidoc index 236e5107..19be3dfe 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-docker-config.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-docker-config.asciidoc @@ -1,4 +1,4 @@ -Filebeat supports templates for both prospectors and modules. +Filebeat supports templates for inputs and modules. ["source","yaml",subs="attributes"] ------------------------------------------------------------------------------------- @@ -7,7 +7,7 @@ filebeat.autodiscover: - type: docker templates: - condition: - equals: + contains: docker.container.image: redis config: - type: docker @@ -16,9 +16,9 @@ filebeat.autodiscover: exclude_lines: ["^\\s+[\\-`('.|_]"] # drop asciiart lines ------------------------------------------------------------------------------------- -This configuration launches a `docker` logs prospector for all containers running an image with `redis` in the name. +This configuration launches a `docker` logs input for all containers running an image with `redis` in the name. -If you are using modules, you can override the default prospector and use the docker prospector instead. +If you are using modules, you can override the default input and use the docker input instead. ["source","yaml",subs="attributes"] ------------------------------------------------------------------------------------- @@ -27,12 +27,12 @@ filebeat.autodiscover: - type: docker templates: - condition: - equals: - docker.container.image: "redis" + contains: + docker.container.image: redis config: - module: redis log: - prospector: + input: type: docker containers.ids: - "${data.docker.container.id}" diff --git a/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-hints.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-hints.asciidoc new file mode 100644 index 00000000..8e682c3a --- /dev/null +++ b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-hints.asciidoc @@ -0,0 +1,122 @@ +{beatname_uc} supports autodiscover based on hints from the provider. The hints system looks for +hints in Kubernetes Pod annotations or Docker labels that have the prefix `co.elastic.logs`. As soon as +the container starts, {beatname_uc} will check if it contains any hints and launch the proper config for +it. Hints tell {beatname_uc} how to get logs for the given container. By default logs will be retrieved +from the container using the `docker` input. You can use hints to modify this behavior. This is the full +list of supported hints: + +[float] +===== `co.elastic.logs/disable` + +Filebeat gets logs from all containers by default, you can set this hint to `true` to ignore +the output of the container. Filebeat won't read or send logs from it. + +[float] +===== `co.elastic.logs/multiline.*` + +Multiline settings. See <> for a full list of all supported options. + +[float] +===== `co.elastic.logs/include_lines` + +A list of regular expressions to match the lines that you want {beatname_uc} to include. +See <> for more info. + +[float] +===== `co.elastic.logs/exclude_lines` + +A list of regular expressions to match the lines that you want {beatname_uc} to exclude. +See <> for more info. + +[float] +===== `co.elastic.logs/module` + +Instead of using raw `docker` input, specifies the module to use to parse logs from the container. See +<> for the list of supported modules. + +[float] +===== `co.elastic.logs/fileset` + +When module is configured, map container logs to module filesets. You can either configure +a single fileset like this: + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +co.elastic.logs/fileset: access +------------------------------------------------------------------------------------- + +Or configure a fileset per stream in the container (stdout and stderr): + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +co.elastic.logs/fileset.stdout: access +co.elastic.logs/fileset.stderr: error +------------------------------------------------------------------------------------- + +[float] +==== Kubernetes + +Kubernetes autodiscover provider supports hints in Pod annotations. To enable it just set `hints.enabled`: + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +filebeat.autodiscover: + providers: + - type: kubernetes + hints.enabled: true +------------------------------------------------------------------------------------- + +You can annotate Kubernetes Pods with useful info to spin up {beatname_uc} inputs or modules: + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +annotations: + co.elastic.logs/multiline.pattern: '^\[' + co.elastic.logs/multiline.negate: true + co.elastic.logs/multiline.match: after +------------------------------------------------------------------------------------- + + +[float] +===== Multiple containers + +When a pod has multiple containers, the settings are shared unless you put the container name in the +hint. For example, these hints configure multiline settings for all containers in the pod, but set a +specific `exclude_lines` hint for the container called `sidecar`. + + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +annotations: + co.elastic.logs/multiline.pattern: '^\[' + co.elastic.logs/multiline.negate: true + co.elastic.logs/multiline.match: after + co.elastic.logs.sidecar/exlude_lines: '^DBG' +------------------------------------------------------------------------------------- + + + +[float] +==== Docker + +Docker autodiscover provider supports hints in labels. To enable it just set `hints.enabled`: + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- +filebeat.autodiscover: + providers: + - type: docker + hints.enabled: true +------------------------------------------------------------------------------------- + +You can label Docker containers with useful info to spin up {beatname_uc} inputs, for example: + +["source","yaml",subs="attributes"] +------------------------------------------------------------------------------------- + co.elastic.logs/module: nginx + co.elastic.logs/fileset.stdout: access + co.elastic.logs/fileset.stderr: error +------------------------------------------------------------------------------------- + +The above labels configure {beatname_uc} to use the Nginx module to harvest logs for this container. +Access logs will be retrieved from stdout stream, and error logs from stderr. diff --git a/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-kubernetes-config.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-kubernetes-config.asciidoc index ac4c6196..13927fd2 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-kubernetes-config.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/autodiscover-kubernetes-config.asciidoc @@ -1,4 +1,4 @@ -Filebeat supports templates for both prospectors and modules. +Filebeat supports templates for inputs and modules. ["source","yaml",subs="attributes"] ------------------------------------------------------------------------------------- @@ -16,10 +16,10 @@ filebeat.autodiscover: exclude_lines: ["^\\s+[\\-`('.|_]"] # drop asciiart lines ------------------------------------------------------------------------------------- -This configuration launches a `docker` logs prospector for all containers of pods running in the Kubernetes namespace +This configuration launches a `docker` logs input for all containers of pods running in the Kubernetes namespace `kube-system`. -If you are using modules, you can override the default prospector and use the docker prospector instead. +If you are using modules, you can override the default input and use the docker input instead. ["source","yaml",subs="attributes"] ------------------------------------------------------------------------------------- @@ -33,7 +33,7 @@ filebeat.autodiscover: config: - module: redis log: - prospector: + input: type: docker containers.ids: - "${data.kubernetes.container.id}" diff --git a/vendor/github.com/elastic/beats/filebeat/docs/configuring-howto.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/configuring-howto.asciidoc index f1e3b448..ff190ecd 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/configuring-howto.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/configuring-howto.asciidoc @@ -47,8 +47,6 @@ include::./filebeat-modules-options.asciidoc[] include::./filebeat-options.asciidoc[] -include::./multiple-prospectors.asciidoc[] - include::./multiline.asciidoc[] include::./filebeat-general-options.asciidoc[] diff --git a/vendor/github.com/elastic/beats/filebeat/docs/faq.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/faq.asciidoc index 1ee646e4..4963c09b 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/faq.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/faq.asciidoc @@ -1,29 +1,29 @@ [[faq]] == Frequently asked questions -This section contains frequently asked questions about Filebeat. Also check out the -https://discuss.elastic.co/c/beats/filebeat[Filebeat discussion forum]. +This section contains frequently asked questions about {beatname_uc}. Also check out the +https://discuss.elastic.co/c/beats/filebeat[{beatname_uc} discussion forum]. [float] [[filebeat-network-volumes]] === Can't read log files from network volumes? -We do not recommend reading log files from network volumes. Whenever possible, install Filebeat on the host machine and +We do not recommend reading log files from network volumes. Whenever possible, install {beatname_uc} on the host machine and send the log files directly from there. Reading files from network volumes (especially on Windows) can have unexpected side -effects. For example, changed file identifiers may result in Filebeat reading a log file from scratch again. +effects. For example, changed file identifiers may result in {beatname_uc} reading a log file from scratch again. [float] [[filebeat-not-collecting-lines]] -=== Filebeat isn't collecting lines from a file? +=== {beatname_uc} isn't collecting lines from a file? -Filebeat might be incorrectly configured or unable to send events to the output. To resolve the issue: +{beatname_uc} might be incorrectly configured or unable to send events to the output. To resolve the issue: * Make sure the config file specifies the correct path to the file that you are collecting. See <> for more information. -* Verify that the file is not older than the value specified by <>. ignore_older is disable by +* Verify that the file is not older than the value specified by <<{beatname_lc}-input-log-ignore-older,`ignore_older`>>. `ignore_older` is disable by default so this depends on the value you have set. You can change this behavior by specifying a different value for -<>. -* Make sure that Filebeat is able to send events to the configured output. Run Filebeat in debug mode to determine whether +<<{beatname_lc}-input-log-ignore-older,`ignore_older`>>. +* Make sure that {beatname_uc} is able to send events to the configured output. Run {beatname_uc} in debug mode to determine whether it's publishing events successfully: + ["source","sh",subs="attributes,callouts"] @@ -35,15 +35,15 @@ it's publishing events successfully: [[open-file-handlers]] === Too many open file handlers? -Filebeat keeps the file handler open in case it reaches the end of a file so that it can read new log lines in near real time. If Filebeat is harvesting a large number of files, the number of open files can become an issue. In most environments, the number of files that are actively updated is low. The `close_inactive` configuration option should be set accordingly to close files that are no longer active. +{beatname_uc} keeps the file handler open in case it reaches the end of a file so that it can read new log lines in near real time. If {beatname_uc} is harvesting a large number of files, the number of open files can become an issue. In most environments, the number of files that are actively updated is low. The `close_inactive` configuration option should be set accordingly to close files that are no longer active. There are additional configuration options that you can use to close file handlers, but all of them should be used carefully because they can have side effects. The options are: -* <> -* <> -* <> -* <> -* <> +* <<{beatname_lc}-input-log-close-renamed,`close_renamed`>> +* <<{beatname_lc}-input-log-close-removed,`close_removed`>> +* <<{beatname_lc}-input-log-close-eof,`close_eof`>> +* <<{beatname_lc}-input-log-close-timeout,`close_timeout`>> +* <<{beatname_lc}-input-log-harvester-limit,`harvester_limit`>> The `close_renamed` and `close_removed` options can be useful on Windows to resolve issues related to file rotation. See <>. The `close_eof` option can be useful in environments with a large number of files that have only very few entries. The `close_timeout` option is useful in environments where closing file handlers is more important than sending all log lines. For more details, see <>. @@ -53,36 +53,36 @@ Make sure that you read the documentation for these configuration options before [[reduce-registry-size]] === Registry file is too large? -Filebeat keeps the state of each file and persists the state to disk in the `registry_file`. The file state is used to continue file reading at a previous position when Filebeat is restarted. If a large number of new files are produced every day, the registry file might grow to be too large. To reduce the size of the registry file, there are two configuration options available: <> and <>. +{beatname_uc} keeps the state of each file and persists the state to disk in the `registry_file`. The file state is used to continue file reading at a previous position when {beatname_uc} is restarted. If a large number of new files are produced every day, the registry file might grow to be too large. To reduce the size of the registry file, there are two configuration options available: <<{beatname_lc}-input-log-clean-removed,`clean_removed`>> and <<{beatname_lc}-input-log-clean-inactive,`clean_inactive`>>. -For old files that you no longer touch and are ignored (see <>), we recommended that you use `clean_inactive`. If old files get removed from disk, then use the `clean_removed` option. +For old files that you no longer touch and are ignored (see <<{beatname_lc}-input-log-ignore-older,`ignore_older`>>), we recommended that you use `clean_inactive`. If old files get removed from disk, then use the `clean_removed` option. [float] [[inode-reuse-issue]] -=== Inode reuse causes Filebeat to skip lines? +=== Inode reuse causes {beatname_uc} to skip lines? -On Linux file systems, Filebeat uses the inode and device to identify files. When a file is removed from disk, the inode may be assigned to a new file. In use cases involving file rotation, if an old file is removed and a new one is created immediately afterwards, the new file may have the exact same inode as the file that was removed. In this case, Filebeat assumes that the new file is the same as the old and tries to continue reading at the old position, which is not correct. +On Linux file systems, {beatname_uc} uses the inode and device to identify files. When a file is removed from disk, the inode may be assigned to a new file. In use cases involving file rotation, if an old file is removed and a new one is created immediately afterwards, the new file may have the exact same inode as the file that was removed. In this case, {beatname_uc} assumes that the new file is the same as the old and tries to continue reading at the old position, which is not correct. -By default states are never removed from the registry file. To resolve the inode reuse issue, we recommend that you use the <> options, especially <>, to remove the state of inactive files. For example, if your files get rotated every 24 hours, and the rotated files are not updated anymore, you can set <> to 48 hours and <> to 72 hours. +By default states are never removed from the registry file. To resolve the inode reuse issue, we recommend that you use the <<{beatname_lc}-input-log-clean-options,`clean_*`>> options, especially <<{beatname_lc}-input-log-clean-inactive,`clean_inactive`>>, to remove the state of inactive files. For example, if your files get rotated every 24 hours, and the rotated files are not updated anymore, you can set <<{beatname_lc}-input-log-ignore-older,`ignore_older`>> to 48 hours and <<{beatname_lc}-input-log-clean-inactive,`clean_inactive`>> to 72 hours. -You can use <> for files that are removed from disk. Be aware that `clean_removed` cleans the file state from the registry whenever a file cannot be found during a scan. If the file shows up again later, it will be sent again from scratch. +You can use <<{beatname_lc}-input-log-clean-removed,`clean_removed`>> for files that are removed from disk. Be aware that `clean_removed` cleans the file state from the registry whenever a file cannot be found during a scan. If the file shows up again later, it will be sent again from scratch. [float] [[windows-file-rotation]] === Open file handlers cause issues with Windows file rotation? -On Windows, you might have problems renaming or removing files because Filebeat keeps the file handlers open. This can lead to issues with the file rotating system. To avoid this issue, you can use the <> and <> options together. +On Windows, you might have problems renaming or removing files because {beatname_uc} keeps the file handlers open. This can lead to issues with the file rotating system. To avoid this issue, you can use the <<{beatname_lc}-input-log-close-removed,`close_removed`>> and <<{beatname_lc}-input-log-close-renamed,`close_renamed`>> options together. -IMPORTANT: When you configure these options, files may be closed before the harvester has finished reading the files. If the file cannot be picked up again by the prospector and the harvester hasn't finish reading the file, the missing lines will never be sent to the output. +IMPORTANT: When you configure these options, files may be closed before the harvester has finished reading the files. If the file cannot be picked up again by the input and the harvester hasn't finish reading the file, the missing lines will never be sent to the output. [float] [[filebeat-cpu]] -=== Filebeat is using too much CPU? +=== {beatname_uc} is using too much CPU? -Filebeat might be configured to scan for files too frequently. Check the setting for `scan_frequency` in the `filebeat.yml` -config file. Setting `scan_frequency` to less than 1s may cause Filebeat to scan the disk in a tight loop. +{beatname_uc} might be configured to scan for files too frequently. Check the setting for `scan_frequency` in the `filebeat.yml` +config file. Setting `scan_frequency` to less than 1s may cause {beatname_uc} to scan the disk in a tight loop. [float] [[dashboard-fields-incorrect-filebeat]] @@ -105,28 +105,29 @@ curl -XPOST 'http://localhost:9200/filebeat-2016.08.09/_refresh' [float] [[newline-character-required-eof]] -=== Filebeat isn't shipping the last line of a file? +=== {beatname_uc} isn't shipping the last line of a file? -Filebeat uses a newline character to detect the end of an event. If lines are added incrementally to a file that's being -harvested, a newline character is required after the last line, or Filebeat will not read the last line of +{beatname_uc} uses a newline character to detect the end of an event. If lines are added incrementally to a file that's being +harvested, a newline character is required after the last line, or {beatname_uc} will not read the last line of the file. [float] [[faq-deleted-files-are-not-freed]] -=== Filebeat keeps open file handlers of deleted files for a long time? +=== {beatname_uc} keeps open file handlers of deleted files for a long time? -In the default behaviour, Filebeat opens the files and keeps them open until it +In the default behaviour, {beatname_uc} opens the files and keeps them open until it reaches the end of them. In situations when the configured output is blocked (e.g. Elasticsearch or Logstash is unavailable) for a long time, this can cause -Filebeat to keep file handlers to files that were deleted from the file system -in the mean time. As long as Filebeat keeps the deleted files open, the +{beatname_uc} to keep file handlers to files that were deleted from the file system +in the mean time. As long as {beatname_uc} keeps the deleted files open, the operating system doesn't free up the space on disk, which can lead to increase disk utilisation or even out of disk situations. -To mitigate this issue, you can set the <> setting to `5m`. This -will ensure every file handler is closed once every 5 minutes, regardless of -whether it reached EOF or not. Note that this option can lead to data loss if the -file is deleted before Filebeat reaches the end of the file. +To mitigate this issue, you can set the +<<{beatname_lc}-input-log-close-timeout>> setting to `5m`. This will ensure +every file handler is closed once every 5 minutes, regardless of whether it +reached EOF or not. Note that this option can lead to data loss if the file is +deleted before {beatname_uc} reaches the end of the file. include::../../libbeat/docs/faq-limit-bandwidth.asciidoc[] diff --git a/vendor/github.com/elastic/beats/filebeat/docs/fields.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/fields.asciidoc index e50ad1e9..bd23ef70 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/fields.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/fields.asciidoc @@ -17,11 +17,14 @@ grouped in the following categories: * <> * <> * <> +* <> * <> +* <> * <> * <> * <> * <> +* <> * <> * <> * <> @@ -52,25 +55,29 @@ Contains fields for the Apache2 HTTPD access logs. -[float] -=== `apache2.access.remote_ip` - +*`apache2.access.remote_ip`*:: ++ +-- type: keyword Client IP address. -[float] -=== `apache2.access.user_name` +-- +*`apache2.access.user_name`*:: ++ +-- type: keyword The user name used when basic authentication is used. -[float] -=== `apache2.access.method` +-- +*`apache2.access.method`*:: ++ +-- type: keyword example: GET @@ -78,33 +85,41 @@ example: GET The request HTTP method. -[float] -=== `apache2.access.url` +-- +*`apache2.access.url`*:: ++ +-- type: keyword The request HTTP URL. -[float] -=== `apache2.access.http_version` +-- +*`apache2.access.http_version`*:: ++ +-- type: keyword The HTTP version. -[float] -=== `apache2.access.response_code` +-- +*`apache2.access.response_code`*:: ++ +-- type: long The HTTP response code. -[float] -=== `apache2.access.body_sent.bytes` +-- +*`apache2.access.body_sent.bytes`*:: ++ +-- type: long format: bytes @@ -112,22 +127,28 @@ format: bytes The number of bytes of the server response body. -[float] -=== `apache2.access.referrer` +-- +*`apache2.access.referrer`*:: ++ +-- type: keyword The HTTP referrer. -[float] -=== `apache2.access.agent` +-- +*`apache2.access.agent`*:: ++ +-- type: text Contains the un-parsed user agent string. Only present if the user agent Elasticsearch plugin is not available or not used. +-- + [float] == user_agent fields @@ -135,41 +156,49 @@ Contains the parsed User agent field. Only present if the user agent Elasticsear -[float] -=== `apache2.access.user_agent.device` - +*`apache2.access.user_agent.device`*:: ++ +-- type: keyword The name of the physical device. -[float] -=== `apache2.access.user_agent.major` +-- +*`apache2.access.user_agent.major`*:: ++ +-- type: long The major version of the user agent. -[float] -=== `apache2.access.user_agent.minor` +-- +*`apache2.access.user_agent.minor`*:: ++ +-- type: long The minor version of the user agent. -[float] -=== `apache2.access.user_agent.patch` +-- +*`apache2.access.user_agent.patch`*:: ++ +-- type: keyword The patch version of the user agent. -[float] -=== `apache2.access.user_agent.name` +-- +*`apache2.access.user_agent.name`*:: ++ +-- type: keyword example: Chrome @@ -177,38 +206,48 @@ example: Chrome The name of the user agent. -[float] -=== `apache2.access.user_agent.os` +-- +*`apache2.access.user_agent.os`*:: ++ +-- type: keyword The name of the operating system. -[float] -=== `apache2.access.user_agent.os_major` +-- +*`apache2.access.user_agent.os_major`*:: ++ +-- type: long The major version of the operating system. -[float] -=== `apache2.access.user_agent.os_minor` +-- +*`apache2.access.user_agent.os_minor`*:: ++ +-- type: long The minor version of the operating system. -[float] -=== `apache2.access.user_agent.os_name` +-- +*`apache2.access.user_agent.os_name`*:: ++ +-- type: keyword The name of the operating system. +-- + [float] == geoip fields @@ -216,46 +255,56 @@ Contains GeoIP information gathered based on the remote_ip field. Only present i -[float] -=== `apache2.access.geoip.continent_name` - +*`apache2.access.geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `apache2.access.geoip.country_iso_code` +-- +*`apache2.access.geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `apache2.access.geoip.location` +-- +*`apache2.access.geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. -[float] -=== `apache2.access.geoip.region_name` +-- +*`apache2.access.geoip.region_name`*:: ++ +-- type: keyword The region name. -[float] -=== `apache2.access.geoip.city_name` +-- +*`apache2.access.geoip.city_name`*:: ++ +-- type: keyword The city name. +-- + [float] == error fields @@ -263,54 +312,66 @@ Fields from the Apache error logs. -[float] -=== `apache2.error.level` - +*`apache2.error.level`*:: ++ +-- type: keyword The severity level of the message. -[float] -=== `apache2.error.client` +-- +*`apache2.error.client`*:: ++ +-- type: keyword The IP address of the client that generated the error. -[float] -=== `apache2.error.message` +-- +*`apache2.error.message`*:: ++ +-- type: text The logged message. -[float] -=== `apache2.error.pid` +-- +*`apache2.error.pid`*:: ++ +-- type: long The process ID. -[float] -=== `apache2.error.tid` +-- +*`apache2.error.tid`*:: ++ +-- type: long The thread ID. -[float] -=== `apache2.error.module` +-- +*`apache2.error.module`*:: ++ +-- type: keyword The module producing the logged message. +-- + [[exported-fields-auditd]] == Auditd fields @@ -332,86 +393,112 @@ Fields from the Linux audit log. Not all fields are documented here because they -[float] -=== `auditd.log.record_type` - +*`auditd.log.record_type`*:: ++ +-- The audit event type. -[float] -=== `auditd.log.old_auid` +-- +*`auditd.log.old_auid`*:: ++ +-- For login events this is the old audit ID used for the user prior to this login. -[float] -=== `auditd.log.new_auid` +-- +*`auditd.log.new_auid`*:: ++ +-- For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). -[float] -=== `auditd.log.old_ses` +-- +*`auditd.log.old_ses`*:: ++ +-- For login events this is the old session ID used for the user prior to this login. -[float] -=== `auditd.log.new_ses` +-- +*`auditd.log.new_ses`*:: ++ +-- For login events this is the new session ID. It can be used to tie a user to future events by session ID. -[float] -=== `auditd.log.sequence` +-- +*`auditd.log.sequence`*:: ++ +-- type: long The audit event sequence number. -[float] -=== `auditd.log.acct` +-- +*`auditd.log.acct`*:: ++ +-- The user account name associated with the event. -[float] -=== `auditd.log.pid` +-- +*`auditd.log.pid`*:: ++ +-- The ID of the process. -[float] -=== `auditd.log.ppid` +-- +*`auditd.log.ppid`*:: ++ +-- The ID of the process. -[float] -=== `auditd.log.items` +-- +*`auditd.log.items`*:: ++ +-- The number of items in an event. -[float] -=== `auditd.log.item` +-- +*`auditd.log.item`*:: ++ +-- The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. -[float] -=== `auditd.log.a0` +-- +*`auditd.log.a0`*:: ++ +-- The first argument to the system call. -[float] -=== `auditd.log.res` +-- +*`auditd.log.res`*:: ++ +-- The result of the system call (success or failure). +-- + [float] == geoip fields @@ -419,46 +506,56 @@ Contains GeoIP information gathered based on the `auditd.log.addr` field. Only p -[float] -=== `auditd.log.geoip.continent_name` - +*`auditd.log.geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `auditd.log.geoip.city_name` +-- +*`auditd.log.geoip.city_name`*:: ++ +-- type: keyword The name of the city. -[float] -=== `auditd.log.geoip.region_name` +-- +*`auditd.log.geoip.region_name`*:: ++ +-- type: keyword The name of the region. -[float] -=== `auditd.log.geoip.country_iso_code` +-- +*`auditd.log.geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `auditd.log.geoip.location` +-- +*`auditd.log.geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. +-- + [[exported-fields-beat]] == Beat fields @@ -466,33 +563,41 @@ Contains common beat fields available in all event types. -[float] -=== `beat.name` - +*`beat.name`*:: ++ +-- The name of the Beat sending the log messages. If the Beat name is set in the configuration file, then that value is used. If it is not set, the hostname is used. To set the Beat name, use the `name` option in the configuration file. -[float] -=== `beat.hostname` +-- +*`beat.hostname`*:: ++ +-- The hostname as returned by the operating system on which the Beat is running. -[float] -=== `beat.timezone` +-- +*`beat.timezone`*:: ++ +-- The timezone as returned by the operating system on which the Beat is running. -[float] -=== `beat.version` +-- +*`beat.version`*:: ++ +-- The version of the beat that generated this event. -[float] -=== `@timestamp` +-- +*`@timestamp`*:: ++ +-- type: date example: August 26th 2016, 12:35:53.332 @@ -504,20 +609,26 @@ required: True The timestamp when the event log record was generated. -[float] -=== `tags` +-- +*`tags`*:: ++ +-- Arbitrary tags that can be set per Beat and per transaction type. -[float] -=== `fields` +-- +*`fields`*:: ++ +-- type: object Contains user configurable fields. +-- + [float] == error fields @@ -525,30 +636,36 @@ Error fields containing additional info in case of errors. -[float] -=== `error.message` - +*`error.message`*:: ++ +-- type: text Error message. -[float] -=== `error.code` +-- +*`error.code`*:: ++ +-- type: long Error code. -[float] -=== `error.type` +-- +*`error.type`*:: ++ +-- type: keyword Error type. +-- + [[exported-fields-cloud]] == Cloud provider metadata fields @@ -556,56 +673,70 @@ Metadata from cloud providers added by the add_cloud_metadata processor. -[float] -=== `meta.cloud.provider` - +*`meta.cloud.provider`*:: ++ +-- example: ec2 Name of the cloud provider. Possible values are ec2, gce, or digitalocean. -[float] -=== `meta.cloud.instance_id` +-- +*`meta.cloud.instance_id`*:: ++ +-- Instance ID of the host machine. -[float] -=== `meta.cloud.instance_name` +-- +*`meta.cloud.instance_name`*:: ++ +-- Instance name of the host machine. -[float] -=== `meta.cloud.machine_type` +-- +*`meta.cloud.machine_type`*:: ++ +-- example: t2.medium Machine type of the host machine. -[float] -=== `meta.cloud.availability_zone` +-- +*`meta.cloud.availability_zone`*:: ++ +-- example: us-east-1c Availability zone in which this host is running. -[float] -=== `meta.cloud.project_id` +-- +*`meta.cloud.project_id`*:: ++ +-- example: project-x Name of the project in Google Cloud. -[float] -=== `meta.cloud.region` +-- +*`meta.cloud.region`*:: ++ +-- Region in which this host is running. +-- + [[exported-fields-docker-processor]] == Docker fields @@ -614,144 +745,787 @@ Docker stats collected from Docker. -[float] -=== `docker.container.id` - +*`docker.container.id`*:: ++ +-- type: keyword Unique container id. -[float] -=== `docker.container.image` +-- +*`docker.container.image`*:: ++ +-- type: keyword Name of the image the container was built on. -[float] -=== `docker.container.name` +-- +*`docker.container.name`*:: ++ +-- type: keyword Container name. -[float] -=== `docker.container.labels` +-- +*`docker.container.labels`*:: ++ +-- type: object Image labels. -[[exported-fields-icinga]] -== Icinga fields - -Icinga Module - - +-- -[float] -== icinga fields +[[exported-fields-host-processor]] +== Host fields +Info collected for the host machine. -[float] -== debug fields -Contains fields for the Icinga debug logs. +*`host.name`*:: ++ +-- +type: keyword +Hostname. -[float] -=== `icinga.debug.facility` +-- +*`host.id`*:: ++ +-- type: keyword -Specifies what component of Icinga logged the message. +Unique host id. -[float] -=== `icinga.debug.severity` +-- +*`host.architecture`*:: ++ +-- type: keyword -Possible values are "debug", "notice", "information", "warning" or "critical". +Host architecture (e.g. x86_64, arm, ppc, mips). -[float] -=== `icinga.debug.message` +-- -type: text +*`host.os.platform`*:: ++ +-- +type: keyword -The logged message. +OS platform (e.g. centos, ubuntu, windows). -[float] -== main fields +-- -Contains fields for the Icinga main logs. +*`host.os.version`*:: ++ +-- +type: keyword +OS version. +-- + +*`host.os.family`*:: ++ +-- +type: keyword + +OS family (e.g. redhat, debian, freebsd, windows). + + +-- + +[[exported-fields-icinga]] +== Icinga fields + +Icinga Module + + + +[float] +== icinga fields + + + + +[float] +== debug fields + +Contains fields for the Icinga debug logs. + + + +*`icinga.debug.facility`*:: ++ +-- +type: keyword + +Specifies what component of Icinga logged the message. + + +-- + +*`icinga.debug.severity`*:: ++ +-- +type: keyword + +Possible values are "debug", "notice", "information", "warning" or "critical". + + +-- + +*`icinga.debug.message`*:: ++ +-- +type: text + +The logged message. + + +-- + [float] -=== `icinga.main.facility` +== main fields + +Contains fields for the Icinga main logs. + + + +*`icinga.main.facility`*:: ++ +-- +type: keyword + +Specifies what component of Icinga logged the message. + + +-- + +*`icinga.main.severity`*:: ++ +-- +type: keyword + +Possible values are "debug", "notice", "information", "warning" or "critical". + + +-- + +*`icinga.main.message`*:: ++ +-- +type: text + +The logged message. + + +-- + +[float] +== startup fields + +Contains fields for the Icinga startup logs. + + + +*`icinga.startup.facility`*:: ++ +-- +type: keyword + +Specifies what component of Icinga logged the message. + + +-- + +*`icinga.startup.severity`*:: ++ +-- +type: keyword + +Possible values are "debug", "notice", "information", "warning" or "critical". + + +-- + +*`icinga.startup.message`*:: ++ +-- +type: text + +The logged message. + + +-- + +[[exported-fields-iis]] +== IIS fields + +Module for parsing IIS log files. + + + +[float] +== iis fields + +Fields from IIS log files. + + + +[float] +== access fields + +Contains fields for IIS access logs. + + + +*`iis.access.server_ip`*:: ++ +-- +type: keyword + +The server IP address. + + +-- + +*`iis.access.method`*:: ++ +-- +type: keyword + +example: GET + +The request HTTP method. + + +-- + +*`iis.access.url`*:: ++ +-- +type: keyword + +The request HTTP URL. + + +-- + +*`iis.access.query_string`*:: ++ +-- +type: keyword + +The request query string, if any. + + +-- + +*`iis.access.port`*:: ++ +-- +type: long + +The request port number. + + +-- + +*`iis.access.user_name`*:: ++ +-- +type: keyword + +The user name used when basic authentication is used. + + +-- + +*`iis.access.remote_ip`*:: ++ +-- +type: keyword + +The client IP address. + + +-- + +*`iis.access.referrer`*:: ++ +-- +type: keyword + +The HTTP referrer. + + +-- + +*`iis.access.response_code`*:: ++ +-- +type: long + +The HTTP response code. + + +-- + +*`iis.access.sub_status`*:: ++ +-- +type: long + +The HTTP substatus code. + + +-- + +*`iis.access.win32_status`*:: ++ +-- +type: long + +The Windows status code. + + +-- + +*`iis.access.request_time_ms`*:: ++ +-- +type: long + +The request time in milliseconds. + + +-- + +*`iis.access.site_name`*:: ++ +-- +type: keyword + +The site name and instance number. + + +-- + +*`iis.access.server_name`*:: ++ +-- +type: keyword + +The name of the server on which the log file entry was generated. + + +-- + +*`iis.access.http_version`*:: ++ +-- +type: keyword + +The HTTP version. + + +-- + +*`iis.access.cookie`*:: ++ +-- +type: keyword + +The content of the cookie sent or received, if any. + + +-- + +*`iis.access.hostname`*:: ++ +-- +type: keyword + +The host header name, if any. + + +-- + +*`iis.access.body_sent.bytes`*:: ++ +-- +type: long + +format: bytes + +The number of bytes of the server response body. + + +-- + +*`iis.access.body_received.bytes`*:: ++ +-- +type: long + +format: bytes + +The number of bytes of the server request body. + + +-- + +*`iis.access.agent`*:: ++ +-- +type: text + +Contains the un-parsed user agent string. Only present if the user agent Elasticsearch plugin is not available or not used. + + +-- + +[float] +== user_agent fields + +Contains the parsed user agent field. Only present if the user agent Elasticsearch plugin is available and used. + + + +*`iis.access.user_agent.device`*:: ++ +-- +type: keyword + +The name of the physical device. + + +-- + +*`iis.access.user_agent.major`*:: ++ +-- +type: long + +The major version of the user agent. + + +-- + +*`iis.access.user_agent.minor`*:: ++ +-- +type: long + +The minor version of the user agent. + + +-- + +*`iis.access.user_agent.patch`*:: ++ +-- +type: keyword + +The patch version of the user agent. + + +-- + +*`iis.access.user_agent.name`*:: ++ +-- +type: keyword + +example: Chrome + +The name of the user agent. + + +-- + +*`iis.access.user_agent.os`*:: ++ +-- +type: keyword + +The name of the operating system. + + +-- + +*`iis.access.user_agent.os_major`*:: ++ +-- +type: long + +The major version of the operating system. + + +-- + +*`iis.access.user_agent.os_minor`*:: ++ +-- +type: long + +The minor version of the operating system. + + +-- + +*`iis.access.user_agent.os_name`*:: ++ +-- +type: keyword + +The name of the operating system. + + +-- + +[float] +== geoip fields + +Contains GeoIP information gathered based on the remote_ip field. Only present if the GeoIP Elasticsearch plugin is available and used. + + + +*`iis.access.geoip.continent_name`*:: ++ +-- +type: keyword + +The name of the continent. + + +-- + +*`iis.access.geoip.country_iso_code`*:: ++ +-- +type: keyword + +Country ISO code. + + +-- + +*`iis.access.geoip.location`*:: ++ +-- +type: geo_point + +The longitude and latitude. + + +-- + +*`iis.access.geoip.region_name`*:: ++ +-- +type: keyword + +The region name. + + +-- + +*`iis.access.geoip.city_name`*:: ++ +-- +type: keyword + +The city name. + + +-- + +[float] +== error fields + +Contains fields for IIS error logs. + + + +*`iis.error.remote_ip`*:: ++ +-- +type: keyword + +The client IP address. + + +-- + +*`iis.error.remote_port`*:: ++ +-- +type: long + +The client port number. + + +-- +*`iis.error.server_ip`*:: ++ +-- type: keyword -Specifies what component of Icinga logged the message. +The server IP address. -[float] -=== `icinga.main.severity` +-- + +*`iis.error.server_port`*:: ++ +-- +type: long + +The server port number. + +-- + +*`iis.error.http_version`*:: ++ +-- type: keyword -Possible values are "debug", "notice", "information", "warning" or "critical". +The HTTP version. -[float] -=== `icinga.main.message` +-- -type: text +*`iis.error.method`*:: ++ +-- +type: keyword -The logged message. +example: GET +The request HTTP method. -[float] -== startup fields -Contains fields for the Icinga startup logs. +-- + +*`iis.error.url`*:: ++ +-- +type: keyword +The request HTTP URL. -[float] -=== `icinga.startup.facility` +-- + +*`iis.error.response_code`*:: ++ +-- +type: long + +The HTTP response code. + + +-- +*`iis.error.reason_phrase`*:: ++ +-- type: keyword -Specifies what component of Icinga logged the message. +The HTTP reason phrase. -[float] -=== `icinga.startup.severity` +-- +*`iis.error.queue_name`*:: ++ +-- type: keyword -Possible values are "debug", "notice", "information", "warning" or "critical". +The IIS application pool name. +-- + [float] -=== `icinga.startup.message` +== geoip fields -type: text +Contains GeoIP information gathered based on the remote_ip field. Only present if the GeoIP Elasticsearch plugin is available and used. -The logged message. +*`iis.error.geoip.continent_name`*:: ++ +-- +type: keyword + +The name of the continent. + + +-- + +*`iis.error.geoip.country_iso_code`*:: ++ +-- +type: keyword + +Country ISO code. + + +-- + +*`iis.error.geoip.location`*:: ++ +-- +type: geo_point + +The longitude and latitude. + + +-- + +*`iis.error.geoip.region_name`*:: ++ +-- +type: keyword + +The region name. + + +-- + +*`iis.error.geoip.city_name`*:: ++ +-- +type: keyword + +The city name. + + +-- + [[exported-fields-kafka]] == Kafka fields @@ -772,44 +1546,54 @@ Kafka log lines. -[float] -=== `kafka.log.timestamp` - +*`kafka.log.timestamp`*:: ++ +-- The timestamp from the log line. -[float] -=== `kafka.log.level` +-- +*`kafka.log.level`*:: ++ +-- example: WARN The log level. -[float] -=== `kafka.log.message` +-- +*`kafka.log.message`*:: ++ +-- type: text The logged message. -[float] -=== `kafka.log.component` +-- +*`kafka.log.component`*:: ++ +-- type: keyword Component the log is coming from. -[float] -=== `kafka.log.class` +-- +*`kafka.log.class`*:: ++ +-- type: text Java class the log is coming from. +-- + [float] == trace fields @@ -817,30 +1601,36 @@ Trace in the log line. -[float] -=== `kafka.log.trace.class` - +*`kafka.log.trace.class`*:: ++ +-- type: keyword Java class the trace is coming from. -[float] -=== `kafka.log.trace.message` +-- +*`kafka.log.trace.message`*:: ++ +-- type: text Message part of the trace. -[float] -=== `kafka.log.trace.full` +-- +*`kafka.log.trace.full`*:: ++ +-- type: text The full trace in the log line. +-- + [[exported-fields-kubernetes-processor]] == Kubernetes fields @@ -849,62 +1639,76 @@ Kubernetes metadata added by the kubernetes processor -[float] -=== `kubernetes.pod.name` - +*`kubernetes.pod.name`*:: ++ +-- type: keyword Kubernetes pod name -[float] -=== `kubernetes.namespace` +-- +*`kubernetes.namespace`*:: ++ +-- type: keyword Kubernetes namespace -[float] -=== `kubernetes.node.name` +-- +*`kubernetes.node.name`*:: ++ +-- type: keyword Kubernetes node name -[float] -=== `kubernetes.labels` +-- +*`kubernetes.labels`*:: ++ +-- type: object Kubernetes labels map -[float] -=== `kubernetes.annotations` +-- +*`kubernetes.annotations`*:: ++ +-- type: object Kubernetes annotations map -[float] -=== `kubernetes.container.name` +-- +*`kubernetes.container.name`*:: ++ +-- type: keyword Kubernetes container name -[float] -=== `kubernetes.container.image` +-- +*`kubernetes.container.image`*:: ++ +-- type: keyword Kubernetes container image +-- + [[exported-fields-log]] == Log file content fields @@ -912,9 +1716,9 @@ Contains log file lines. -[float] -=== `source` - +*`source`*:: ++ +-- type: keyword required: True @@ -922,9 +1726,11 @@ required: True The file from which the line was read. This field contains the absolute path to the file. For example: `/var/log/system.log`. -[float] -=== `offset` +-- +*`offset`*:: ++ +-- type: long required: False @@ -932,9 +1738,11 @@ required: False The file offset the reported line starts at. -[float] -=== `message` +-- +*`message`*:: ++ +-- type: text required: True @@ -942,9 +1750,11 @@ required: True The content of the line read from the log file. -[float] -=== `stream` +-- +*`stream`*:: ++ +-- type: keyword required: False @@ -952,32 +1762,136 @@ required: False Log stream when reading container logs, can be 'stdout' or 'stderr' -[float] -=== `prospector.type` +-- +*`prospector.type`*:: ++ +-- required: True -The prospector type from which the event was generated. This field is set to the value specified for the `type` option in the prospector section of the Filebeat config file. +The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. (DEPRECATED: see `input.type`) -[float] -=== `read_timestamp` +-- +*`input.type`*:: ++ +-- +required: True + +The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. + + +-- + +*`read_timestamp`*:: ++ +-- In case the ingest pipeline parses the timestamp from the log contents, it stores the original `@timestamp` (representing the time when the log line was read) in this field. -[float] -=== `fileset.module` +-- +*`fileset.module`*:: ++ +-- The Filebeat module that generated this event. -[float] -=== `fileset.name` +-- +*`fileset.name`*:: ++ +-- The Filebeat fileset that generated this event. +-- + +*`syslog.facility`*:: ++ +-- +type: long + +required: False + +The facility extracted from the priority. + + +-- + +*`syslog.priority`*:: ++ +-- +type: long + +required: False + +The priority of the syslog event. + + +-- + +*`syslog.severity_label`*:: ++ +-- +type: keyword + +required: False + +The human readable severity. + + +-- + +*`syslog.facility_label`*:: ++ +-- +type: keyword + +required: False + +The human readable facility. + + +-- + +*`process.program`*:: ++ +-- +type: keyword + +required: False + +The name of the program. + + +-- + +*`process.pid`*:: ++ +-- +type: long + +required: False + +The pid of the process. + + +-- + +*`event.severity`*:: ++ +-- +type: long + +required: False + +The severity of the event. + + +-- + [[exported-fields-logstash]] == logstash fields @@ -998,46 +1912,56 @@ Fields from the Logstash logs. -[float] -=== `logstash.log.message` - +*`logstash.log.message`*:: ++ +-- type: text Contains the un-parsed log message -[float] -=== `logstash.log.level` +-- +*`logstash.log.level`*:: ++ +-- type: keyword The log level of the message, this correspond to Log4j levels. -[float] -=== `logstash.log.module` +-- +*`logstash.log.module`*:: ++ +-- type: keyword The module or class where the event originate. -[float] -=== `logstash.log.thread` +-- +*`logstash.log.thread`*:: ++ +-- type: text Information about the running thread where the log originate. -[float] -=== `logstash.log.log_event` +-- +*`logstash.log.log_event`*:: ++ +-- type: object key and value debugging information. +-- + [float] == slowlog fields @@ -1045,94 +1969,183 @@ slowlog -[float] -=== `logstash.slowlog.message` - +*`logstash.slowlog.message`*:: ++ +-- type: text Contains the un-parsed log message -[float] -=== `logstash.slowlog.level` +-- +*`logstash.slowlog.level`*:: ++ +-- type: keyword The log level of the message, this correspond to Log4j levels. -[float] -=== `logstash.slowlog.module` +-- +*`logstash.slowlog.module`*:: ++ +-- type: keyword The module or class where the event originate. -[float] -=== `logstash.slowlog.thread` +-- +*`logstash.slowlog.thread`*:: ++ +-- type: text Information about the running thread where the log originate. -[float] -=== `logstash.slowlog.event` +-- +*`logstash.slowlog.event`*:: ++ +-- type: text Raw dump of the original event -[float] -=== `logstash.slowlog.plugin_name` +-- +*`logstash.slowlog.plugin_name`*:: ++ +-- type: keyword Name of the plugin -[float] -=== `logstash.slowlog.plugin_type` +-- +*`logstash.slowlog.plugin_type`*:: ++ +-- type: keyword Type of the plugin: Inputs, Filters, Outputs or Codecs. -[float] -=== `logstash.slowlog.took_in_millis` +-- +*`logstash.slowlog.took_in_millis`*:: ++ +-- type: long Execution time for the plugin in milliseconds. -[float] -=== `logstash.slowlog.took_in_nanos` +-- +*`logstash.slowlog.took_in_nanos`*:: ++ +-- type: long Execution time for the plugin in nanoseconds. -[float] -=== `logstash.slowlog.plugin_params` +-- +*`logstash.slowlog.plugin_params`*:: ++ +-- type: text String value of the plugin configuration -[float] -=== `logstash.slowlog.plugin_params_object` +-- +*`logstash.slowlog.plugin_params_object`*:: ++ +-- type: object key -> value of the configuration used by the plugin. +-- + +[[exported-fields-mongodb]] +== mongodb fields + +Module for parsing MongoDB log files. + + + +[float] +== mongodb fields + +Fields from MongoDB logs. + + + +[float] +== log fields + +Contains fields from MongoDB logs. + + + +*`mongodb.log.severity`*:: ++ +-- +type: keyword + +example: I + +Severity level of message + + +-- + +*`mongodb.log.component`*:: ++ +-- +type: keyword + +example: COMMAND + +Functional categorization of message + + +-- + +*`mongodb.log.context`*:: ++ +-- +type: keyword + +example: initandlisten + +Context of message + + +-- + +*`mongodb.log.message`*:: ++ +-- +type: text + +The message in the log line. + + +-- + [[exported-fields-mysql]] == MySQL fields @@ -1154,35 +2167,43 @@ Contains fields from the MySQL error logs. -[float] -=== `mysql.error.timestamp` - +*`mysql.error.timestamp`*:: ++ +-- The timestamp from the log line. -[float] -=== `mysql.error.thread_id` +-- +*`mysql.error.thread_id`*:: ++ +-- type: long As of MySQL 5.7.2, this is the thread id. For MySQL versions prior to 5.7.2, this field contains the process id. -[float] -=== `mysql.error.level` +-- +*`mysql.error.level`*:: ++ +-- example: Warning The log level. -[float] -=== `mysql.error.message` +-- +*`mysql.error.message`*:: ++ +-- type: text The logged message. +-- + [float] == slowlog fields @@ -1190,78 +2211,98 @@ Contains fields from the MySQL slow logs. -[float] -=== `mysql.slowlog.user` - +*`mysql.slowlog.user`*:: ++ +-- The MySQL user that created the query. -[float] -=== `mysql.slowlog.host` +-- +*`mysql.slowlog.host`*:: ++ +-- The host from where the user that created the query logged in. -[float] -=== `mysql.slowlog.ip` +-- +*`mysql.slowlog.ip`*:: ++ +-- The IP address from where the user that created the query logged in. -[float] -=== `mysql.slowlog.query_time.sec` +-- +*`mysql.slowlog.query_time.sec`*:: ++ +-- type: float The total time the query took, in seconds, as a floating point number. -[float] -=== `mysql.slowlog.lock_time.sec` +-- +*`mysql.slowlog.lock_time.sec`*:: ++ +-- type: float The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. -[float] -=== `mysql.slowlog.rows_sent` +-- +*`mysql.slowlog.rows_sent`*:: ++ +-- type: long The number of rows returned by the query. -[float] -=== `mysql.slowlog.rows_examined` +-- +*`mysql.slowlog.rows_examined`*:: ++ +-- type: long The number of rows scanned by the query. -[float] -=== `mysql.slowlog.timestamp` +-- +*`mysql.slowlog.timestamp`*:: ++ +-- type: long The unix timestamp taken from the `SET timestamp` query. -[float] -=== `mysql.slowlog.query` +-- +*`mysql.slowlog.query`*:: ++ +-- The slow query. -[float] -=== `mysql.slowlog.id` +-- +*`mysql.slowlog.id`*:: ++ +-- type: long The connection ID for the query. +-- + [[exported-fields-nginx]] == Nginx fields @@ -1283,33 +2324,39 @@ Contains fields for the Nginx access logs. -[float] -=== `nginx.access.remote_ip_list` - +*`nginx.access.remote_ip_list`*:: ++ +-- type: array An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. See also the `remote_ip` field. -[float] -=== `nginx.access.remote_ip` +-- +*`nginx.access.remote_ip`*:: ++ +-- type: keyword Client IP address. The first public IP address from the `remote_ip_list` array. If no public IP addresses are present, this field contains the first private IP address from the `remote_ip_list` array. -[float] -=== `nginx.access.user_name` +-- +*`nginx.access.user_name`*:: ++ +-- type: keyword The user name used when basic authentication is used. -[float] -=== `nginx.access.method` +-- +*`nginx.access.method`*:: ++ +-- type: keyword example: GET @@ -1317,33 +2364,41 @@ example: GET The request HTTP method. -[float] -=== `nginx.access.url` +-- +*`nginx.access.url`*:: ++ +-- type: keyword The request HTTP URL. -[float] -=== `nginx.access.http_version` +-- +*`nginx.access.http_version`*:: ++ +-- type: keyword The HTTP version. -[float] -=== `nginx.access.response_code` +-- +*`nginx.access.response_code`*:: ++ +-- type: long The HTTP response code. -[float] -=== `nginx.access.body_sent.bytes` +-- +*`nginx.access.body_sent.bytes`*:: ++ +-- type: long format: bytes @@ -1351,22 +2406,28 @@ format: bytes The number of bytes of the server response body. -[float] -=== `nginx.access.referrer` +-- +*`nginx.access.referrer`*:: ++ +-- type: keyword The HTTP referrer. -[float] -=== `nginx.access.agent` +-- +*`nginx.access.agent`*:: ++ +-- type: text Contains the un-parsed user agent string. Only present if the user agent Elasticsearch plugin is not available or not used. +-- + [float] == user_agent fields @@ -1374,41 +2435,49 @@ Contains the parsed User agent field. Only present if the user agent Elasticsear -[float] -=== `nginx.access.user_agent.device` - +*`nginx.access.user_agent.device`*:: ++ +-- type: keyword The name of the physical device. -[float] -=== `nginx.access.user_agent.major` +-- +*`nginx.access.user_agent.major`*:: ++ +-- type: long The major version of the user agent. -[float] -=== `nginx.access.user_agent.minor` +-- +*`nginx.access.user_agent.minor`*:: ++ +-- type: long The minor version of the user agent. -[float] -=== `nginx.access.user_agent.patch` +-- +*`nginx.access.user_agent.patch`*:: ++ +-- type: keyword The patch version of the user agent. -[float] -=== `nginx.access.user_agent.name` +-- +*`nginx.access.user_agent.name`*:: ++ +-- type: keyword example: Chrome @@ -1416,38 +2485,48 @@ example: Chrome The name of the user agent. -[float] -=== `nginx.access.user_agent.os` +-- +*`nginx.access.user_agent.os`*:: ++ +-- type: keyword The name of the operating system. -[float] -=== `nginx.access.user_agent.os_major` +-- +*`nginx.access.user_agent.os_major`*:: ++ +-- type: long The major version of the operating system. -[float] -=== `nginx.access.user_agent.os_minor` +-- +*`nginx.access.user_agent.os_minor`*:: ++ +-- type: long The minor version of the operating system. -[float] -=== `nginx.access.user_agent.os_name` +-- +*`nginx.access.user_agent.os_name`*:: ++ +-- type: keyword The name of the operating system. +-- + [float] == geoip fields @@ -1455,46 +2534,56 @@ Contains GeoIP information gathered based on the remote_ip field. Only present i -[float] -=== `nginx.access.geoip.continent_name` - +*`nginx.access.geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `nginx.access.geoip.country_iso_code` +-- +*`nginx.access.geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `nginx.access.geoip.location` +-- +*`nginx.access.geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. -[float] -=== `nginx.access.geoip.region_name` +-- +*`nginx.access.geoip.region_name`*:: ++ +-- type: keyword The region name. -[float] -=== `nginx.access.geoip.city_name` +-- +*`nginx.access.geoip.city_name`*:: ++ +-- type: keyword The city name. +-- + [float] == error fields @@ -1502,46 +2591,56 @@ Contains fields for the Nginx error logs. -[float] -=== `nginx.error.level` - +*`nginx.error.level`*:: ++ +-- type: keyword Error level (e.g. error, critical). -[float] -=== `nginx.error.pid` +-- +*`nginx.error.pid`*:: ++ +-- type: long Process identifier (PID). -[float] -=== `nginx.error.tid` +-- +*`nginx.error.tid`*:: ++ +-- type: long Thread identifier. -[float] -=== `nginx.error.connection_id` +-- +*`nginx.error.connection_id`*:: ++ +-- type: long Connection identifier. -[float] -=== `nginx.error.message` +-- +*`nginx.error.message`*:: ++ +-- type: text The error message +-- + [[exported-fields-osquery]] == Osquery fields @@ -1562,44 +2661,54 @@ Common fields exported by the result metricset. -[float] -=== `osquery.result.name` - +*`osquery.result.name`*:: ++ +-- type: keyword The name of the query that generated this event. -[float] -=== `osquery.result.action` +-- +*`osquery.result.action`*:: ++ +-- type: keyword For incremental data, marks whether the entry was added or removed. It can be one of "added", "removed", or "snapshot". -[float] -=== `osquery.result.host_identifier` +-- +*`osquery.result.host_identifier`*:: ++ +-- type: keyword The identifier for the host on which the osquery agent is running. Normally the hostname. -[float] -=== `osquery.result.unix_time` +-- +*`osquery.result.unix_time`*:: ++ +-- type: long Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. -[float] -=== `osquery.result.calendar_time` +-- +*`osquery.result.calendar_time`*:: ++ +-- String representation of the collection time, as formatted by osquery. +-- + [[exported-fields-postgresql]] == PostgreSQL fields @@ -1621,71 +2730,89 @@ Fields from the PostgreSQL log files. -[float] -=== `postgresql.log.timestamp` - +*`postgresql.log.timestamp`*:: ++ +-- The timestamp from the log line. -[float] -=== `postgresql.log.timezone` +-- +*`postgresql.log.timezone`*:: ++ +-- The timezone of timestamp. -[float] -=== `postgresql.log.thread_id` +-- +*`postgresql.log.thread_id`*:: ++ +-- type: long Process id -[float] -=== `postgresql.log.user` +-- +*`postgresql.log.user`*:: ++ +-- example: admin Name of user -[float] -=== `postgresql.log.database` +-- +*`postgresql.log.database`*:: ++ +-- example: mydb Name of database -[float] -=== `postgresql.log.level` +-- +*`postgresql.log.level`*:: ++ +-- example: FATAL The log level. -[float] -=== `postgresql.log.duration` +-- +*`postgresql.log.duration`*:: ++ +-- type: float example: 30.0 Duration of a query. -[float] -=== `postgresql.log.query` +-- +*`postgresql.log.query`*:: ++ +-- example: SELECT * FROM users; Query statement. -[float] -=== `postgresql.log.message` +-- +*`postgresql.log.message`*:: ++ +-- type: text The logged message. +-- + [[exported-fields-redis]] == Redis fields @@ -1706,38 +2833,46 @@ Redis log files -[float] -=== `redis.log.pid` - +*`redis.log.pid`*:: ++ +-- type: long The process ID of the Redis server. -[float] -=== `redis.log.role` +-- +*`redis.log.role`*:: ++ +-- type: keyword The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. -[float] -=== `redis.log.level` +-- +*`redis.log.level`*:: ++ +-- type: keyword The log level. Can be one of `debug`, `verbose`, `notice`, or `warning`. -[float] -=== `redis.log.message` +-- +*`redis.log.message`*:: ++ +-- type: text The log message +-- + [float] == slowlog fields @@ -1745,46 +2880,56 @@ Slow logs are retrieved from Redis via a network connection. -[float] -=== `redis.slowlog.cmd` - +*`redis.slowlog.cmd`*:: ++ +-- type: keyword The command executed. -[float] -=== `redis.slowlog.duration.us` +-- +*`redis.slowlog.duration.us`*:: ++ +-- type: long How long it took to execute the command in microseconds. -[float] -=== `redis.slowlog.id` +-- +*`redis.slowlog.id`*:: ++ +-- type: long The ID of the query. -[float] -=== `redis.slowlog.key` +-- +*`redis.slowlog.key`*:: ++ +-- type: keyword The key on which the command was executed. -[float] -=== `redis.slowlog.args` +-- +*`redis.slowlog.args`*:: ++ +-- type: keyword The arguments with which the command was called. +-- + [[exported-fields-system]] == System fields @@ -1806,44 +2951,58 @@ Fields from the Linux authorization logs. -[float] -=== `system.auth.timestamp` - +*`system.auth.timestamp`*:: ++ +-- The timestamp as read from the auth message. -[float] -=== `system.auth.hostname` +-- +*`system.auth.hostname`*:: ++ +-- The hostname as read from the auth message. -[float] -=== `system.auth.program` +-- +*`system.auth.program`*:: ++ +-- The process name as read from the auth message. -[float] -=== `system.auth.pid` +-- +*`system.auth.pid`*:: ++ +-- type: long The PID of the process that sent the auth message. -[float] -=== `system.auth.message` +-- + +*`system.auth.message`*:: ++ +-- +type: text The message in the log line. -[float] -=== `system.auth.user` +-- +*`system.auth.user`*:: ++ +-- The Unix user that this event refers to. +-- + [float] == ssh fields @@ -1851,48 +3010,60 @@ Fields specific to SSH login events. -[float] -=== `system.auth.ssh.event` - +*`system.auth.ssh.event`*:: ++ +-- The SSH login event. Can be one of "Accepted", "Failed", or "Invalid". "Accepted" means a successful login. "Invalid" means that the user is not configured on the system. "Failed" means that the SSH login attempt has failed. -[float] -=== `system.auth.ssh.method` +-- +*`system.auth.ssh.method`*:: ++ +-- The SSH authentication method. Can be one of "password" or "publickey". -[float] -=== `system.auth.ssh.ip` +-- +*`system.auth.ssh.ip`*:: ++ +-- type: ip The client IP from where the login attempt was made. -[float] -=== `system.auth.ssh.dropped_ip` +-- +*`system.auth.ssh.dropped_ip`*:: ++ +-- type: ip The client IP from SSH connections that are open and immediately dropped. -[float] -=== `system.auth.ssh.port` +-- +*`system.auth.ssh.port`*:: ++ +-- type: long The client port from where the login attempt was made. -[float] -=== `system.auth.ssh.signature` +-- +*`system.auth.ssh.signature`*:: ++ +-- The signature of the client public key. +-- + [float] == geoip fields @@ -1900,46 +3071,56 @@ Contains GeoIP information gathered based on the `system.auth.ip` field. Only pr -[float] -=== `system.auth.ssh.geoip.continent_name` - +*`system.auth.ssh.geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `system.auth.ssh.geoip.city_name` +-- +*`system.auth.ssh.geoip.city_name`*:: ++ +-- type: keyword The name of the city. -[float] -=== `system.auth.ssh.geoip.region_name` +-- +*`system.auth.ssh.geoip.region_name`*:: ++ +-- type: keyword The name of the region. -[float] -=== `system.auth.ssh.geoip.country_iso_code` +-- +*`system.auth.ssh.geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `system.auth.ssh.geoip.location` +-- +*`system.auth.ssh.geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. +-- + [float] == sudo fields @@ -1947,40 +3128,50 @@ Fields specific to events created by the `sudo` command. -[float] -=== `system.auth.sudo.error` - +*`system.auth.sudo.error`*:: ++ +-- example: user NOT in sudoers The error message in case the sudo command failed. -[float] -=== `system.auth.sudo.tty` +-- +*`system.auth.sudo.tty`*:: ++ +-- The TTY where the sudo command is executed. -[float] -=== `system.auth.sudo.pwd` +-- +*`system.auth.sudo.pwd`*:: ++ +-- The current directory where the sudo command is executed. -[float] -=== `system.auth.sudo.user` +-- +*`system.auth.sudo.user`*:: ++ +-- example: root The target user to which the sudo command is switching. -[float] -=== `system.auth.sudo.command` +-- +*`system.auth.sudo.command`*:: ++ +-- The command executed via sudo. +-- + [float] == useradd fields @@ -1988,36 +3179,46 @@ Fields specific to events created by the `useradd` command. -[float] -=== `system.auth.useradd.name` - +*`system.auth.useradd.name`*:: ++ +-- The user name being added. -[float] -=== `system.auth.useradd.uid` +-- +*`system.auth.useradd.uid`*:: ++ +-- type: long The user ID. -[float] -=== `system.auth.useradd.gid` +-- +*`system.auth.useradd.gid`*:: ++ +-- type: long The group ID. -[float] -=== `system.auth.useradd.home` +-- +*`system.auth.useradd.home`*:: ++ +-- The home folder for the new user. -[float] -=== `system.auth.useradd.shell` +-- +*`system.auth.useradd.shell`*:: ++ +-- The default shell for the new user. +-- + [float] == groupadd fields @@ -2025,20 +3226,24 @@ Fields specific to events created by the `groupadd` command. -[float] -=== `system.auth.groupadd.name` - +*`system.auth.groupadd.name`*:: ++ +-- The name of the new group. -[float] -=== `system.auth.groupadd.gid` +-- +*`system.auth.groupadd.gid`*:: ++ +-- type: long The ID of the new group. +-- + [float] == syslog fields @@ -2046,36 +3251,48 @@ Contains fields from the syslog system logs. -[float] -=== `system.syslog.timestamp` - +*`system.syslog.timestamp`*:: ++ +-- The timestamp as read from the syslog message. -[float] -=== `system.syslog.hostname` +-- +*`system.syslog.hostname`*:: ++ +-- The hostname as read from the syslog message. -[float] -=== `system.syslog.program` +-- +*`system.syslog.program`*:: ++ +-- The process name as read from the syslog message. -[float] -=== `system.syslog.pid` +-- +*`system.syslog.pid`*:: ++ +-- The PID of the process that sent the syslog message. -[float] -=== `system.syslog.message` +-- + +*`system.syslog.message`*:: ++ +-- +type: text The message in the log line. +-- + [[exported-fields-traefik]] == Traefik fields @@ -2097,25 +3314,29 @@ Contains fields for the Traefik access logs. -[float] -=== `traefik.access.remote_ip` - +*`traefik.access.remote_ip`*:: ++ +-- type: keyword Client IP address. -[float] -=== `traefik.access.user_name` +-- +*`traefik.access.user_name`*:: ++ +-- type: keyword The user name used when basic authentication is used. -[float] -=== `traefik.access.method` +-- +*`traefik.access.method`*:: ++ +-- type: keyword example: GET @@ -2123,33 +3344,41 @@ example: GET The request HTTP method. -[float] -=== `traefik.access.url` +-- +*`traefik.access.url`*:: ++ +-- type: keyword The request HTTP URL. -[float] -=== `traefik.access.http_version` +-- +*`traefik.access.http_version`*:: ++ +-- type: keyword The HTTP version. -[float] -=== `traefik.access.response_code` +-- +*`traefik.access.response_code`*:: ++ +-- type: long The HTTP response code. -[float] -=== `traefik.access.body_sent.bytes` +-- +*`traefik.access.body_sent.bytes`*:: ++ +-- type: long format: bytes @@ -2157,22 +3386,28 @@ format: bytes The number of bytes of the server response body. -[float] -=== `traefik.access.referrer` +-- +*`traefik.access.referrer`*:: ++ +-- type: keyword The HTTP referrer. -[float] -=== `traefik.access.agent` +-- +*`traefik.access.agent`*:: ++ +-- type: text Contains the un-parsed user agent string. Only present if the user agent Elasticsearch plugin is not available or not used. +-- + [float] == user_agent fields @@ -2180,41 +3415,49 @@ Contains the parsed User agent field. Only present if the user agent Elasticsear -[float] -=== `traefik.access.user_agent.device` - +*`traefik.access.user_agent.device`*:: ++ +-- type: keyword The name of the physical device. -[float] -=== `traefik.access.user_agent.major` +-- +*`traefik.access.user_agent.major`*:: ++ +-- type: long The major version of the user agent. -[float] -=== `traefik.access.user_agent.minor` +-- +*`traefik.access.user_agent.minor`*:: ++ +-- type: long The minor version of the user agent. -[float] -=== `traefik.access.user_agent.patch` +-- +*`traefik.access.user_agent.patch`*:: ++ +-- type: keyword The patch version of the user agent. -[float] -=== `traefik.access.user_agent.name` +-- +*`traefik.access.user_agent.name`*:: ++ +-- type: keyword example: Chrome @@ -2222,38 +3465,48 @@ example: Chrome The name of the user agent. -[float] -=== `traefik.access.user_agent.os` +-- +*`traefik.access.user_agent.os`*:: ++ +-- type: keyword The name of the operating system. -[float] -=== `traefik.access.user_agent.os_major` +-- +*`traefik.access.user_agent.os_major`*:: ++ +-- type: long The major version of the operating system. -[float] -=== `traefik.access.user_agent.os_minor` +-- +*`traefik.access.user_agent.os_minor`*:: ++ +-- type: long The minor version of the operating system. -[float] -=== `traefik.access.user_agent.os_name` +-- +*`traefik.access.user_agent.os_name`*:: ++ +-- type: keyword The name of the operating system. +-- + [float] == geoip fields @@ -2261,66 +3514,82 @@ Contains GeoIP information gathered based on the remote_ip field. Only present i -[float] -=== `traefik.access.geoip.continent_name` - +*`traefik.access.geoip.continent_name`*:: ++ +-- type: keyword The name of the continent. -[float] -=== `traefik.access.geoip.country_iso_code` +-- +*`traefik.access.geoip.country_iso_code`*:: ++ +-- type: keyword Country ISO code. -[float] -=== `traefik.access.geoip.location` +-- +*`traefik.access.geoip.location`*:: ++ +-- type: geo_point The longitude and latitude. -[float] -=== `traefik.access.geoip.region_name` +-- +*`traefik.access.geoip.region_name`*:: ++ +-- type: keyword The region name. -[float] -=== `traefik.access.geoip.city_name` +-- +*`traefik.access.geoip.city_name`*:: ++ +-- type: keyword The city name. -[float] -=== `traefik.access.request_count` +-- +*`traefik.access.request_count`*:: ++ +-- type: long The number of requests -[float] -=== `traefik.access.frontend_name` +-- +*`traefik.access.frontend_name`*:: ++ +-- type: text The name of the frontend used -[float] -=== `traefik.access.backend_url` +-- +*`traefik.access.backend_url`*:: ++ +-- type: text The url of the backend where request is forwarded +-- + diff --git a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-filtering.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-filtering.asciidoc index f2d1250f..1f584f0b 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-filtering.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-filtering.asciidoc @@ -1,22 +1,21 @@ [[filtering-and-enhancing-data]] == Filter and enhance the exported data -Your use case might require only a subset of the data exported by Filebeat, or -you might need to enhance the exported data (for example, by adding metadata). -Filebeat provides a couple of options for filtering and enhancing exported -data. - -You can configure each prospector to include or exclude specific lines or files. -This allows you to specify different filtering criteria for each prospector. -To do this, you use the <>, -<>, and <> -options under the `filebeat.prospectors` section of the config file (see -<>). The disadvantage of this approach is that -you need to implement a configuration option for each filtering criteria that -you need. +Your use case might require only a subset of the data exported by {beatname_uc}, +or you might need to enhance the exported data (for example, by adding +metadata). {beatname_uc} provides a couple of options for filtering and +enhancing exported data. + +You can configure each input to include or exclude specific lines or files. This +allows you to specify different filtering criteria for each input. To do this, +you use the `include_lines`, `exclude_lines`, and `exclude_files` options under +the +{beatname_lc}.inputs+ section of the config file (see +<>). The disadvantage of this approach is +that you need to implement a configuration option for each filtering criteria +that you need. Another approach (the one described here) is to define processors to configure -global processing across all data exported by Filebeat. +global processing across all data exported by {beatname_uc}. [float] @@ -55,7 +54,7 @@ processors: [[decode-json-example]] ==== Decode JSON example -In the following example, the fields exported by Filebeat include a +In the following example, the fields exported by {beatname_uc} include a field, `inner`, whose value is a JSON object encoded as a string: [source,json] @@ -65,10 +64,11 @@ field, `inner`, whose value is a JSON object encoded as a string: The following configuration decodes the inner JSON object: -[source,yaml] +["source","yaml",subs="attributes"] ----------------------------------------------------- -filebeat.prospectors: -- paths: +{beatname_lc}.inputs: +- type: log + paths: - input.json json.keys_under_root: true @@ -93,7 +93,7 @@ The resulting output looks something like this: "inner": { "data": "value" }, - "prospector": { + "input": { "type": "log", }, "offset": 55, diff --git a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-general-options.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-general-options.asciidoc index 80076d81..947eb27f 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-general-options.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-general-options.asciidoc @@ -32,13 +32,32 @@ It is not possible to use a symlink as registry file. NOTE: The registry file is only updated when new events are flushed and not on a predefined period. That means in case there are some states where the TTL expired, these are only removed when new event are processed. +[float] +==== `registry_file_permissions` + +The permissions mask to apply on registry file. The default value is 0600. The permissions option must be a valid Unix-style file permissions mask expressed in octal notation. In Go, numbers in octal notation must start with 0. + +This option is not supported on Windows. + +Examples: + + 0644: give read and write access to the file owner, and read access to all others. + 0600: give read and write access to the file owner, and no access to all others. + 0664: give read and write access to the file owner and members of the group associated with the file, as well as read access to all other users. + +[source,yaml] +------------------------------------------------------------------------------------- +filebeat.registry_file_permissions: 0600 +------------------------------------------------------------------------------------- [float] ==== `config_dir` -The full path to the directory that contains additional prospector configuration files. +deprecated[6.0.0, Use <> instead.] + +The full path to the directory that contains additional input configuration files. Each configuration file must end with `.yml`. Each config file must also specify the full Filebeat -config hierarchy even though only the prospector part of the file is processed. All global +config hierarchy even though only the `inputs` part of each file is processed. All global options, such as `registry_file`, are ignored. The `config_dir` option MUST point to a directory other than the directory where the main Filebeat config file resides. @@ -81,4 +100,3 @@ filebeat.shutdown_timeout: 5s ------------------------------------------------------------------------------------- include::../../libbeat/docs/generalconfig.asciidoc[] - diff --git a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-modules-options.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-modules-options.asciidoc index a45d6a91..8f254618 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-modules-options.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-modules-options.asciidoc @@ -1,16 +1,16 @@ -[[configuration-filebeat-modules]] +[id="configuration-{beatname_lc}-modules"] == Specify which modules to run -NOTE: Using Filebeat modules is optional. You may decide to -<> if you are using -a log file type that isn't supported, or you want to use a different setup. +NOTE: Using {beatname_uc} modules is optional. You may decide to +<> if you are using +a log type that isn't supported, or you want to use a different setup. -Filebeat <> provide a quick way for you to get started +{beatname_uc} <<{beatname_lc}-modules,modules>> provide a quick way for you to get started processing common log formats. They contain default configurations, Elasticsearch ingest node pipeline definitions, and Kibana dashboards to help you implement and deploy a log monitoring solution. -Filebeat provides a few different ways to enable modules. You can: +{beatname_uc} provides a few different ways to enable modules. You can: * <> * <> @@ -21,10 +21,10 @@ include::../../libbeat/docs/shared-note-file-permissions.asciidoc[] When you enable modules, you can also <> to change the default behavior of the modules, and you can specify -<> to override prospector settings. +<> to override input settings. -Before running Filebeat with modules enabled, make sure you also set up the -environment to use Kibana dashboards. See <> for +Before running {beatname_uc} with modules enabled, make sure you also set up the +environment to use Kibana dashboards. See <<{beatname_lc}-modules-quickstart>> for more information. [float] @@ -32,27 +32,27 @@ more information. === Enable module configs in the `modules.d` directory The `modules.d` directory contains default configurations for all the modules -available in Filebeat. You can enable or disable specific module configurations +available in {beatname_uc}. You can enable or disable specific module configurations under `modules.d` by running the <> commands. For example, to enable the `apache2` and `mysql` configs in the `modules.d` directory, you use: -[source,shell] +["source","sh",subs="attributes"] ---- -./filebeat modules enable apache2 mysql +./{beatname_lc} modules enable apache2 mysql ---- -Then when you run Filebeat, it loads the corresponding module configurations +Then when you run {beatname_uc}, it loads the corresponding module configurations specified in the `modules.d` directory (for example, `modules.d/apache2.yml` and `modules.d/mysql.yml`). To see a list of enabled and disabled modules, run: -[source,shell] +["source","sh",subs="attributes"] ---- -./filebeat modules list +./{beatname_lc} modules list ---- The default module configurations assume that the logs you’re harvesting are @@ -62,12 +62,12 @@ to specify variable settings. See <>. [float] [[enable-modules-cli]] -=== Enable modules when you run Filebeat +=== Enable modules when you run {beatname_uc} -To enable specific <> when you run Filebeat at the +To enable specific <<{beatname_lc}-modules,modules>> when you run {beatname_uc} at the command line, you can use the `--modules` flag. This approach works well when you're getting started and want to specify different modules and settings each -time you run Filebeat. Any modules specified at the command line will be loaded +time you run {beatname_uc}. Any modules specified at the command line will be loaded along with any modules that are enabled in the configuration file or `modules.d` directory. If there's a conflict, the configuration specified at the command line is used. @@ -75,9 +75,9 @@ line is used. The following example shows how to enable and run the `nginx`,`mysql`, and `system` modules. -[source,shell] +["source","sh",subs="attributes"] ---- -./filebeat -e --modules nginx,mysql,system +./{beatname_lc} -e --modules nginx,mysql,system ---- The default module configurations assume that the logs you’re harvesting are @@ -91,7 +91,7 @@ to specify variable settings. See <>. When possible, you should use the config files in the `modules.d` directory. -However, enabling <> directly in the config file is a +However, enabling <<{beatname_lc}-modules,modules>> directly in the config file is a practical approach if you have upgraded from a previous version of {beatname_uc} and don't want to move your module configs to the `modules.d` directory. You can continue to configure modules in the +{beatname_lc}.yml+ file, but you won't be @@ -105,9 +105,9 @@ a dash (-) and is followed by settings for that module. The following example shows a configuration that runs the `nginx`,`mysql`, and `system` modules. -[source,yaml] +["source","yaml",subs="attributes"] ---- -filebeat.modules: +{beatname_lc}.modules: - module: nginx - module: mysql - module: system @@ -136,9 +136,9 @@ path for `nginx` access log files: To set the path for Nginx access log files at the command line, you use the `-M` flag. For example: -[source,shell] +["source","shell",subs="attributes"] ---- -./filebeat -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" +./{beatname_lc} -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" ---- When you set variables at the command line, the variable name needs to include @@ -148,42 +148,43 @@ must start with `-M`. Here you see how to use the `-M` flag along with the `--modules` flag. This example shows how to set the paths to the access and error logs: -[source,shell] +["source","sh",subs="attributes"] ---- -./filebeat --modules nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.error.var.paths=[/var/log/nginx/error.log*]" +./{beatname_lc} --modules nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.error.var.paths=[/var/log/nginx/error.log*]" ---- For information about specific variables that you can set for each fileset, -see the <>. +see the <<{beatname_lc}-modules,documentation for the modules>>. [[advanced-settings]] === Advanced settings -Behind the scenes, each module starts a Filebeat prospector. Advanced users -can add or override any prospector settings. For example, you can set -<> to `true` in the module configuration: +Behind the scenes, each module starts a {beatname_uc} input. Advanced users +can add or override any input settings. For example, you can set +<<{beatname_lc}-input-log-close-eof,close_eof>> to `true` in the module +configuration: [source,yaml] ---------------------------------------------------------------------- - module: nginx access: - prospector: + input: close_eof: true ---------------------------------------------------------------------- Or at the command line like this: -[source,shell] +["source","sh",subs="attributes"] ---------------------------------------------------------------------- -./filebeat -M "nginx.access.prospector.close_eof=true" +./{beatname_lc} -M "nginx.access.input.close_eof=true" ---------------------------------------------------------------------- Here you see how to use the `-M` flag along with the `--modules` flag: -[source,shell] +["source","sh",subs="attributes"] ---------------------------------------------------------------------- -./filebeat --modules nginx -M "nginx.access.prospector.close_eof=true" +./{beatname_lc} --modules nginx -M "nginx.access.input.close_eof=true" ---------------------------------------------------------------------- @@ -191,15 +192,15 @@ You can use wildcards to change variables or settings for multiple modules/filesets at once. For example, the following command enables `close_eof` for all the filesets in the `nginx` module: -[source,shell] +["source","sh",subs="attributes"] ---------------------------------------------------------------------- -./filebeat -M "nginx.*.prospector.close_eof=true" +./{beatname_lc} -M "nginx.*.input.close_eof=true" ---------------------------------------------------------------------- -The following command enables `close_eof` for all prospectors created by any of +The following command enables `close_eof` for all inputs created by any of the modules: -[source,shell] +["source","sh",subs="attributes"] ---------------------------------------------------------------------- -./filebeat -M "*.*.prospector.close_eof=true" +./{beatname_lc} -M "*.*.input.close_eof=true" ---------------------------------------------------------------------- diff --git a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-options.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-options.asciidoc index e2483099..c2fcceae 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/filebeat-options.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/filebeat-options.asciidoc @@ -1,539 +1,67 @@ -[[configuration-filebeat-options]] -== Set up prospectors - -TIP: <> provide the fastest getting -started experience for common log formats. See <> -to learn how to get started with modules. Also see -<> for information about enabling and -configuring modules. - -Filebeat uses prospectors to locate and process files. To configure Filebeat, -you specify a list of prospectors in the `filebeat.prospectors` section of the -+{beatname_lc}.yml+ config file. - -Each item in the list begins with a dash (-) and specifies prospector-specific -configuration options, including the list of paths that are crawled to locate -the files. - -Here is a sample configuration: - -[source,yaml] -------------------------------------------------------------------------------------- -filebeat.prospectors: +[id="configuration-{beatname_lc}-options"] +== Configure inputs + +++++ +Configure inputs +++++ + +TIP: <<{beatname_lc}-modules-overview,{beatname_uc} modules>> provide the +fastest getting started experience for common log formats. See +<<{beatname_lc}-modules-quickstart>> to learn how to get started with modules. +Also see <> for information about enabling +and configuring modules. + +To configure {beatname_uc} manually (instead of using +<<{beatname_lc}-modules-overview,modules>>), you specify a list of inputs in the ++{beatname_lc}.inputs+ section of the +{beatname_lc}.yml+. Inputs specify how +{beatname_uc} locates and processes input data. + +The list is a http://yaml.org/[YAML] array, so each input begins with +a dash (`-`). You can specify multiple inputs, and you can specify the same +input type more than once. For example: + +["source","yaml",subs="attributes"] +---- +{beatname_lc}.inputs: - type: log paths: - - /var/log/apache/httpd-*.log - + - /var/log/system.log + - /var/log/wifi.log - type: log paths: - - /var/log/messages - - /var/log/*.log -------------------------------------------------------------------------------------- - -[float] -=== Configuration options - -[float] -==== `type` - -One of the following input types: - - * log: Reads every line of the log file (default). - * stdin: Reads the standard in. - * redis: Reads slow log entries from redis (experimental). - * udp: Reads events over UDP. Also see <>. - * docker: Reads logs from Docker. Also see <> (experimental). - -The value that you specify here is used as the `type` for each event published to Logstash and Elasticsearch. - -[float] -[[prospector-paths]] -==== `paths` - -A list of glob-based paths that should be crawled and fetched. All patterns -supported by https://golang.org/pkg/path/filepath/#Glob[Golang Glob] are also -supported here. For example, to fetch all files from a predefined level of -subdirectories, the following pattern can be used: `/var/log/*/*.log`. This -fetches all `.log` files from the subfolders of `/var/log`. It does not -fetch log files from the `/var/log` folder itself. -It is possible to recursively fetch all files in all subdirectories of a directory -using the optional <> settings. - -Filebeat starts a harvester for each file that it finds under the specified -paths. You can specify one path per line. Each line begins with a dash (-). - -[float] -[[recursive_glob]] -==== `recursive_glob.enabled` - -Enable expanding `**` into recursive glob patterns. With this feature enabled, -the rightmost `**` in each path is expanded into a fixed number of glob -patterns. For example: `/foo/**` expands to `/foo`, `/foo/*`, `/foo/*/*`, and so -on. If enabled it expands a single `**` into a 8-level deep `*` pattern. - -This feature is enabled by default, set to `recursive_glob.enabled` to false to -disable it. - -[float] -==== `encoding` - -The file encoding to use for reading files that contain international characters. -See the encoding names http://www.w3.org/TR/encoding/[recommended by the W3C for use in HTML5]. - -Here are some sample encodings from W3C recommendation: - - * plain, latin1, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk, hz-gb-2312, - * euc-kr, euc-jp, iso-2022-jp, shift-jis, and so on - -The `plain` encoding is special, because it does not validate or transform any input. - -[float] -[[exclude-lines]] -==== `exclude_lines` - -A list of regular expressions to match the lines that you want Filebeat to exclude. Filebeat drops any lines that match a regular expression in the list. By default, no lines are dropped. - -If <> is also specified, each multiline message is combined into a single line before the lines are filtered by `exclude_lines`. - -The following example configures Filebeat to drop any lines that start with "DBG". - -[source,yaml] -------------------------------------------------------------------------------------- -filebeat.prospectors: -- paths: - - /var/log/myapp/*.log - exclude_lines: ['^DBG'] -------------------------------------------------------------------------------------- - -See <> for a list of supported regexp patterns. - -[float] -[[include-lines]] -==== `include_lines` - -A list of regular expressions to match the lines that you want Filebeat to include. Filebeat exports only the lines that match a regular expression in the list. By default, all lines are exported. - -If <> is also specified, each multiline message is combined into a single line before the lines are filtered by `include_lines`. - -The following example configures Filebeat to export any lines that start with "ERR" or "WARN": - -[source,yaml] -------------------------------------------------------------------------------------- -filebeat.prospectors: -- paths: - - /var/log/myapp/*.log - include_lines: ['^ERR', '^WARN'] -------------------------------------------------------------------------------------- - -NOTE: If both `include_lines` and `exclude_lines` are defined, Filebeat executes `include_lines` first and then executes `exclude_lines`. -The order in which the two options are defined doesn't matter. The `include_lines` option will always be executed -before the `exclude_lines` option, even if `exclude_lines` appears before `include_lines` in the config file. - -The following example exports all Apache log lines except the debugging messages (DBGs): - -[source,yaml] -------------------------------------------------------------------------------------- - include_lines: ['apache'] - exclude_lines: ['^DBG'] -------------------------------------------------------------------------------------- - -See <> for a list of supported regexp patterns. - -[float] -[[exclude-files]] -==== `exclude_files` - -A list of regular expressions to match the files that you want Filebeat to ignore. By default no files are excluded. - -The following example configures Filebeat to ignore all the files that have a `gz` extension: - -[source,yaml] -------------------------------------------------------------------------------------- - exclude_files: ['\.gz$'] -------------------------------------------------------------------------------------- - -See <> for a list of supported regexp patterns. - -[float] -==== `tags` - -A list of tags that the Beat includes in the `tags` field of each published -event. Tags make it easy to select specific events in Kibana or apply -conditional filtering in Logstash. These tags will be appended to the list of -tags specified in the general configuration. - -Example: - -[source,yaml] --------------------------------------------------------------------------------- -filebeat.prospectors: -- paths: ["/var/log/app/*.json"] - tags: ["json"] --------------------------------------------------------------------------------- - -[float] -[[configuration-fields]] -==== `fields` - -Optional fields that you can specify to add additional information to the -output. For example, you might add fields that you can use for filtering log -data. Fields can be scalar values, arrays, dictionaries, or any nested -combination of these. By default, the fields that you specify here will be -grouped under a `fields` sub-dictionary in the output document. To store the -custom fields as top-level fields, set the `fields_under_root` option to true. -If a duplicate field is declared in the general configuration, then its value -will be overwritten by the value declared here. - -[source,yaml] --------------------------------------------------------------------------------- -filebeat.prospectors: -- paths: ["/var/log/app/*.log"] + - "/var/log/apache2/*" fields: - app_id: query_engine_12 --------------------------------------------------------------------------------- - -[float] -[[fields-under-root]] -==== `fields_under_root` - -If this option is set to true, the custom <> are stored as -top-level fields in the output document instead of being grouped under a -`fields` sub-dictionary. If the custom field names conflict with other field -names added by Filebeat, then the custom fields overwrite the other fields. - -[float] -==== `processors` - -A list of processors to apply to the data generated by the prospector. - -See <> for information about specifying -processors in your config. - -[float] -[[ignore-older]] -==== `ignore_older` - -If this option is enabled, Filebeat ignores any files that were modified before the specified timespan. Configuring `ignore_older` can be especially useful if you keep log files for a long time. For example, if you want to start Filebeat, but only want to send the newest files and files from last week, you can configure this option. - -You can use time strings like 2h (2 hours) and 5m (5 minutes). The default is 0, which disables the setting. -Commenting out the config has the same effect as setting it to 0. - -IMPORTANT: You must set `ignore_older` to be greater than `close_inactive`. - -The files affected by this setting fall into two categories: - -* Files that were never harvested -* Files that were harvested but weren't updated for longer than `ignore_older` - -For files which were never seen before, the offset state is set to the end of the file. If a state already exist, the offset is not changed. In case a file is updated again later, reading continues at the set offset position. - -The `ignore_older` setting relies on the modification time of the file to determine if a file is ignored. If the modification time of the file is not updated when lines are written to a file (which can happen on Windows), the `ignore_older` setting may cause Filebeat to ignore files even though content was added at a later time. - -To remove the state of previously harvested files from the registry file, use the `clean_inactive` configuration option. - -Before a file can be ignored by the prospector, it must be closed. To ensure a file is no longer being harvested when it is ignored, you must set `ignore_older` to a longer duration than `close_inactive`. - -If a file that's currently being harvested falls under `ignore_older`, the harvester will first finish reading the file and close it after `close_inactive` is reached. Then, after that, the file will be ignored. - -[float] -[[close-options]] -==== `close_*` - -The `close_*` configuration options are used to close the harvester after a certain criteria or time. Closing the harvester means closing the file handler. If a file is updated after the harvester is closed, the file will be picked up again after `scan_frequency` has elapsed. However, if the file is moved or deleted while the harvester is closed, Filebeat will not be able to pick up the file again, and any data that the harvester hasn't read will be lost. - - -[float] -[[close-inactive]] -==== `close_inactive` - -When this option is enabled, Filebeat closes the file handle if a file has not been harvested for the specified duration. The counter for the defined period starts when the last log line was read by the harvester. It is not based on the modification time of the file. If the closed file changes again, a new harvester is started and the latest changes will be picked up after `scan_frequency` has elapsed. - -We recommended that you set `close_inactive` to a value that is larger than the least frequent updates to your log files. For example, if your log files get updated every few seconds, you can safely set `close_inactive` to `1m`. If there are log files with very different update rates, you can use multiple prospector configurations with different values. - -Setting `close_inactive` to a lower value means that file handles are closed sooner. However this has the side effect that new log lines are not sent in near real time if the harvester is closed. - -The timestamp for closing a file does not depend on the modification time of the file. Instead, Filebeat uses an internal timestamp that reflects when the file was last harvested. For example, if `close_inactive` is set to 5 minutes, the countdown for the 5 minutes starts after the harvester reads the last line of the file. - -You can use time strings like 2h (2 hours) and 5m (5 minutes). The default is 5m. - -[float] -[[close-renamed]] -==== `close_renamed` - -WARNING: Only use this option if you understand that data loss is a potential side effect. - -When this option is enabled, Filebeat closes the file handler when a file is renamed. This happens, for example, when rotating files. By default, the harvester stays open and keeps reading the file because the file handler does not depend on the file name. If the `close_renamed` option is enabled and the file is renamed or moved in such a way that it's no longer matched by the file patterns specified for the prospector, the file will not be picked up again. Filebeat will not finish reading the file. - -WINDOWS: If your Windows log rotation system shows errors because it can't rotate the files, you should enable this option. - -[float] -[[close-removed]] -==== `close_removed` - -When this option is enabled, Filebeat closes the harvester when a file is removed. Normally a file should only be removed after it's inactive for the duration specified by `close_inactive`. However, if a file is removed early and you don't enable `close_removed`, Filebeat keeps the file open to make sure the harvester has completed. If this setting results in files that are not completely read because they are removed from disk too early, disable this option. - -This option is enabled by default. If you disable this option, you must also disable `clean_removed`. - -WINDOWS: If your Windows log rotation system shows errors because it can't rotate files, make sure this option is enabled. + apache: true + fields_under_root: true +---- -[float] -[[close-eof]] -==== `close_eof` - -WARNING: Only use this option if you understand that data loss is a potential side effect. - -When this option is enabled, Filebeat closes a file as soon as the end of a file is reached. This is useful when your files are only written once and not updated from time to time. For example, this happens when you are writing every single log event to a new file. This option is disabled by default. - -[float] -[[close-timeout]] -==== `close_timeout` - -WARNING: Only use this option if you understand that data loss is a potential side effect. Another side effect is that multiline events might not be completely sent before the timeout expires. - -When this option is enabled, Filebeat gives every harvester a predefined lifetime. Regardless of where the reader is in the file, reading will stop after the `close_timeout` period has elapsed. This option can be useful for older log files when you want to spend only a predefined amount of time on the files. While `close_timeout` will close the file after the predefined timeout, if the file is still being updated, the prospector will start a new harvester again per the defined `scan_frequency`. And the close_timeout for this harvester will start again with the countdown for the timeout. - -This option is particularly useful in case the output is blocked, which makes Filebeat keep open file handlers even for files that were deleted from the disk. Setting `close_timeout` to `5m` ensures that the files are periodically closed so they can be freed up by the operating system. - -If you set `close_timeout` to equal `ignore_older`, the file will not be picked up if it's modified while the harvester is closed. This combination of settings normally leads to data loss, and the complete file is not sent. - -When you use `close_timeout` for logs that contain multiline events, the harvester might stop in the middle of a multiline event, which means that only parts of the event will be sent. If the harvester is started again and the file still exists, only the second part of the event will be sent. - -This option is set to 0 by default which means it is disabled. - - -[float] -[[clean-options]] -==== `clean_*` - -The `clean_*` options are used to clean up the state entries in the registry file. These settings help to reduce the size of the registry file and can prevent a potential <>. - -[float] -[[clean-inactive]] -==== `clean_inactive` - -WARNING: Only use this option if you understand that data loss is a potential side effect. - -When this option is enabled, Filebeat removes the state of a file after the specified period of inactivity has elapsed. The state can only be removed if the file is already ignored by Filebeat (the file is older than `ignore_older`). The `clean_inactive` setting must be greater than `ignore_older + scan_frequency` to make sure that no states are removed while a file is still being harvested. Otherwise, the setting could result in Filebeat resending the full content constantly because `clean_inactive` removes state for files that are still detected by the prospector. If a file is updated or appears again, the file is read from the beginning. - -The `clean_inactive` configuration option is useful to reduce the size of the registry file, especially if a large amount of new files are generated every day. - -This config option is also useful to prevent Filebeat problems resulting from inode reuse on Linux. For more information, see <>. - -NOTE: Every time a file is renamed, the file state is updated and the counter for `clean_inactive` starts at 0 again. - -[float] -[[clean-removed]] -==== `clean_removed` - -When this option is enabled, Filebeat cleans files from the registry if they cannot be found on disk anymore under the last known name. This means also files which were renamed after the harvester was finished will be removed. This option is enabled by default. - -If a shared drive disappears for a short period and appears again, all files will be read again from the beginning because the states were removed from the registry file. In such cases, we recommend that you disable the `clean_removed` option. - -You must disable this option if you also disable `close_removed`. - -[float] -[[scan-frequency]] -==== `scan_frequency` - -How often the prospector checks for new files in the paths that are specified -for harvesting. For example, if you specify a glob like `/var/log/*`, the -directory is scanned for files using the frequency specified by -`scan_frequency`. Specify 1s to scan the directory as frequently as possible -without causing Filebeat to scan too frequently. We do not recommend to set this value `<1s`. - -If you require log lines to be sent in near real time do not use a very low `scan_frequency` but adjust `close_inactive` so the file handler stays open and constantly polls your files. - -The default setting is 10s. - - -[float] -[[scan-sort]] -==== `scan.sort` - -experimental[] - -If you specify a value other than the empty string for this setting you can determine whether to use ascending or descending order using `scan.order`. Possible values are `modtime` and `filename`. To sort by file modification time, use `modtime`, otherwise use `filename`. Leave this option empty to disable it. - -If you specify a value for this setting, you can use `scan.order` to configure whether files are scanned in ascending or descending order. - -The default setting is disabled. - -[float] -[[scan-order]] -==== `scan.order` - -experimental[] - -Specifies whether to use ascending or descending order when `scan.sort` is set to a value other than none. Possible values are `asc` or `desc`. - -The default setting is `asc`. - -[float] -==== `harvester_buffer_size` - -The size in bytes of the buffer that each harvester uses when fetching a file. The default is 16384. - -[float] -==== `max_bytes` - -The maximum number of bytes that a single log message can have. All bytes after `max_bytes` are discarded and not sent. -This setting is especially useful for multiline log messages, which can get large. The default is 10MB (10485760). [float] -[[config-json]] -==== `json` -These options make it possible for Filebeat to decode logs structured as JSON messages. Filebeat -processes the logs line by line, so the JSON decoding only works if there is one JSON object per -line. +[id="{beatname_lc}-input-types"] +=== Input types -The decoding happens before line filtering and multiline. You can combine JSON decoding with filtering -and multiline if you set the `message_key` option. This can be helpful in situations where the application -logs are wrapped in JSON objects, like it happens for example with Docker. +You can configure {beatname_uc} to use the following inputs: -Example configuration: - -[source,yaml] -------------------------------------------------------------------------------------- -json.keys_under_root: true -json.add_error_key: true -json.message_key: log -------------------------------------------------------------------------------------- - -You must specify at least one of the following settings to enable JSON parsing -mode: - -*`keys_under_root`*:: By default, the decoded JSON is placed under a "json" key in the output document. -If you enable this setting, the keys are copied top level in the output document. The default is false. - -*`overwrite_keys`*:: If `keys_under_root` and this setting are enabled, then the values from the decoded -JSON object overwrite the fields that Filebeat normally adds (type, source, offset, etc.) in case of conflicts. - -*`add_error_key`*:: If this setting is enabled, Filebeat adds a "error.message" and "error.type: json" key in case of JSON -unmarshalling errors or when a `message_key` is defined in the configuration but cannot be used. - -*`message_key`*:: An optional configuration setting that specifies a JSON key on -which to apply the line filtering and multiline settings. If specified the -key must be at the top level in the JSON object and the value associated with -the key must be a string, otherwise no filtering or multiline aggregation will -occur. - -[float] -==== `multiline` - -Options that control how Filebeat deals with log messages that span multiple lines. See <> for more information about configuring multiline options. - -[float] -==== `tail_files` - -If this option is set to true, Filebeat starts reading new files at the end of each file instead of the beginning. When this option is used in combination with log rotation, it's possible that the first log entries in a new file might be skipped. The default setting is false. - -This option applies to files that Filebeat has not already processed. If you ran Filebeat previously and the state of the file was already persisted, `tail_files` will not apply. Harvesting will continue at the previous offset. To apply `tail_files` to all files, you must stop Filebeat and remove the registry file. Be aware that doing this removes ALL previous states. - -NOTE: You can use this setting to avoid indexing old log lines when you run Filebeat on a set of log files for the first time. After the first run, we recommend disabling this option, or you risk losing lines during file rotation. - -[float] -==== `pipeline` - -The Ingest Node pipeline ID to set for the events generated by this prospector. - -NOTE: The pipeline ID can also be configured in the Elasticsearch output, but this - option usually results in simpler configuration files. If the pipeline is configured both - in the prospector and in the output, the option from the prospector is the one used. - -[float] -==== `symlinks` - -The `symlinks` option allows Filebeat to harvest symlinks in addition to regular files. When harvesting symlinks, Filebeat opens and reads the original file even though it reports the path of the symlink. - -When you configure a symlink for harvesting, make sure the original path is excluded. If a single prospector is configured to harvest both the symlink and the original file, the prospector will detect the problem and only process the first file it finds. However, if two different prospectors are configured (one to read the symlink and the other the original path), both paths will be harvested, causing Filebeat to send duplicate data and the prospectors to overwrite each other's state. - -The `symlinks` option can be useful if symlinks to the log files have additional metadata in the file name, and you want to process the metadata in Logstash. This is, for example, the case for Kubernetes log files. - -Because this option may lead to data loss, it is disabled by default. - -[float] -==== `backoff` - -The backoff options specify how aggressively Filebeat crawls open files for updates. -You can use the default values in most cases. - -The `backoff` option defines how long Filebeat -waits before checking a file again after EOF is reached. The default is 1s, which means -the file is checked every second if new lines were added. This enables near real-time crawling. Every time a new line appears in the file, the `backoff` value is reset to the initial -value. The default is 1s. - -[float] -==== `max_backoff` - -The maximum time for Filebeat to wait before checking a file again after EOF is -reached. After having backed off multiple times from checking the file, the wait time -will never exceed `max_backoff` regardless of what is specified for `backoff_factor`. -Because it takes a maximum of 10s to read a new line, specifying 10s for `max_backoff` means that, at the worst, a new line could be added to the log file if Filebeat has -backed off multiple times. The default is 10s. - -Requirement: max_backoff should always be set to `max_backoff <= scan_frequency`. In case `max_backoff` should be bigger, it is recommended to close the file handler instead let the prospector pick up the file again. - -[float] -==== `backoff_factor` - -This option specifies how fast the waiting time is increased. The bigger the -backoff factor, the faster the `max_backoff` value is reached. The backoff factor -increments exponentially. The minimum value allowed is 1. If this value is set to 1, -the backoff algorithm is disabled, and the `backoff` value is used for waiting for new -lines. The `backoff` value will be multiplied each time with the `backoff_factor` until -`max_backoff` is reached. The default is 2. - -[float] -[[harvester-limit]] -==== `harvester_limit` - -The `harvester_limit` option limits the number of harvesters that are started in parallel for one prospector. This directly relates -to the maximum number of file handlers that are opened. The default for `harvester_limit` is 0, which means there is no limit. This -configuration is useful if the number of files to be harvested exceeds the open file handler limit of the operating system. - -Setting a limit on the number of harvesters means that potentially not all files are opened in parallel. Therefore we recommended that you use -this option in combination with the `close_*` options to make sure harvesters are stopped more often so that new files can be -picked up. - -Currently if a new harvester can be started again, the harvester is picked randomly. This means it's possible that the harvester for a file that was just closed and then updated again might be started instead of the harvester for a file that hasn't been harvested for a longer period of time. - -This configuration option applies per prospector. You can use this option to indirectly set higher priorities on certain prospectors -by assigning a higher limit of harvesters. - -[float] -==== `enabled` - -The `enabled` option can be used with each prospector to define if a prospector is enabled or not. By default, enabled is set to true. - -[float] -[[max-message-size]] -==== `max_message_size` - -When used with `type: udp`, specifies the maximum size of the message received over UDP. The default is 10240. - -[float] -[[config-containers]] -==== `containers` +* <<{beatname_lc}-input-log>> +* <<{beatname_lc}-input-stdin>> +* <<{beatname_lc}-input-redis>> +* <<{beatname_lc}-input-udp>> +* <<{beatname_lc}-input-docker>> +* <<{beatname_lc}-input-tcp>> +* <<{beatname_lc}-input-syslog>> -experimental[] -These options are only available when using `docker` prospector type. They allow to configure the list of containers to read logs from. -Docker prospector will search for container logs under its path, and parse them into common message lines, extracting timestamps too. -Everything happens before line filtering, multiline and JSON decoding, so it can be used in combination with them. +include::inputs/input-log.asciidoc[] -Example configuration: +include::inputs/input-stdin.asciidoc[] -[source,yaml] -------------------------------------------------------------------------------------- -containers.ids: - - '8b6fe7dc9e067b58476dc57d6986dd96d7100430c5de3b109a99cd56ac655347' -------------------------------------------------------------------------------------- +include::inputs/input-redis.asciidoc[] -When using `docker` prospector type you must define `containers.ids`, these are all available settings: +include::inputs/input-udp.asciidoc[] -*`ids`*:: Required, the list of Docker container IDs to read logs from, `'*'` can be used as ID to read from all containers. +include::inputs/input-docker.asciidoc[] -*`path`*:: Base path where Docker logs are located. The default is `/var/lib/docker/containers`. +include::inputs/input-tcp.asciidoc[] -*`stream`*:: Only read the given stream, this can be: `all`, `stdout` or `stderr`. The default is `all`. +include::inputs/input-syslog.asciidoc[] diff --git a/vendor/github.com/elastic/beats/filebeat/docs/getting-started.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/getting-started.asciidoc index c1748e4b..68677d2f 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/getting-started.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/getting-started.asciidoc @@ -1,15 +1,7 @@ [[filebeat-getting-started]] == Getting Started With Filebeat -To get started with your own Filebeat setup, install and configure these related products: - - * Elasticsearch for storage and indexing the data. - * Kibana for the UI. - * Logstash (optional) for inserting data into Elasticsearch. - -See {libbeat}/getting-started.html[Getting Started with Beats and the Elastic Stack] for more information. - -After installing the Elastic Stack, read the following topics to learn how to install, configure, and run Filebeat: +include::../../libbeat/docs/shared-getting-started-intro.asciidoc[] * <> * <> @@ -24,9 +16,6 @@ After installing the Elastic Stack, read the following topics to learn how to in [[filebeat-installation]] === Step 1: Install Filebeat -Before running Filebeat, you need to install and configure the Elastic stack. See -{libbeat}/getting-started.html[Getting Started with Beats and the Elastic Stack]. - include::../../libbeat/docs/shared-download-and-install.asciidoc[] [[deb]] @@ -122,7 +111,7 @@ https://www.elastic.co/downloads/beats/filebeat[downloads page]. . Rename the `filebeat--windows` directory to `Filebeat`. -. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select *Run As Administrator*). If you are running Windows XP, you may need to download and install PowerShell. +. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select *Run As Administrator*). . From the PowerShell prompt, run the following commands to install Filebeat as a Windows service: @@ -154,7 +143,7 @@ default values for most configuration options. [source,yaml] ------------------------------------------------------------------------------------- -filebeat.prospectors: +filebeat.inputs: - type: log enabled: true paths: @@ -166,18 +155,18 @@ To configure Filebeat: . Define the path (or paths) to your log files. + -For the most basic Filebeat configuration, you can define a single prospector with a single path. For example: +For the most basic Filebeat configuration, you can define a single input with a single path. For example: + [source,yaml] ------------------------------------------------------------------------------------- -filebeat.prospectors: +filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log ------------------------------------------------------------------------------------- + -The prospector in this example harvests all files in the path `/var/log/*.log`, which means +The input in this example harvests all files in the path `/var/log/*.log`, which means that Filebeat will harvest all files in the directory `/var/log/` that end with `.log`. All patterns supported by https://golang.org/pkg/path/filepath/#Glob[Golang Glob] are also supported here. + diff --git a/vendor/github.com/elastic/beats/filebeat/docs/how-filebeat-works.asciidoc b/vendor/github.com/elastic/beats/filebeat/docs/how-filebeat-works.asciidoc index 21a6673d..6cd53431 100644 --- a/vendor/github.com/elastic/beats/filebeat/docs/how-filebeat-works.asciidoc +++ b/vendor/github.com/elastic/beats/filebeat/docs/how-filebeat-works.asciidoc @@ -1,81 +1,81 @@ -[[how-filebeat-works]] -== How Filebeat works +[id="how-{beatname_lc}-works"] +== How {beatname_uc} works -In this topic, you learn about the key building blocks of Filebeat and how they work together. Understanding these concepts will help you make informed decisions about configuring Filebeat for specific use cases. +//TODO: Make this topic more generic and move harvester-specific content to +//the topic about the log input -Filebeat consists of two main components: <> and <>. These components work together to tail files and send event data to the output that you specify. +In this topic, you learn about the key building blocks of {beatname_uc} and how they work together. Understanding these concepts will help you make informed decisions about configuring {beatname_uc} for specific use cases. + +{beatname_uc} consists of two main components: <> and <>. These components work together to tail files and send event data to the output that you specify. [float] [[harvester]] === What is a harvester? -A harvester is responsible for reading the content of a single file. The harvester reads each file, line by line, and sends the content to the output. One harvester is started for each file. The harvester is responsible for opening and closing the file, which means that the file descriptor remains open while the harvester is running. If a file is removed or renamed while it's being harvested, Filebeat continues to read the file. This has the side effect that the space on your disk is reserved until the harvester closes. By default, Filebeat keeps the file open until <> is reached. +A harvester is responsible for reading the content of a single file. The harvester reads each file, line by line, and sends the content to the output. One harvester is started for each file. The harvester is responsible for opening and closing the file, which means that the file descriptor remains open while the harvester is running. If a file is removed or renamed while it's being harvested, {beatname_uc} continues to read the file. This has the side effect that the space on your disk is reserved until the harvester closes. By default, {beatname_uc} keeps the file open until <<{beatname_lc}-input-log-close-inactive,`close_inactive`>> is reached. Closing a harvester has the following consequences: * The file handler is closed, freeing up the underlying resources if the file was deleted while the harvester was still reading the file. -* The harvesting of the file will only be started again after <> has elapsed. +* The harvesting of the file will only be started again after <<{beatname_lc}-input-log-scan-frequency,`scan_frequency`>> has elapsed. * If the file is moved or removed while the harvester is closed, harvesting of the file will not continue. -To control when a harvester is closed, use the <> configuration options. +To control when a harvester is closed, use the <<{beatname_lc}-input-log-close-options,`close_*`>> configuration options. [float] -[[prospector]] -=== What is a prospector? +[[input]] +=== What is an input? -A prospector is responsible for managing the harvesters and finding all sources to read from. +An input is responsible for managing the harvesters and finding all sources to read from. -If the input type is `log`, the prospector finds all files on the drive that match the defined glob paths and starts a harvester for each file. Each prospector runs in its own Go routine. +If the input type is `log`, the input finds all files on the drive that match the defined glob paths and starts a harvester for each file. Each input runs in its own Go routine. -The following example configures Filebeat to harvest lines from all log files that match the specified glob patterns: +The following example configures {beatname_uc} to harvest lines from all log files that match the specified glob patterns: -[source,yaml] +["source","yaml",subs="attributes"] ------------------------------------------------------------------------------------- -filebeat.prospectors: +{beatname_lc}.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log ------------------------------------------------------------------------------------- -Filebeat currently supports two `prospector` types: `log` and `stdin`. Each prospector type can be defined multiple times. The `log` prospector checks each file to see whether a harvester needs to be started, whether one is already running, or whether the file can be ignored (see <>). New lines are only picked up if the size of the file has changed since the harvester was closed. - -NOTE: Filebeat prospectors can only read local files. There is no functionality to connect to remote hosts to read stored files or logs. +{beatname_uc} currently supports <<{beatname_lc}-input-types,several `input` types>>. Each input type can be defined multiple times. The `log` input checks each file to see whether a harvester needs to be started, whether one is already running, or whether the file can be ignored (see <<{beatname_lc}-input-log-ignore-older,`ignore_older`>>). New lines are only picked up if the size of the file has changed since the harvester was closed. [float] -=== How does Filebeat keep the state of files? +=== How does {beatname_uc} keep the state of files? -Filebeat keeps the state of each file and frequently flushes the state to disk in the registry file. The state is used to remember the last offset a harvester was reading from and to ensure all log lines are sent. If the output, such as Elasticsearch or Logstash, is not reachable, Filebeat keeps track of the last lines sent and will continue reading the files as soon as the output becomes available again. While Filebeat is running, the state information is also kept in memory by each prospector. When Filebeat is restarted, data from the registry file is used to rebuild the state, and Filebeat continues each harvester at the last known position. +{beatname_uc} keeps the state of each file and frequently flushes the state to disk in the registry file. The state is used to remember the last offset a harvester was reading from and to ensure all log lines are sent. If the output, such as Elasticsearch or Logstash, is not reachable, {beatname_uc} keeps track of the last lines sent and will continue reading the files as soon as the output becomes available again. While {beatname_uc} is running, the state information is also kept in memory for each input. When {beatname_uc} is restarted, data from the registry file is used to rebuild the state, and {beatname_uc} continues each harvester at the last known position. -Each prospector keeps a state for each file it finds. Because files can be renamed or moved, the filename and path are not enough to identify a file. For each file, Filebeat stores unique identifiers to detect whether a file was harvested previously. +For each input, {beatname_uc} keeps a state of each file it finds. Because files can be renamed or moved, the filename and path are not enough to identify a file. For each file, {beatname_uc} stores unique identifiers to detect whether a file was harvested previously. If your use case involves creating a large number of new files every day, you might find that the registry file grows to be too large. See <> for details about configuration options that you can set to resolve this issue. [float] [[at-least-once-delivery]] -=== How does Filebeat ensure at-least-once delivery? +=== How does {beatname_uc} ensure at-least-once delivery? -Filebeat guarantees that events will be delivered to the configured output at -least once and with no data loss. Filebeat is able to achieve this behavior +{beatname_uc} guarantees that events will be delivered to the configured output at +least once and with no data loss. {beatname_uc} is able to achieve this behavior because it stores the delivery state of each event in the registry file. In situations where the defined output is blocked and has not confirmed all -events, Filebeat will keep trying to send events until the output acknowledges +events, {beatname_uc} will keep trying to send events until the output acknowledges that it has received the events. -If Filebeat shuts down while it's in the process of sending events, it does not +If {beatname_uc} shuts down while it's in the process of sending events, it does not wait for the output to acknowledge all events before shutting down. Any events -that are sent to the output, but not acknowledged before Filebeat shuts down, -are sent again when Filebeat is restarted. This ensures that each event is sent +that are sent to the output, but not acknowledged before {beatname_uc} shuts down, +are sent again when {beatname_uc} is restarted. This ensures that each event is sent at least once, but you can end up with duplicate events being sent to the -output. You can configure Filebeat to wait a specific amount of time before +output. You can configure {beatname_uc} to wait a specific amount of time before shutting down by setting the <> option. -NOTE: There is a limitation to Filebeat's at-least-once delivery guarantee +NOTE: There is a limitation to {beatname_uc}'s at-least-once delivery guarantee involving log rotation and the deletion of old files. If log files are written -to disk and rotated faster than they can be processed by Filebeat, or if files +to disk and rotated faster than they can be processed by {beatname_uc}, or if files are deleted while the output is unavailable, data might be lost. On Linux, it's -also possible for Filebeat to skip lines as the result of inode reuse. See +also possible for {beatname_uc} to skip lines as the result of inode reuse. See <> for more details about the inode reuse issue. - diff --git a/vendor/github.com/elastic/beats/filebeat/docs/images/filebeat-mongodb-overview.png b/vendor/github.com/elastic/beats/filebeat/docs/images/filebeat-mongodb-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..c77c37d5ce05b0e114537f1a4aad883b44bc30c1 GIT binary patch literal 135807 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

Jm+GSq6m>4gkaA&SQ z=S^?kW;3;S{mi`9jFE*;|7TPxqVGwxVKbLn+t~}=FIXxG9NxRTU@#C~;ZAdNRe;S3|Kn|D5p$2GgV=|`<#9NopSTVzjFlzx-Tj$VTp}Kkj$9T; znfsX<*wi#qNpu}zi@9p48-9ITMvpAeFu%2VD<I1f4Zz)lI)Phi}n29ENvi1Uif}{{M0vPjOJ=K6~95@?Z-=4n8@k1gm z6N8aO%90s<U6`ydFIV18H=yOHcMt-Z`}$s_Skpo57*Koq zvttV!QrPRKvi_6;(gP14BC@14d!2s9Xa9xlKW43LGJ@g5M)5G3E|(QXxM^41>if<$=8Za+5@ zdY|-LhQBWfz7_)Y#U*Zv2*Ls)2dtdm7V-FG6I=S++z+UyZMbw4Mtz+^d`%^Xkj9*Wv za6G`CMO6oRjG^XTFHyS!WBuaa(#p99@~?`N^lFG+;Nd_#u3G}Duz1IBkp#BA zX7v64d{F(>u>?BY>-9L1g@B_ae3=|NO@YWrv_}-4cUP>qt5*~PbAzX^nt7CdT{Z1cdmMRS5jgn2=yL>*0V}E*V-DayiNKUg-bB*7u_#d;`3J0hY zQe7&m5R-f%S z+%jjvs#Ccv-J^1gJKXdP1xPu(M-sTHAyc^ZT*5eWp7o2RPgsp$;h*DSP2chxdz*(1 z;mZedSrfit)xaZnxdyTNMt#V-W84wvfD!uDyOGPjV;vFh4oJGuXT;K;Kvxu`4>3If_flR=X*<>19a$DO`;)wa$57hmW|nz?db+c4?jMCM*kIX z;DC3khNdPUS3nNUUq$cNm05MS&&})^&CZ$6kKN<2ylCeHHI0ujx`s zb#SJJ37h}YTO^=%zyN!PYpr0Y8dw*Eg*`~tJf@O9S5TgGT3cU_A{W(ap}P|6e#)%c zzy#xZ`s>L`H8kAMA_A0oNroUS@+B30Qtk>8%!qKpc;}&biHGkVOyeh<$J|qHH+^DU zI|dDCJ6>aR)bhYM?!bmJ$dlzveV>RO-T|!Gk<+(jIg3&+ zU%oWRo?>x6W+}x*Fb&6tPPv3XkTFQxi?nFQN^h|@@Jd$V>NP#_c%B?52Wkr>@T&6 zHvCE4d@eiki2UtK)|H4Gt;$vn;8=MVBQ3C%I6#TUn zcJToG$&IUcCwQt49cAB39ZKRL=A(`ZwOAOzA0X`fRtQ;i^OG2p5;c|?WBKqyLhTUH z$L>FdM}~6Xlr@U`I0i*4(a_bi_aKJa!OC_#I91}oa z>eyIWN#zD6mVvH%z&>PUC6-2>R0A(LGc#&$11&OqPkEw$pgplvw@E6#@e?_GpAHlX z-W!Q+>~0=8@c&ca?2*4)1&7}srPMQ^loA50sr2RabW(sQ zJGi;IX=o6xlyOOHOSxm)<8R?JALMI#Mm6=rv8GJPIZP@PVq$jxk^xfbfJ8afm&YXn zu^NyoG|-+?-7|U_?AO)RB|8A&g1bq_7XE3ZeF9h%(@%}3LDbAb1` zL*Vg~CtY~?jCqrY)ZGFd+Ai`bd@Kvnt|&60bG$v_f8IMU6zo$qFe$i#gesy2^)u#Z z1XN7wYXaVW?;0)inp&F+4SH4Jo+?7`RC;P^KC9t z63Fm{p!Z51yZPAm88Pjk|M&B0xm9!!{W4+=w5%+1@C~=?k%!(4_&fvzwgglK!vb@2 zGalEim*$OiyUY{;gRFIA;p*wIY<;VlE2KA;5pdT17A$0wNY$cd%Jjwap{sCi9JiJB7lJPxa0N+1A26rQcn^0QdB6Qne{y%o zTZ7r&6ap*U3X?S}<@`v*JXdEg-^h_m=8>pGWzg*WQ|V$d0C(9bn*e0||DFz%0Pp^a zwpQcUW9;%A!=_n5TnTI%EJ*A-%2jdjPm2n=`tfsOSJcJu^$Yts%<_Us-IibTB(2tvlB_JVKiZm;R|zVE?O>!iXY z)Wiyfs6v{OSWE7R0Dpc2?kGVJ3o^HW=It>jm+8)R5|(pQZl*gY-ao_|@P89%xYB87 zvh(*!|6Okv?8q(GsN?YeeeBOCf!ZfBg6!XJ0%R>fAd~@uwK{Rh-~YroclT?+4-%%P z*a`&j3VtC5y5N(nOn6#X|GUH~P};2nXHaW4q$n~SSv8*=~OZzaKC2%|(T{4v1(vuEGk$DL9BnV7KG|M~!ct1VN4`#|of zAo=%d@8-nWUCcI_l`$`_xg9kw{(nz+Kz?_E9cym7u;S(OY-PADQ1kDKk$B1d_ZqZ- zw5<63$DD)rz^VV6^8+|JUq&Ed{mi$7NN@vJ{`Uq|E<2>xA3bh&gbG#7JlynG@3XxN z4*t9gi|F?M)oj#0kyG4yS?#BMrNJo=0yj=pKK-u)7cIEuw}CL)KiGIKi(6S!L!wg zioKnGsyro}{wA`V=8pk3xHEyL;GPU!cK*o)|IFBuyIVT>JZAs@-qIVe9EBsI z$o{e?|Gv*=&^n~NPE7Fk|7QE$69FSFgEwOpH2?SHG5&R6+MG_pMF)us}ttt{cpi)5Re3Si0ZNPH*C)~yxVlYzmc9& zX#e#m^mw=d`F}5zcDHK~3A_P1u79fp=RhPtVx&m|^S?=Wca*}(p@1#~SauWg(IBb- zW?u?Du`w|*nVF?i+|%ZmYU0+QajQ9I`qzIh@b)yynwkwRo8!FJlRH9Qj|d2|9B{y4 z4|HB2(vk<~_~pqqzuS&RdR93B$vGw%gj>(abjJT~&I28S=n22M__^eFX?wT=?*So@ zy`5d{)XDGPzgbz|?7T}#x-;=UTLan}S3W;x{$e zY=)qyGYzB$J_I7_OAdaU>4UAJvf&hNkjV z2a<%7Z>rBr^jfqm9~8}CCCipVS6ThTP&vw-h4sTp{PtVU^!zSNO`(o2UW|WzF7CVFI`tj9X!qW(cg(%*pPpEt z8{U7DxQ#|xMa6MS*PROV5ne7YFW0tj!Aoh%@;Q1djK?twgTcgsHV&LzKoUUzBC@AT zz~}q`oqzt`^J1xQerE+fzMYRcT5o~{|LvHg@P`3FxmXFPbL=h0IH$G#stlX{qwG8z z@S9&*b_Dvn$EF>guSV0DUIe1CVaYj&8Fh!&EqVo`TyR&qpGJ-zsa8$#hZ+10 zP5jYN096b3F4;t?wFm^-&@RMGu&Rqn8^IoOUyQmRNbE+$F27VjP2}>hh4sIr@$W|o z@3pt~ahng{DMiae(UJULLE#)gZzz6qj$nNr?CTNb2*{PM0P3{x)SqsA{$YC8-!P#5 z?Y$@Y4X7^2U6eVe6hN;CRC(Rkt-hC1GN&MY2wKn3?d9vAUNizdUZ&5{>HKm+91)R` zjic)l5)!J0g{*%cZ^jgAm`$bN$?s20P31WqSeLcXKcsvOM;NBe>r(OF`G^PJp_V7k z@!y2By#{Qmx`SWYtg${#hZ9!5I_@mB*N0!%7()zL6oIDZC)T~*4}G~Gg2!w=k_8QZ)pY#B^Cnz?e$*AW+u(9wa2IIp^hP}&f+~)>U zbxK-7&S>EmrNHyEw^xp^gQ4yAM%cBSTSRm*S+Ii~j_C3)qVNg3XSJ<}6yaJY zj^2#$e|11z#bC+!sLzA$x-|x+j#(BayL6~GhJeK3MrSZ=2kdNkB;T{p#fxQSIVA1e5C?D^vcU)cc-WOe?V$p9UEd$fc#>-2{iOPf| zI6x(maHi`hZ1B1A9=f9)%V3ac0#+uM>4WVL4WyOc4`2M@!T;?y3zDs*Jh&UTqlMZI zD(t@K*}Su<$TWmM=2f%V5OD%bIx}d;Z-{q_QW&b)z`zrraL4SnYr8(h6g$rb8pDB@ zgO#3em3TttUncU&pvVLqij0&^tR?oEd{Bs8?mRB|CDyV2?g`|S;GEwJ)&pr~EK?XP zf|&P#XZ!FY7Pxd2B(S)g@uR=!oN{{3^DMCfBr2)4(QK5y+`Vq#ulliAIG}z9v}}6* zPL73D*e&pCIa%LN^SH+ZjQF#@o$_R4aDI6IZGN*i=e_@!PjKM_Vs{#}%`m0fC%nY|#OSY6|E)qhB0q}SU2>|HCCxU_2 z%1B}u!}aNBSQd(F)D^l7%g0`Z>QDdw`xJxFN>S2Dtg%Lr39A(v!px&=9+<-C2^=SZ z%-7{*aL$JhW&jo8a)(Oy_4F`S(WJY4__e2?+H2;Ni_R4U;^hTT@5KoW@c6qTXkJoK zaC35YmVeY9d4kS`w9Da$<>E*K0tRNF>&V^A*QFD!KzDlaBChztzkknt$yZ%jd6Z4c z#As)_LYgtK=XZk}oTSJRdxDCsei^C}lBMv-O`B9Jvf(`OS(rha*L*q)s>SPnJ~Ud6 zp?)AzoqnEOTx`=DL6p0MfGHA_m}uG-dFoABMCdw7`TB>gO#q}La>D5-OrXQ5I)&T3 z6W5dM6Si@0L;ypw`nmkG(0R#xUz+>O89Rb! zK2y{?jQZiUfP90yJN zt===H$*#Hm@bmA;8X?dSmk{_ZH3kY3f2fZr767`a6Pe2sw@zf_?1kh)g&K9@136A&G1p zicPjcjiI({SY&;=J03s3l#Y?j{B)fH?C9U@i*{G*uW8U5(&=naWYU z4@62-+Q95#RK-F4VI;#2(AG!!M#MgtR}uUUI!qDs`r1AmHLAnN7oKA_`F_xHw#cm0 zDMlR1RwNT*rVA{2;Q!*LQ*4mY`ZiB%#Uozv!3e1)076GS{kHGu;%An=(`ULuF$x)5 z?9>bpKJ3g?@!QS@=Og`a7#kY{!Ee)HFG*iCMYQt|)*l!9ZMRViiHVy%D|?S&8Nmzd z9NmD@4g!O`oxq>rUIf2>0>A&Jx+AZjKNTw4;itpE1kvL3`x^=){>|aJU!}-*&Qg-+ zq<<863KFt+c^1w*2ohf~81&2Mj}-ER@r0jPefso?AMC(&OMc-C3^6oR_EfhJYCIC& z=b0i6xJVBp!znqBd`;!k+lS>Te1m`EcmO%}^PITY{-XH718Q_%#%^%SxMzx>y>RM;h;%zK4($SGwv7Ms(r_RsyGs&!0a_hdfjX)9rQy=y$=q zw$j+w9*l*rWPp06drp6*>Ru@zS zw7ujLRN2h{j|V^!08$qvrS(oZARnnaUbd6_d66!nLeCFE^bKGS%RwVF|4CE{$SPKu z*4c#jm9$(3Fq>Rv58lL6*ZFSNhn>+wh5RaWFx>Vz@N5kb!hsKLGX&l#W~6->3N7bfvu^U|Z7~j40nzz$ zD_>^zgER{`W8ONSn+dl&j)Nj%(^r+Kf5-yuvLlqMn$b10Pgf`hAykjqxVN7}ZT&{e zRsK{89H7mit{#CGOUxGbHxKUgL~NNPP*id$=r5Dg-xQxrFhe+9Nh`Fo~gNvzuU z+hWlIQtS7!?r{YrV(YANx5wkc8v{g;O-W=b6E8Xjv<3P~KtSh-U13;!8*gtbBDr$Z z{T5f&_{Z=FpPM=NKc(4Ul^5_ddTs!$QKTr1WQn=-7X-6t%<_Fpftvg>uSpJZj@Hy+qx@5AOw0RN8LK^mqpR zu22KB{okPYHtok{ z(0(sgJK{GEfGcWSXyDq7k)Wh+Cp{GKA1cxwj!KCbu4QZlwF^Zwh8u6FE4)Exc6GP{O_P0Pz@{i(%+u2l!@W3M_m5aIUhZFaRDEDU4(M3#hmt`E;SI z;oRKZDyB~-J{cjAp9ZAyTI0vLmmFKeR;51Bta}0A*=W#la_pXCi?}=Duto)!Q!NAUS0EZK3QO+&4<2imM^T`I)nq8*O6%=|o$#9-KB84F zsLcTL4N)#G95`d=G!jA_L9XT|s*8h)O6<{t;ffmM7c>sn;Ix#AE1l3Ss#9+7*OOR4 z-5IxW9W1TGNsuvDcjr?}^H-BOxZ+lo$!XJ8!{0Bld*M9`tEM0*#vDf`EfwEedNrpP zv>JFjFIp)7(x5=HuBg(|&u^Fi&FqE5Of5~>A3PG^fBx>+F^Wo7!n{}VOdLrc3`Nru zt9vx2zj}bAQ9)j=5P{2%%8klAmj7Xm*T!g0lu>X0hHPLr*j9obVN`eM5dy@CBhDpJ z(x~X|(-f{BZ(*73tpfw8IBK>wp3IU|pAf!QOc6KEgJ2#-VRgbvz()Z<2(Q}wuI-u+ z;c`XVyREXeO=YdWAH=#Q^qd2e;blxQoa(vpGB&ICLfz;2qlcdj&rvZ&94D+_WyR|Ku&Q!-$s@aqjkbk!m%U5(ds4Om=vaO9uXUGbwyGRI>t`iBJo)m!;%bCHiz8)C z1~KkDFoXd%C|EyU5%<{<)GfjNE&+z}noLOfn845=K{h-zR6>CedRR3gM#5)97}!0) zCLk|CP(!AS0u95TB@k@22#Vn-ENKDuQ8C}Jz7DVf9B5jJ=r_)0f5EQ*=|B@kde`$< zkw{mMn9Wlye-yuqAIZStNVO;mJmD7bzKC>k1z}Q62*Wjq0# zr$cVqzvpDPmk8l$@VN^=AwEk*Ihna_HFdU;u=*-{>r7=mTUFcm2J>oD>D0HD-=i@j zydAD9gyz)9E|UIm<^YTydygp=wQfQi@685_6P0p7N7xAOl#Vm-?Uy*x+QocR$FS^A z-En&{0w0Cnudp%|A&i}ZUvKN*wK7O@_pgqOj&9p3EXw|fNh;t!;rEU}OA2yl=q$|C zWuPr;`y+bS-Vh6w#3H&R4f|_Ni?KYbzSkz5iHkuGc`Zf-&LNp=N8i19kV(;DxbTGW z>wQG2^|N}M!{>V>J+FT3V`zO5abmje?@!__2XAq5qGr>ZV-2I8CT3px3zK^YLUuT* z%>3_tR8+;bY*iy_0lra^=y&BmW+WD0|5906LfcHg-i>A2UKMN~?=){1f2}ZaMJgK<8M5 zU4N+ERBEDQnP1U@{od_7>k+$XE|vq*QgLYerf9AnN$k17?KCzjmEwx@YS7q2aSL3t z(Py7g;C>oc;>bPE6wy@qq>oB1+$wXuO|q4Anz`nV_67MgqU&BDb|r8WRnrWkH~Odd zQ^pgG^Dpl%yh^%7LwVOy*O&vJaY`k$Qb4gpnq%cse#lAnLjbPjb?_STDp^AL$zr_6 ziT;ChK~xVs2;=H(qCQ)SBJgZ~L=wiwP?73zFxWEN={Je#3B?`|GEQ=$zq9^l zIWUkq&PAM;ht(}mu~lTVdC*`&w<&1zK*g59AVDIN-#(Lv8D30f3jOYY*o@sPmrjy} z-0cv0gFz~QHPa5N)rdWFQBe}SZXR;2-JtEOaNT5WS)Klv9qoC8A?ldqZ$MUmkY{=N zF26r7r4|!2)E7{y+G?xK&@$4<#f&9L$-AC0N6mj@_OkFPlDYAgXeU6nveR+Q|L~dm zDeV1galZa>xXt9`(F9$|TrX`f;f-h~PLr%ym;7ass+9K9%7ZB3-x`%J&X4I>&SX5+n#cX2$3NoVACnMdawxlFaaN?Js1*R30#qT`EuJmXSdpU?}eV; zVn+~iB413(y%V!18C)+TB{T@MnV*Oo!ua{s5xo-m7ChM|3gfBILB`$fCANbWiD*%z z!5;T6c7YSXM&A1^bs!W1tN!cdejBFb?OxOV$|ovE=;c*nV&eCF+uw*5S)S`D3Mc{P zaQwu5p^9}SyFH>OP1G7+#A!qh!W}>J4y_|y)C8?a#bNJEY-R_EFY4RAf2L2IiG^RV zq&7Bf@?e94B-o6=T<*~X?^4SL8M=g+&KD5l(4wXqKhf%~f_^niom4sq1tkYJGr71J z2ewkj2&#m`IVyyfsb7LoE&mgbHKN_^IeZoKy(5ZPFkgvDR%L*QJeRbSQzbBs1(xse zOjwm=UNAQ7j%d-->D6d)3|P)Sc3tfee$jmSQ!F}O4&V7kAjeXkd1m9VP-m}SOfO?V zsG^sy;VKh}!eHQ|(5@(B5)#^!p;5K9hhSgB7Kp9ApghUpCn@P$MI?CNdie2kI4T;? zhHJl7IZlUi``2WOl$MdW3YW)b-FNKrK#>J?_m|T^P2v5X^El79Eh9sSi}R81h?d5| z<##WVEKcb7?S{FgNtj1_9*I^m#`12f)#{~pp+jZqalP)KEf47B_@`j0Mei`FX@2pX zmau2A907?O8Rwx+z01=JA2{}*Y&Fgt*&4ceKBetI?SZ!fN2s*T^&nwhS5 z)=1M9bBKv+-AjQ%8q>kA5%K8IvPx06V}BI<2ZU1E6 zeU$;mlP2!_LSv06_lJ?JB~7)0_DG02u9OwP`pB{64S4VA}^?G+j`HvEVzX{gP) zZ#^=_ln-Mm6D9WC#kaif2_UUAHI4H5x%^pHw@X}zm$9A>PI7)JU2|5Ld*c2`E z?cp^&HzmWW+6NIZZ7#VcC-s$W48xm_nk4;c`6b ziCz4#k>>ioY~Y<$rOl%=u;Cae?{pjjFfhme{%JtG)6!PFg!U3;a;#>+Lv)tfu7F@; z3;j1GH8uOJ>dg{}%%-Mqa0DnRxmW5N@L?Ckr%8JhA(J-G6cO8 z4$meNdot>OvbJFz$Nv{c%+gUBrwnkIG_jJkhSIrDuc8YP5*3Z3aOtSrBcvuwYk8aj z+YgHeFb+~721MzHE03I&jr>LTv^;tmjK=fc#l4t8hO&^S5f#RLMlSEMVIy?lEjkwDjF?BIJB zS=IVlgvj)@!1oPF@pOvc&Bq7l2ELY0S`oWh)e2G5nwVIr1kb-SB;KW)GVI0$GQku*RG7+jKL+UNE>J7nn&@`nIr8e@-= zmbE(ytG)=^D~Z9V%u)VFIGOHp4^Hz56A6z#Pv@7i1{g9dBOxV~y{uKQWm8LwBlnYa zL!{lQwu^m^QTr03R%k0qE|dLpSUsGFIrsUXS-+a?!6^l-C-+Nvy%+~{_YX=Y?nk2C<$7xEbR>gnhR$8|x{HlP6**qFBfh;k}81+Wvz*FLsU z0Degub>RY|Dd16QAV{`1YeaEqA9@3F)NJ<7?@C%#rZT(LW8bZzK4_z3$w(Q(VSz>& z{N>kn3t5%l@6Tewv)nD58|d7;&&OF}htv3A>fP>+hYdN0b#*(2j<>Vp$+has55Pza zaRD0i_#+j)c`LpYc0C;)@g?d&Y4pa#_;Ig3(z@j3Bbt+Iqd?=plWCT`OZAe826K$4 zrjPHZiM+no8@nEAHxs;=hVVBS({QIJ!`L0HzBL4$qhCeyT074jkZj6ZF7hef z2pkS7u&tAv3-1q<)kU)D4G^jya5b>i4rA``mUY!D=!znqb|UNXicN?}nl6CGEhMo; z)j$}6;Xh-mBlEEhA>2LMUuGder8VpR2zJ{m!m-P@bE>bezn5#L8Pv7S3T!4z<@h@y z$xaSmyg!JJyH9mCw$s(}Djv>Qt)=uPscg4E2VPwnJZ6Gnsd;R6A~LLix-A3I=3UqR zkAHChf$qIUM0nIXDW4eRJR+(t(>I$N1iyN%3_fQ}VX*eHpGQ+e!jA1oUq${4KJeUB zV3#v_^cLAxzV15gVagMi+OwJ>I=3fsWDh_2j}goeL@^p1yO!`a(XXucYQ04i7O^El z^|Ml)!A%>W(!7*IHvITQT0Y*tgawEZn?jK7N-RWDPYhh!PHf#|C|5@3m`I|-;9I9@ zhlO>(jCgu3i}D%>#v7xrb5 z@m`CSS0X&?i2%N?F^mDbUzJ1EFSdh!hL^m<9vb@c<)vQT^%V&G;MWy84c5*$t~<3 zeKlvCk44G2l4@Ow?fTG$2%{1Yl|GpQMd+)Biw)3{-7KbeUVq1bg7DtA(0gy(1nW(U6XBmKGP*%0c5w} z*7OxCVGnid?aigOU4!giG3bW`NE#7$xU6O*p(g>Lf%I4j{*d6yG_D|a6Ol6x{xZS* z0dAPbZ8OOR%EE3H2f!A{zY)>w$E$C^;p>$+?0;Ci*MGeD8u5hZ?C0py%;u;OV%1QkO5*VlR zG+Jdj2${bq3rgx$T$^l;zwfVuPo1YrrmOTI&3Q#H%iaTR`tH&g{ zYdYudW)98)|b%q@iYv40xZ(mr-t(WV^dMbMfP{yA_X>V+U-($$>a=g@S z=Obcp4ktD_YMjtea8(FndtjX!VNTFt5bhb}D#L#f#Bvs*a*o;>CaIv)8W>9lZo~xEE=69`S+?G@gLTgpqb%V2hxF+PZZwcL@nj5abRNkq)h5c^sO@$kr8La&KVhJdv ze=r0NF!CeAs16w&HAZt4x@Q-sw{yan9?XT-kzd(b2tFwiAWBNauo-m_drL;LZgHnt zWcC)k<$Oz@Y8JsNryoIgib8EfK%y%tA;EI&w%Kxa*5>}*P2@UL$a$E*?J}*&d;}D5 zu7?E8TQ#drXUAN;oZnO73U_emdMxyMB!jjZV?6Rj<~>a#;BD2S*5z_54pi!UH*7@2IHOvD&e=-G2_E7ng$bnT{#de`!+6X#$T zza(J8Z|W7LI`|?{Sv%b+l*WuG6X^W9`8VF(x1d0%utX3wK1^34vFo>{Q!Yq6g!_N8 z)HCPsBvGIx9XdiL_h_fDPPu1EC*-z6_)I`cRFi%u!P_j9{?l(#YD%1R>4S-yzjuTZ z;7@fgP2~3K*O0}}{V%hGHXSBYWW6$J4}Y340BhN3N`o?5!`3y`UjrH!fG*?-a3EdL z8)HI_*wIq@Sg7V3O)rGUPH;Sc9Djbx6Z=#Ns~{msuVzP0%OD}Hm`eHN0!efG2^lJc zDux+RLFU@v@B>NeL~E1jwa!dT^0l7Jm~63h$0%jT8hbeBXO@;OeW1kv%z)5W4vy`B z&V=`gM1xB3G?3T?gPyEg{N@m|&WsBwX@atdxPemRSx`O3aXTnf`kuTh8=_UC*(Jt3 zYEE<;&xsdb=+hAGLD;e=l<54 zl6bY;5GhJN=qq{_N_2gd3n$@A(>3D|^RbGG>7=!#nY<_=D-do+gnuyw%#M9-(RMs$ zH4)Xu4zHBS^<6kd$iRz7cTUYQRMJM}6FuPs6wY5bWf0!zb2$}B2J+iIe5M^mLg;l3 z_R=KA!F^CpnXR+8hv2a!Nz#T)X(jr;_V1+faTPR)`1@k=(IM~ilt>Z`!|Ym4)QY-V z8o_>8{%f=N{Gbby9n_hpPrsyaOA~S|fGYGV2dDy@3r5^tFWu@kIGI*QJ@z@BYP*?8 z(;IqRs^2D-4slLevp#nj?Dn@jscX9)ioabDg0=p(!uLQsJJG@o#5E`=79>!SR-lW& zB~%CXbLlN(ia4Zid-_H(tni69gQ8@;qh(?pRv%osuPv+XRr+Hge+#o_;B>@5SL>bmz~ z21Xc4hLD!-Mj9lfkrF|=TN*_gh7M_vPHB|xZlp`3I|Zer6~uRQ-`>yv_woIv!dllRuL;qAk5eJ1-ljY_ z=@o3TGw-2Shg!t*z$+Jl#5Av=3f_|&#GzXU?aJ&PoyC#I*G#vAy4j1}$-rGhWDoQN zKZoka=>j#JhI6>IvbENe-F%VSeoRt&sW0WQP@+vXDCL7u+X|DzPMleFNXAO(6CXVm zDQ|_oik67i68`Esj70sv*=T@O;`Qdmh+*K<(BouGotGG)(WJvMD~v)|w#X3Z0ry%yhjM;Oyyy zH8;(J5WnMnSx@Bnf23ZWzxuJs&OiIYver+PG{C{&W{XjL53ufKTM|xOsDXXqpevBO zGgIKXB)X_4>TI<(@a^URb~_5hTR$U1&XT>YI7m~Rg4I<;6Ztr4Sj5+Z@WXnKL%1b! z%&Zc^iW&Ew?kvWIrtCCkgE<(>KSvasB;g)&qKp0L#i#Vxieu|pKj2tGqTujY+%Rl( z59U$3FF=Lg2DnK6EvtFGdIdCtx?*5?I3bz?kiq#y;Pn^cs}O9mkoymx z(n)=zvRiIW40l#h1$039v*DF#cT6aMt;6y{i#56Ju=DW6ka_tH;t%2yF?R2E9C2Gy z>JiLimBQOE(^*89f|PfsP8_-?(~Z4GJEmS}4-8byCQW*-L?eWmMX5@t!#T3;#Yau% zZzknP5o4zx!l1k$&)~Grh>=wUQn|YZ2cmr|)B68T*5_!6gN3?55leCx&?y$mn7?wb z<7R~tLCn5{5DrnL+p^oovMx#g%IggdY;2!RLbrG3IG$=f*ecuK+e6L;1Zg#WA(e}q1@gk=?oo%%ihoC5d(EWmtgbVXfv ztvaesH=yo4nN&zimwbhGWcn(IJ}6&YaWX4x^e(@z*B=nmR8oZ}C(Zrh7a>GEehm;& zyI;{%XYa2OPa@sqfJYYD2%~l18m%S4#U5}esya^)<@Oeq+-F#~dfyS$`1pFi2GPoy z*U6GB80hi!0fz#145ZP2&}CB;^AY(>g%Ksfuk6CXMB9)g@n26%bq!ma5d?ALUh=Ay zrqJzHg6i`s2q6$-N*;*kaUYDQ$9;41!4e|jeD@t4BD>j{(qk%yqjFZ0Ygb(#eRw7diRn6x}yQ6j8tH_@QF7gPFUHS6EDDO`B z&J?FjjDmYWY1#!QS>q(}8Oq3Egl9MtYYqD7nZ64nVCh9FVsteD&m5!>Yf))Anr7V& z2qluaCm!j6FG?k(T*OVJppRoC(oIg7NOFa8A&+fWTo>&T(zv{Kb8wn5N9xwgK%cJcS^Q(AZhWhu^K=}mgam6pyA$~&m!WpOZ#|6d+bZbhm)DYZ%)R7Xw67j z^;1}TS;alicEx}1sRq%uJhkqel%vd4dpd;uJ5>B;9i$PZi?A{(*T~yjTv4>%kHEBp zu&?RrS;j{jI_MT;Z6&!xZbCTY@%?^C93hD3#(gh%R{Ye(?dG^Nk%~Sse;}X(niY|paNPq+gAhLicKS<-meWB6W z?0Idc4?wR;XoA9`yX~?Fl;b(Eg78pa2Muqmoy<=n73WwTomv-iNhEG%+UL#?x1A_B zo%i2&@48_h6rnx0R@|FNZo@L&d(DWCLSwF3rrXEHJHl}KlN0e%k%Fr->7eOr77sSu zZE5|cw6g>8Ybsl^H_my8St2dY$|XqjIH6bH0Ck{Q#E`_11oAw>%T}KR<+x>0fBpuL~MEAj!yaiTY%>-QQv3Dh1gWxd=^(xKTa z-{hyenSIm$VbXb@&P5izZGnV83%jC>_YJMuy5_| zI~(dA-vVaA)rurjW-DtiSEq=qSqA8r>4ZH87kfgg4)nVWb3DYr+#tG!;K_MLFrd5JDtM?=4#4h)gK#>$62h+oG)TM z?^oedA~iAgsHz3FGy`JxP5p-Du`d!0hTO-IUO53>qYp7*5{2^$y(%wstYPNA%s$0v zzkiZ8;LfO;HA1G=X<|m|^7%0_4(?@U7-q+N$_n+~Ij-aj6Ws8W%*GKATiE28 z;gBh`zNh;g;@2V1^#jF;p|yUU3wJfpZR#63mLJ_Z{QPa4_B9UT3gvd0S}H^zq))GK zsTB+%v|YG5$@mc_ehKJ|U6rExS-mWRB&?vRY7R2%W;4S`r{Y3+$L%jCJn}`P5WiEh z+`%4h%&p^d1no-a8w~WFVVui1d^d0^6odLSVz>!$2QzgH_6<@MDV&;VCWDez`_U=R zK0JnRNQbunz7B7g)P@iDpuKEf_yiY8gB2B(tail5AB5TsnO4LM67H;Jk&Y?rn#d+|raFnvlQ0%RoU5Q19CS(F~hl~~#Lq8GQ=*3UWF zrb;$A@ZHP`ECR3+zH>ORIz+I|t=p~1?zffo+jBrVsMjh|j5mgUoIdGWVjOwke(vWu zjfYJ2NovI+*oan+jX#;2JR z5`?G8fVfI|rt8>EWNIa~B@}6b#QNOyaa=DH1@2YrviE#T>XW>Szt`;!8yoq!K!?~n zGpSxLdikPzdo*@rTpK>2{Rlm^`}PioRF4zak0Xq&*e@c8nN5S2Wm5=Rmqc_RCWW|M znS`8t)c7hjtXwo1qfS1#n)(H-@bi1W`*c*Q`4N&v-GT9$`50nyYdbq{Y&4k0SH8Lq zJqFe=UINLH;Ju5ip$FNZUDDRhAUAdTARS2cD#W7U)5>k-3zSLYeUh^cKshX}8S^|D zWK;%UusE_8)s>pQCiH*WUX7Ja53;ST>zcSB!hDh} zXP$E{7}yrC$?z$;>(S?9^)Fn6kEak97?Doj!boZOH40YYjV%^Fw>OrF`yhs-GJtVG zG8cIrpENzJxgk?8_&IN7=&o~qig&*H=T@Mq!#p(1SLJ`|3F!Wnj9IWuJpz-$p{}o$L!>9KJGFL`^c=drKD~mXtY4Go@`OP6 zDU;Tqvq1xvTCVqmE%-3ptZ_>D``G!VC!R9Ynj{L~b3xP4ZH{$|xMU$moHyyKf)rhC zWL5An18ii$nx=P3JAHAH{D>nR^)WM~rZ-`4!)KB)kpt_z_TKP%Ok@5VJy~j(9X>x2DD^Rd>4SO^KN3k@04vx9xD4?_i zF`ECHd#&0~PJBp8pNqALDe4SW^W=Pun>B>K#&Wb<<2iXJn-rpVt=F5?z3uic3CmK? zhBi^{y!nY5osq#A1hm#FSgZ!qQ@_fvA-q<7h9l?>1>4mOnlPxE zQP>Z~t_u)du1GTL^QQFWQc0{~kfBeL+|zL^74jOA2%;}%kP1HYb>T73|AGO40UG4D z=qk9KwY*<5^S6~Zzh*|I3szjmPboP)v>)sneE4>e5)n;tD801dTt`>L<-p1$lAua{ zP}o^|*jPpfCxG5O;*L(f=HeF{t@7Wjim!-GkK7I#RP*~dt@$7n7SAzz0>zJgnnf^U z!Swr^k0a5eB9?LpSL;z7r|24F*5~rBOooWiF6atmbX*8^A>WjQoi~JunH{vUbTTFM zQL;dRD|0-2ihW4IJrZZSo9mhNQ>w0B1^hnDYc!1KOg9@u9aJHMW1m6>%#DwgBx+6Y z!ez>N`=6or)On_Rp)vB;mO$-oRmk}(a*cm7pm));Ka5*)P0GeAl$&F2kPBI}#5Y!b zhbi?sG?g_BYIR@lB_ZSYg7Cm~@|ju)0~gcLbH%ULoK~ zZ{CriyD8|zTVkBu!3`tf5emou4OL$)` zk8ld{OVp)ay91(rzZPobOHiF1ee19DYRc^h{kK_>PQahAtZtBuTl1MN<5AH5Fjv6y4NdL^x zz{8inpthp(4;blTNSnVWv(?M;CJi0x&CAV!-*cL-65xsc&1y3>KFlQf8}%EJaBr#< z$WvuO$k5=6tY(#${~~jw{<$agJBwlyD1&61I!94Lj9Y)IbSy>~`b9@RYndZHneXV2 zg%0wHNm35_>=1LEnx|MHt`8a_AYX63nRg?31n~IVXk>2Ht$pvcR^|OfHw=UA`k0xc#1Td4Sv<$+aUokw+ z(-rR^!tnNAgvdVw{N$b9YMlfV8Lsg$?8RhI6zcOZrYn37M8zILzBZ@EVc3dQ4gbkM zhDxr$HYcrAX)*71&ay>`Ow;w#O_?wE3KjN6 zpCpq8{5mso@ecS=KQO*#F;rX>JSCw?+%0Ca9)Ts$&Ln@iXG@X(SAfpmzK(0>u+JV- zXczHb_cPCU2?+$9Ao|1?x??ahv|BtIB*{)R@Xw;(G+eJy(b#o@)=SribSg{C`lCx_ zEXY`e)p}U+>5`3AlRQrnnxi5u-IM1BGKVrqXehfMd=5HCgLP7U^a;^S$2`*D`)8wx z&q^kl;KiQX1EO`?>5xu!Jx!99@MmjRIjnhexl5VwbY5rISARnn6_NdCmFv zSx3MmWUJ|eHl8shCLsZ6mAo^8AwgXhOqvBu{lznj?ttZM#aCJf`^j<8@{)z33rQ*n zcv1LB%r9^?jb52x_4V~Be5B=62NkB_B~;Y`1?g>=CUj-$*n!cV{tp}i#jxf%0g8gC zg!@5i=Eby=hIK*AQ5`N(^!cD){FXbjT)V29hTKk77ah~rm|Ft_Gz6q(>b7rmU#z#k zw%?WZ+G+Nf{W!b>|B~#8E02Tj>dUtptsVjZSt{s17@WUsj=~JSpK^!MKSiFMxdT<5bx{CD;CP=U0WmV^1h>Twh2j!X{DQC@p5I4-9 z09XE{ss3A^k4*r{ycZ!6`~%Z&|N57$seYF)2C}%5awO&r{TCz*GXHmvyMnPZWx@0P z#mDcEZ4D^0LO?{r!8&Jg?6AYXw;jMhAm`_m^Ep#rm!1`>fXiXT$o_O)zgL-eIF03p z_5WVRfqcoa*!X7E_hSA)vkg2V91Hq6frfq9%%I)JG098A?Js;T2z?hV?3Ap8is^4h z1D98I;)gsp`uA^tXXR%oSfsZG>QVClU^59~XX4ENyFlXh4&_43YS7{#|L;RTcvv9# z4!NI;Zi3utHDUmYEVHdxyC8=Dt3drfG|UdXe6!8G8t^T1sDFC;Y>C?Y$Jde8$EJr_>$o7jbe$Bftd(N$p1fcMg={AftCBXIfeA?UsxYP zjQ|fKVG1_M|DTKhe_!hke87v^fh3g_>>a@0 z5s05B^w(H#V$thfWE=S{JS3_c3wpKpzbAnq`?q*8JYpJz`FB5&$Xe@enjtOu-}u3h zI`6j1x!OMl`d>8B56&bAKEphWx9$8t6AuTr1-K0mN}xc2NiCo04c7enK%YNi}-KY&%(e1biW*oD{V**9vw!B402%qIoB>Qr$BY13ffg({UKbmte@Du8~ll|oYZpAG%@`Te(WV;KcK_N%8} zf!31qdrY=%`>RIP#vIpx_5^y2z6NdgFbUa?<9#KcfJUmb6-FJpbv72GEN|%k-((Yj zdG+mBI{!9(+7eze?{?gU2Eu0mElsW%QB-JH_IH*McUuk)fdorQ zBgwqbk<9^U3gA=Js+hEa%uRk|LdrzgXu5#aJnEaca6bmcN61`Asek7mEF>t#oo6#Bzu~I~1?K#X;J0}J7KiwAyMwa=YMK!MB0ZXx#0PbHvcK z;}U2TWclTAxut9Z0Ph?I&DtLG)fV7Xagse<{jXuW8ybub+{M4u&f{gRa)_DrN=6rG zod+^8Wl?v?E~vB`AFi@}_P_lmkp!IL*rT;?94yHE_|a3;>m5KP3lxBt@TCJqthWzX zb3aU=|IcH9@6m+-Q(-Eoz;X%`#M?LE3v@syVi25TCk2P$?8*WCol!NM|M&A^cWZrI zOF-MKMjt*$E(VE~M~|1$s4&c|xe5nWYB^h7UCoWvn*TlVDjbe}vG{;l--|^<@c1Rx z570aI#YcoDy+@^T)?$?zn!;4;`<~zkU1K>zjd*xP#sP{5jD+Lgmjb!-)ty9~<4Q5> z==E_kpf@O}fMlo#r>nc(kV{q>Rw-LQoE#hsi)4dO_D|g-Nz?w_2v;PKIAd|6OyoLt z)H-{hgaFtJSVWcs%rAAF#A)0R4W%7Tj;t454+Gf#-Q)fe;K9guhm*BFiKsg5tJT@f zp8y6NA4z;6yJ4$fee2l27U$o@*j=W~Nl7Dt3`&k3y^hX5EbMl;A77}PDV#VFwxnHZ z_`hZ1-+32!%qePhhDaqVq{)VH5pzXEBi7bpzjWV=j0*Ytq<8Nj2)qYLE(NA^SnoO1 z3`=1uh0dxZSio_mbZyPfkm{WNzm5s#PXeC0Q z{C%h03d3EY;7VIdgX|r0jX?r#%1ZQx8kloeYB(8~Z0qpABTpF@LAdMC%OgGQ| zch*5nfD1;%7Eo6HDDW;7qz5cvvs7*n&(!IW_9^*f^V<9I&*SMcj z68r~VY}Ck<;B0lPQd@oLRw7)Tnu3?-FGdhe*IdQ z4(*Li-Ri+YyH$3A)^9o#&K1%G-`_NdtEHndnGIV#i;TZk-~Z8_Z<6h#J5&S8Pm7d4KQO-wTSaD= zJ?&pM>5#c*&OREL8wN`Z3N0*MKL7bEQ*PIv2S%jGkKunKWehwS=FSrD zpYQX|W(r0cOZ>qr8l?79C0e-#Rkn!pX)Sj|f;!%3o6E!HQ$>Mq&geh}pc+v5foh2} zW^~BF_ewah`RHQJ&I-O^sbsFBtJN*a%AzBnpWzF$5qe}!HpJ3N|KYi9l8XFj!NYHQ zFqpr$oG~C9IjsUuYqvs9tt#~7K9s+*2^IdP{-1x?8ALXHAy-=zYfsrf#Zb3x;}f925bxJ z&+c{6QH!u1PCT&rn(y|81%yQ_v=Xkv^EFm6;N~EAM;+Lwt_YI?LCqXUFcK7!(X5G< zYLwu;?_43(3W2s%z6BXq9Z@@CD;~18GvLYqCv`GSM3iL<|L)MB?-!vr%R=9^C>?OR zw^>|uMF`Q1ImJOYtTOEbDT-W~TMHOM>M#x{AvuCH?5kfjj<46SQ0EBjRSrKFzi_}c zF7s+111HTso$qz|AgbtPaREhnG7*FhLUa`pI>U9gv!6DHWu-EDL6vjw_P(G%2O}UV zKrGMp=U;;`1-yLLkG_Lwxc)iuYp?ZYu6|nC>P*^vYt9t?#;VI5mMuDuAg6;CmMv~) zAL(9@a3#O>qWhf%2sVQT_4|wDf`RI2LQRT!nnKckm7#YEF(S*@S{(12omTnn7kXWP z6`H!1>DD>@ss^FaeU`@-L+`**H7~Yt9T0wffy)Jvm)PyqrU#2+0a4w#IPw$vE@|nT ze5nI3E5}y*Z_REo2*+=T91D{fc=4~BfYS39&mMA%9>%S-yRVH@vhiMkX0fbKN6haCocN-CKYmp_`i_o^71;<5Wg&Jz%P z&=BV}Hl|RdCZRnD$pI?e(0(V~n~7A4urtO`iDwF2d2I!V*ULpa_7pWX{bY&_nF}

c-RBuLo!-gvH+f|3l4gO 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ïb* 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 z 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 delta 80753 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

%@nSPo`C>}0*NWm8g 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 DIaOd9OV?cS4f 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

%@Iy^yB_=0vo&&J@`jF=Eb}Q2k_3`ZN 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