diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1bc5a83..f6a753c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,7 @@ jobs: -f docker-compose.yml -f extensions/logspout/logspout-compose.yml -f extensions/fleet/fleet-compose.yml + -f extensions/fleet/agent-apmserver-compose.yml -f extensions/metricbeat/metricbeat-compose.yml -f extensions/filebeat/filebeat-compose.yml -f extensions/heartbeat/heartbeat-compose.yml @@ -122,14 +123,15 @@ jobs: - name: Execute Fleet test suite run: | - docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml up --remove-orphans -d fleet-server + docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml up --remove-orphans -d fleet-server apm-server .github/workflows/scripts/run-tests-fleet.sh - name: 'debug: Display state and logs (Fleet)' if: always() run: | - docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml ps - docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml logs fleet-server + docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml ps + docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml logs fleet-server + docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml logs apm-server # # Metricbeat @@ -216,6 +218,7 @@ jobs: -f docker-compose.yml -f extensions/logspout/logspout-compose.yml -f extensions/fleet/fleet-compose.yml + -f extensions/fleet/agent-apmserver-compose.yml -f extensions/metricbeat/metricbeat-compose.yml -f extensions/filebeat/filebeat-compose.yml -f extensions/heartbeat/heartbeat-compose.yml diff --git a/.github/workflows/scripts/run-tests-fleet.sh b/.github/workflows/scripts/run-tests-fleet.sh index ce7422b..5d1c2a5 100755 --- a/.github/workflows/scripts/run-tests-fleet.sh +++ b/.github/workflows/scripts/run-tests-fleet.sh @@ -9,9 +9,11 @@ source "$(dirname ${BASH_SOURCE[0]})/lib/testing.sh" cid_es="$(container_id elasticsearch)" cid_fl="$(container_id fleet-server)" +cid_apm="$(container_id apm-server)" ip_es="$(service_ip elasticsearch)" ip_fl="$(service_ip fleet-server)" +ip_apm="$(service_ip apm-server)" log 'Waiting for readiness of Elasticsearch' poll_ready "$cid_es" "http://${ip_es}:9200/" -u 'elastic:testpasswd' @@ -19,6 +21,9 @@ poll_ready "$cid_es" "http://${ip_es}:9200/" -u 'elastic:testpasswd' log 'Waiting for readiness of Fleet Server' poll_ready "$cid_fl" "http://${ip_fl}:8220/api/status" +log 'Waiting for readiness of APM Server' +poll_ready "$cid_apm" "http://${ip_apm}:8200/" + # We expect to find metrics entries using the following query: # # agent.name:"fleet-server" diff --git a/extensions/fleet/agent-apmserver-compose.yml b/extensions/fleet/agent-apmserver-compose.yml new file mode 100644 index 0000000..2ed87f8 --- /dev/null +++ b/extensions/fleet/agent-apmserver-compose.yml @@ -0,0 +1,45 @@ +version: '3.7' + +# Example of Fleet-enrolled Elastic Agent pre-configured with an agent policy +# for running the APM Server integration (see kibana.yml). +# +# Run with +# docker-compose \ +# -f docker-compose.yml \ +# -f extensions/fleet/fleet-compose.yml \ +# -f extensions/fleet/agent-apmserver-compose.yml \ +# up + +services: + apm-server: + build: + context: extensions/fleet/ + args: + ELASTIC_VERSION: ${ELASTIC_VERSION} + volumes: + - apm-server:/usr/share/elastic-agent/state:z + environment: + FLEET_ENROLL: '1' + FLEET_TOKEN_POLICY_NAME: Agent Policy APM Server + FLEET_INSECURE: '1' + FLEET_URL: http://fleet-server:8220 + # Enrollment. + # (a) Auto-enroll using basic authentication + ELASTICSEARCH_USERNAME: elastic + ELASTICSEARCH_PASSWORD: ${ELASTIC_PASSWORD:-} + # (b) Enroll using a pre-generated enrollment token + #FLEET_ENROLLMENT_TOKEN: + ports: + - 8200:8200 + hostname: apm-server + # Elastic Agent does not retry failed connections to Kibana upon the initial enrollment phase. + restart: on-failure + networks: + - elk + depends_on: + - elasticsearch + - kibana + - fleet-server + +volumes: + apm-server: diff --git a/extensions/fleet/fleet-compose.yml b/extensions/fleet/fleet-compose.yml index 588a1a6..3694cd3 100644 --- a/extensions/fleet/fleet-compose.yml +++ b/extensions/fleet/fleet-compose.yml @@ -10,7 +10,7 @@ services: - fleet-server:/usr/share/elastic-agent/state:z environment: FLEET_SERVER_ENABLE: '1' - FLEET_SERVER_INSECURE_HTTP: 'true' + FLEET_SERVER_INSECURE_HTTP: '1' FLEET_SERVER_POLICY_ID: fleet-server-policy # Fleet plugin in Kibana KIBANA_FLEET_SETUP: '1' @@ -21,7 +21,7 @@ services: # (b) Enroll using a pre-generated service token #FLEET_SERVER_SERVICE_TOKEN: ports: - - '8220:8220' + - 8220:8220 hostname: fleet-server # Elastic Agent does not retry failed connections to Kibana upon the initial enrollment phase. restart: on-failure diff --git a/kibana/config/kibana.yml b/kibana/config/kibana.yml index dc22eb4..048da6f 100644 --- a/kibana/config/kibana.yml +++ b/kibana/config/kibana.yml @@ -32,11 +32,13 @@ xpack.fleet.packages: version: latest - name: elastic_agent version: latest + - name: apm + version: latest xpack.fleet.agentPolicies: - - name: Fleet Server policy + - name: Fleet Server Policy id: fleet-server-policy - description: Fleet Server policy + description: Static agent policy for Fleet Server monitoring_enabled: - logs - metrics @@ -50,3 +52,28 @@ xpack.fleet.agentPolicies: - name: elastic_agent-1 package: name: elastic_agent + - name: Agent Policy APM Server + id: agent-policy-apm-server + description: Static agent policy for the APM Server integration + monitoring_enabled: + - logs + - metrics + package_policies: + - name: system-1 + package: + name: system + - name: elastic_agent-1 + package: + name: elastic_agent + - name: apm-1 + package: + name: apm + # See the APM package manifest for a list of possible inputs. + # https://github.com/elastic/apm-server/blob/v8.5.0/apmpackage/apm/manifest.yml#L41-L168 + inputs: + - type: apm + vars: + - name: host + value: 0.0.0.0:8200 + - name: url + value: http://apm-server:8200