성능 테스트를 위한 elastic APM 적용 - (2/2)

안승섭·2023년 3월 12일
0

경험들

목록 보기
5/7

지난 주에 이어서 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

profile
Just Do It!

0개의 댓글