Elastic APM 적용

이준섭·2023년 3월 17일

Elastic APM 적용 후기

Whatap모니터링 사용중에 민감성 데이터 이슈로 인해
새로운 모니터링 툴 찾는중에 기존에 쓰고 있던 Elasticsearch, Kibana에 있는 APM 서비스를 사용해보았다.

1. Elastic APM Server 설치

기존에 쓰고 있던 ELK docker-compose.yml 파일에 Elastic APM Server 추가

  apm-server:
    container_name: apm-server
    image: docker.elastic.co/apm/apm-server:$ELK_VERSION
    ports:
      - 8200:8200
    depends_on:
      - elasticsearch
      - kibana
    networks:
      - elk 
    command: >
      apm-server -e
      -E apm-server.rum.enabled=true
      -E apm-server.rum.allow_origins=["*"]
      -E apm-server.rum.allow_headers=[]
      -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"]

2. Elastic APM Agent 설치 (Java & Node.js)

[Java]
1. 루트 디렉토리에 agent 디렉토리 만들고 Elastic APM Agent 추가

2. Dockerfile의 Entrypoint 부분에 Agent Jvm Option 추가

ENTRYPOINT ["java", \
"-javaagent:/apm-agent.jar", \
"-Delastic.apm.service_name=cc-ocr-service", \
"-Delastic.apm.server_urls=http://10.10.0.248:8200", \
"-Delastic.apm.application_packages=com.carmerce", \
"-Delastic.apm.capture_headers=true", \
"-Delastic.apm.capture_body=transactions", \
"-Delastic.apm.sanitize_field_names=", \
"-Delastic.apm.enviorment=dev", \
"-jar" , \
"/cc-ocr-service.jar"]

※ 이 부분을 elasticapm.properties로 빼서 하는 방법이 있는거 같은데 아직 적용 방법을 모르겠어서 리서치 필요
3. Application 실행 후 APM의 Services에 들어오는 지 확인
[참조]
https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html

[Node.js]
1. Elastic APM Agent을 npm install 한다.

npm install elastic-apm-node --save
  1. elastic-apm-node.js 파일 생성
module.exports = {
        serviceName: '<Service Name>',
        serverUrl: '<APM Server URL>',
        captureBody: 'all', -- request body 설정 부분
        sanitizeFieldNames: '', -- 공백으로 해야 Parameter 부분이 보임
        environment: 'dev' -- profile
    }
  1. 제일 먼저 실행 되는 js 혹은 ts 파일 맨 위에 해당 옵션 추가
require('elastic-apm-node').start({
  configFile: '/elastic-apm-node.js'
});

※ Node.js 애플리케이션의 경우 Kubernetes로 배포 되기 때문에 Configmap에
elastic-apm-node.js 파일을 생성하는 부분 작성해야함.
[참조]
https://www.elastic.co/guide/en/apm/agent/nodejs/current/configuring-the-agent.html#agent-configuration-object

3. Elastic APM

Kibana의 APM 화면

Java 와 Node 애플리케이션이 올라가 있는 것 확인
Transactions, Errors, Metrics(리소스 사용량 확인) 등 확인 가능하고
captureBody, sanitizeFieldNames 옵션을 통해 Transactions 에서 트래킹 해보면서
Request Body의 Parameter 까지 확인 할 수 있다.

TO-BE

  1. 현재 Java 애플리케이션의 경우 Enviorment가 적용 안되는 모습인데 적용 하여 Profile 별로 확인 할 수 있도록 해야한다.
  2. APM Server 을 구축하면서 기존에 있던 Opendistro Alerting의 플러그인과 버전 문제로 인해 알림 기능을 잃었는데 새로운 알림 기능을 구축 해야한다.
  3. Elastic X_Pack의 유료 알림 기능이 있지만 Elastalert 라는 기능으로 알림 기능을 사용 할 수 있다 하여
    현재 적용 테스트 중이다.

0개의 댓글