지난 주에 이어서 APM 적용을 진행 중인데 아래와 같은 오류에서 막힌 상태였다.
공식 문서를 찾아본 결과 올바른 인터페이스에 바인딩해야한다고 나와있어 어느 서버에서 접속 가능하도록 아래와 같이 host를 변경하고 다시 진행해보았다.
하지만 여전히 apm server가 publish_ready : false인 상태라 방법을 찾아보던 도중 apm server가 elasticsearch에 전송하고 있지 못한 것 같아서 아래 그림 처럼 apm server까지 함께 docker-compose로 올려보기로 했다.
변경한 docker-compose로 다시 진행해보니
version: '2.2'
services:
apm-server:
image: docker.elastic.co/apm/apm-server:8.6.2
ports:
- 8200:8200
environment:
- output.elasticsearch.hosts=['http://elasticsearch:9200']
- setup.kibana.host="kibana:5601"
- apm-server.kibana.host="kibana:5601"
- setup.template.enabled=true
- logging.to_files=false
depends_on:
elasticsearch:
condition: service_healthy
kibana:
condition: service_healthy
healthcheck:
interval: 10s
retries: 12
test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:8200/
kibana:
image: docker.elastic.co/kibana/kibana:8.6.2
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ports:
- 5601:5601
healthcheck:
interval: 10s
retries: 20
test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status
depends_on:
elasticsearch:
condition: service_healthy
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2
environment:
- "cluster.routing.allocation.disk.threshold_enabled=false"
- "discovery.type=single-node"
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ports:
- 9200:9200
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:9200']
interval: 20s
retries: 3
위와 같은 오류가 발생했다. 8.6.2 버전을 못찾는 것 같아 버전을 낮춰서 진행해봤다.
그 결과...
캬~ 주모!
다행이 apm-server도 정상적으로 동작하는 것 같고 이제 내 서버에서 모니터링 서버로 전송만 해주면 될 것 같다.
아래 maven repository에서 jar를 받아서
https://mvnrepository.com/artifact/co.elastic.apm/elastic-apm-agent/1.36.0
-javaagent:./elastic-apm-agent-1.36.0.jar // 사용할 apm-agent의 경로
-Delastic.apm.service_name=my-apm // apm에서 나올 service 명
-Delastic.apm.application_packages=${project.package}
-Delastic.apm.server_url=http://localhost:8200 // apm 데이터를 보낼 host
이렇게 jvm 옵션을 추가하고 실행시켜주었더니 아래와 같이 모니터링에 성공했다.
2주동안 삽질끝네 겨우 성공했지만 8.6.2 버전으로는 끝내 해결하지 못한게 아쉬움이 남는다. apm 적용을 진행하면서 docker-compose도 처음 써봤는데 아직 갈길이 멀구나란 생각이 든다.
참고 - https://levelup.gitconnected.com/how-to-integrate-elastic-apm-java-agent-with-spring-boot-7ce8388a206e
https://beaniejoy.tistory.com/54
https://www.elastic.co/guide/en/apm/guide/7.17/common-problems.html