Kibana version:
7.9.1
Elasticsearch version:
7.9.1
APM Server version:
7.9.1
Original install method (e.g. download page, yum, deb, from source, etc.) and version:
Official docker images
Description of the problem including expected versus actual behavior. Please include screenshots (if relevant):
I'm trying to use Elastic APM as backend for distibuted tracing. I am using jaeger-agent to collect traces from laravel app. My previous tracing setup with docker-compose was working flawlessly (jaeger agent + collector + jaeger-queryUi), Now i modified my setup to use APM as a backend by sending traces from my app -> Jaeger-Agent -> APM server via gRPC. I followed this jaeger integration guide https://www.elastic.co/guide/en/apm/server/current/jaeger.html but when i start sending traces i'm geting these errors in APM logs:
2020-09-13T20:07:31.202Z WARN [elasticsearch] elasticsearch/client.go:407 Cannot index event publisher.Event{Content:beat.Event{Timestamp:time.Time{wall:0x148af8e0, ext:63735624444, loc:(*time.Location)(nil)}, Meta:{"pipeline":"apm"}, Fields:{"agent":{"name":"Jaeger","version":"unknown"},"ecs":{"version":"1.5.0"},"labels":{"Lounge":"GatewayService-JaegerProvider","peer.ipv4":"172.21.0.3","peer.port":"80","sampler.param":"true","sampler.type":"const"},"observer":{"ephemeral_id":"98acea66-a148-497b-9eaa-c360900a367a","hostname":"ee30089a825b","id":"f9fd9f44-dbc7-4cdd-9403-54576dba007a","type":"apm-server","version":"7.9.1","version_major":7},"processor":{"event":"transaction","name":"transaction"},"service":{"language":{"name":"unknown"},"name":"Gateway-Service"},"timestamp":{"us":1600027644344652},"trace":{"id":"163470aa489b76d9"},"transaction":{"duration":{"us":5532199},"id":"163470aa489b76d9","name":"GET: /csrfd","result":"Success","sampled":true,"type":"fpm"},"url":{"full":"http:///csrfd","original":"/csrfd","path":"/csrfd","scheme":"http"}}, Private:interface {}(nil), TimeSeries:false}, Flags:0x1, Cache:publisher.EventCache{m:common.MapStr(nil)}} (status=400): {"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"class_cast_exception","reason":"class org.elasticsearch.index.mapper.ScaledFloatFieldMapper cannot be cast to class org.elasticsearch.index.mapper.ObjectMapper (org.elasticsearch.index.mapper.ScaledFloatFieldMapper is in unnamed module of loader java.net.FactoryURLClassLoader @50a13c2f; org.elasticsearch.index.mapper.ObjectMapper is in unnamed module of loader 'app')"}}
When i switch to jaeger-collector instead of APM - it gets all the tracing correctly.
Here is my docker-compose.yml:
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.1
networks:
- author-book-network
ports:
- "9200:9200"
- "9300:9300"
restart: on-failure
environment:
- cluster.name=jaeger-cluster
- discovery.type=single-node
- http.host=0.0.0.0
- transport.host=127.0.0.1
- ES_JAVA_OPTS=-Xms1000m -Xmx1000m
- xpack.security.enabled=false
volumes:
- esdata:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:7.9.1
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- SERVER_NAME=kibana
#- ES.TAGS-AS-FIELDS.ALL=true
#- SERVER_HOST=0.0.0.0
depends_on:
- elasticsearch
networks:
- author-book-network
apm-server:
image: docker.elastic.co/apm/apm-server:7.9.1
depends_on:
- elasticsearch
- kibana
cap_add: ["CHOWN", "DAC_OVERRIDE", "SETGID", "SETUID"]
cap_drop: ["ALL"]
ports:
- 8200:8200
networks:
- author-book-network
command: >
apm-server -e
-E apm-server.jaeger.grpc.enabled=true
-E apm-server.jaeger.grpc.host=":14250"
-E apm-server.rum.enabled=true
-E setup.kibana.host=kibana:5601
-E setup.template.settings.index.number_of_replicas=0
-E apm-server.kibana.enabled=true
-E apm-server.kibana.host=kibana:5601
-E output.elasticsearch.hosts=["elasticsearch:9200"]
-E ELASTIC_APM_LOG_FILE=stderr
-E ELASTIC_APM_LOG_FILE=debug
# healthcheck:
# interval: 10s
# retries: 12
# test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:8200/
# jaeger-collector:
# image: jaegertracing/jaeger-collector
# ports:
# #- "14269:14269"
# - "14250:14250"
# - "14268:14268"
# - "14267:14267"
# - "9411:9411"
# networks:
# - author-book-network
# restart: on-failure
# environment:
# - SPAN_STORAGE_TYPE=elasticsearch
# command: [
# "--es.server-urls=http://elasticsearch:9200",
# "--es.num-shards=1",
# "--es.num-replicas=0",
# "--log-level=error"
# ]
# depends_on:
# - elasticsearch
jaeger-agent:
image: jaegertracing/jaeger-agent
hostname: jaeger-agent
#command: ["--reporter.grpc.host-port=jaeger-collector:14250"]
command: ["--reporter.grpc.host-port=apm-server:14250"]
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
networks:
- author-book-network
restart: on-failure
environment:
- SPAN_STORAGE_TYPE=elasticsearch
depends_on:
#- jaeger-collector
- apm-server
jaeger-query:
image: jaegertracing/jaeger-query
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- no_proxy=localhost
ports:
- "16686:16686"
- "16687:16687"
networks:
- author-book-network
restart: on-failure
command: [
"--es.server-urls=http://elasticsearch:9200",
"--span-storage.type=elasticsearch",
"--log-level=debug"
]
depends_on:
- jaeger-agent
volumes:
esdata:
driver: local
networks:
author-book-network:
external: true
Steps to reproduce:
- Install Elasticsearch, Kibana and APM through docker-compose
- Use Jaeger-Agent to send tracing to APM