diff --git a/dev-tools/packaging/packages.yml b/dev-tools/packaging/packages.yml index 7c1801f5fe3..53a6573bfd5 100644 --- a/dev-tools/packaging/packages.yml +++ b/dev-tools/packaging/packages.yml @@ -108,6 +108,18 @@ shared: source: '{{.AgentDropPath}}/apm-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' mode: 0644 skip_on_missing: true + /var/lib/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz' + mode: 0644 + skip_on_missing: true + /var/lib/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512' + mode: 0644 + skip_on_missing: true + /var/lib/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' + mode: 0644 + skip_on_missing: true @@ -201,6 +213,18 @@ shared: source: '{{.AgentDropPath}}/apm-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' mode: 0644 skip_on_missing: true + /etc/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz' + mode: 0644 + skip_on_missing: true + /etc/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512' + mode: 0644 + skip_on_missing: true + /etc/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc: + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' + mode: 0644 + skip_on_missing: true - &agent_binary_files '{{.BeatName}}{{.BinaryExt}}': @@ -283,6 +307,18 @@ shared: source: '{{.AgentDropPath}}/apm-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' mode: 0644 skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz' + mode: 0644 + skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.sha512' + mode: 0644 + skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz.asc' + mode: 0644 + skip_on_missing: true # Binary package spec (zip for windows) for community beats. @@ -334,6 +370,18 @@ shared: source: '{{.AgentDropPath}}/apm-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip.asc' mode: 0644 skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip' + mode: 0644 + skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip.sha512': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip.sha512' + mode: 0644 + skip_on_missing: true + 'data/{{.BeatName}}-{{ commit_short }}/downloads/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip.asc': + source: '{{.AgentDropPath}}/fleet-server-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.zip.asc' + mode: 0644 + skip_on_missing: true - &agent_docker_spec <<: *agent_binary_spec diff --git a/x-pack/elastic-agent/CHANGELOG.next.asciidoc b/x-pack/elastic-agent/CHANGELOG.next.asciidoc index 569341de1b4..f1f8c39d7fd 100644 --- a/x-pack/elastic-agent/CHANGELOG.next.asciidoc +++ b/x-pack/elastic-agent/CHANGELOG.next.asciidoc @@ -64,3 +64,4 @@ - Log level reloadable from fleet {pull}22690[22690] - Push log level downstream {pull}22815[22815] - Add metrics collection for Agent {pull}22793[22793] +- Add support for Fleet Server {pull}23736[23736] diff --git a/x-pack/elastic-agent/pkg/agent/application/fleet_decorator.go b/x-pack/elastic-agent/pkg/agent/application/fleet_decorator.go index 63e99d87a37..e2c4a2941bf 100644 --- a/x-pack/elastic-agent/pkg/agent/application/fleet_decorator.go +++ b/x-pack/elastic-agent/pkg/agent/application/fleet_decorator.go @@ -54,7 +54,13 @@ func injectFleet(cfg *config.Config, hostInfo types.HostInfo, agentInfo *info.Ag transpiler.NewKey("id", transpiler.NewStrVal(hostInfo.UniqueID)), })) - fleet := transpiler.NewDict([]transpiler.Node{agent, token, kbn, host}) + nodes := []transpiler.Node{agent, token, kbn, host} + server, ok := transpiler.Lookup(ast, "fleet.server") + if ok { + nodes = append(nodes, server) + } + fleet := transpiler.NewDict(nodes) + err = transpiler.Insert(rootAst, fleet, "fleet") if err != nil { return err diff --git a/x-pack/elastic-agent/pkg/agent/program/program_test.go b/x-pack/elastic-agent/pkg/agent/program/program_test.go index 262c3e5cc8c..19eb5499197 100644 --- a/x-pack/elastic-agent/pkg/agent/program/program_test.go +++ b/x-pack/elastic-agent/pkg/agent/program/program_test.go @@ -384,8 +384,8 @@ func TestConfiguration(t *testing.T) { err bool }{ "single_config": { - programs: []string{"filebeat", "heartbeat", "metricbeat", "endpoint", "packetbeat"}, - expected: 5, + programs: []string{"filebeat", "fleet-server", "heartbeat", "metricbeat", "endpoint", "packetbeat"}, + expected: 6, }, // "audit_config": { // programs: []string{"auditbeat"}, diff --git a/x-pack/elastic-agent/pkg/agent/program/supported.go b/x-pack/elastic-agent/pkg/agent/program/supported.go index b49de1bce6f..3ad9fbb8463 100644 --- a/x-pack/elastic-agent/pkg/agent/program/supported.go +++ b/x-pack/elastic-agent/pkg/agent/program/supported.go @@ -20,10 +20,11 @@ func init() { // spec/apm-server.yml // spec/endpoint.yml // spec/filebeat.yml + // spec/fleet-server.yml // spec/heartbeat.yml // spec/metricbeat.yml // spec/packetbeat.yml - unpacked := packer.MustUnpack("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") + unpacked := packer.MustUnpack("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") SupportedMap = make(map[string]Spec) for f, v := range unpacked { diff --git a/x-pack/elastic-agent/pkg/agent/program/testdata/single_config-fleet-server.yml b/x-pack/elastic-agent/pkg/agent/program/testdata/single_config-fleet-server.yml new file mode 100644 index 00000000000..cb8a3e10659 --- /dev/null +++ b/x-pack/elastic-agent/pkg/agent/program/testdata/single_config-fleet-server.yml @@ -0,0 +1,13 @@ +fleet: + agent: + id: fleet-agent-id + +output: + elasticsearch: + hosts: [ 127.0.0.1:9200, 127.0.0.1:9300 ] + username: fleet + password: fleetpassword + +inputs: + - id: fleet-server-id + type: fleet-server diff --git a/x-pack/elastic-agent/pkg/agent/program/testdata/single_config.yml b/x-pack/elastic-agent/pkg/agent/program/testdata/single_config.yml index c7460776151..fb585dae996 100644 --- a/x-pack/elastic-agent/pkg/agent/program/testdata/single_config.yml +++ b/x-pack/elastic-agent/pkg/agent/program/testdata/single_config.yml @@ -8,6 +8,12 @@ fleet: protocol: https host: localhost:5601 timeout: 30s + server: + output: + elasticsearch: + hosts: [ 127.0.0.1:9200, 127.0.0.1:9300 ] + username: fleet + password: fleetpassword outputs: default: @@ -25,6 +31,11 @@ outputs: ca_sha256: "7lHLiyp4J8m9kw38SJ7SURJP4bXRZv/BNxyyXkCcE/M=" inputs: +- id: fleet-server-id + type: fleet-server + use_output: default + data_stream: + type: default - type: docker/metrics use_output: default streams: diff --git a/x-pack/elastic-agent/pkg/core/app/descriptor.go b/x-pack/elastic-agent/pkg/core/app/descriptor.go index a5445e6178d..9c1ef10c3ad 100644 --- a/x-pack/elastic-agent/pkg/core/app/descriptor.go +++ b/x-pack/elastic-agent/pkg/core/app/descriptor.go @@ -5,7 +5,6 @@ package app import ( - "path" "path/filepath" "strings" @@ -29,7 +28,7 @@ func NewDescriptor(spec program.Spec, version string, config *artifact.Config, t spec: spec, directory: dir, executionCtx: NewExecutionContext(spec.ServicePort, spec.Cmd, version, tags), - process: specification(dir, spec.Cmd), + process: specification(dir, spec), } } @@ -78,23 +77,12 @@ func (p *Descriptor) Directory() string { return p.directory } -func defaultSpec(dir string, binaryName string) ProcessSpec { - if !isKnownBeat(binaryName) { - return ProcessSpec{ - BinaryPath: path.Join(dir, binaryName), - } - } - +func specification(dir string, spec program.Spec) ProcessSpec { return ProcessSpec{ - BinaryPath: path.Join(dir, binaryName), - Args: []string{}, + BinaryPath: filepath.Join(dir, spec.Cmd), + Args: spec.Args, + Configuration: nil, } - -} - -func specification(directory, binaryName string) ProcessSpec { - defaultSpec := defaultSpec(directory, binaryName) - return populateSpec(directory, binaryName, defaultSpec) } func directory(spec program.Spec, version string, config *artifact.Config) string { @@ -114,42 +102,3 @@ func directory(spec program.Spec, version string, config *artifact.Config) strin return strings.TrimSuffix(path, suffix) } - -func isKnownBeat(name string) bool { - switch name { - case "filebeat": - fallthrough - case "metricbeat": - return true - } - - return false -} - -func populateSpec(dir, binaryName string, spec ProcessSpec) ProcessSpec { - var programSpec program.Spec - var found bool - binaryName = strings.ToLower(binaryName) - for _, prog := range program.Supported { - if binaryName != strings.ToLower(prog.Name) { - continue - } - found = true - programSpec = prog - break - } - - if !found { - return spec - } - - if programSpec.Cmd != "" { - spec.BinaryPath = filepath.Join(dir, programSpec.Cmd) - } - - if len(programSpec.Args) > 0 { - spec.Args = programSpec.Args - } - - return spec -} diff --git a/x-pack/elastic-agent/spec/endpoint.yml b/x-pack/elastic-agent/spec/endpoint.yml index a435c2f9ed4..7265ba2e693 100644 --- a/x-pack/elastic-agent/spec/endpoint.yml +++ b/x-pack/elastic-agent/spec/endpoint.yml @@ -53,6 +53,8 @@ rules: key: access_api_key - remove_key: key: kibana + - remove_key: + key: server - filter: selectors: diff --git a/x-pack/elastic-agent/spec/fleet-server.yml b/x-pack/elastic-agent/spec/fleet-server.yml new file mode 100644 index 00000000000..1c444f8990e --- /dev/null +++ b/x-pack/elastic-agent/spec/fleet-server.yml @@ -0,0 +1,61 @@ +name: Fleet Server +cmd: fleet-server +args: ["--agent-mode"] +artifact: fleet-server +rules: + - fix_stream: {} + + - filter_values: + selector: inputs + key: type + values: + - fleet-server + + - filter_values: + selector: inputs + key: enabled + values: + - true + + - remove_key: + key: output + + - select_into: + selectors: [ fleet.server.output.elasticsearch ] + path: output + + - map: + path: fleet + rules: + - remove_key: + key: enabled + - remove_key: + key: access_api_key + - remove_key: + key: kibana + - remove_key: + key: reporting + - remove_key: + key: server + + - map: + path: inputs + rules: + - remove_key: + key: use_output + - remove_key: + key: data_stream + - remove_key: + key: data_stream.namespace + - remove_key: + key: data_stream.dataset + - remove_key: + key: streams + + - filter: + selectors: + - fleet + - inputs + - output + +when: length(${fleet}) > 0 and length(${inputs}) > 0 and hasKey(${output}, 'elasticsearch')