layout : post
title : "ElasticSearch APM"
category : ElasticSearch
Elasticsearch은 모니터링 시스템으로 APM을 지원한다.
Spring 기반 웹서버에서 편리하게 구성할 수 있게 Elastic APM Agent를 제공.
스프링 기반의 웹서버를 Elasticsearch, Kibana를 이용해서 APM 연결하는 내용이다.
ELK 구성
version: '3.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.1
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./volume/data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.1
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./volume/data02:/usr/share/elasticsearch/data
ports:
- 9201:9201
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.1
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./volume/data03:/usr/share/elasticsearch/data
ports:
- 9202:9202
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.5.1
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
logstash:
image: docker.elastic.co/logstash/logstash:7.5.1
container_name: logstash
command: logstash -f /usr/share/logstash/pipeline/logstash.conf
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
ports:
- 5044:5044
networks:
- elastic
depends_on:
- es01
- es02
- es03
- kib01
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
logstash:
driver: local
networks:
elastic:
driver: bridge
es01, es02, es03각 클러스터링 해서 설정했고, 키바나 설정과, 로그스테이시 설정으로 구성, 해당 구성은 Install Elasticsearch with Docker의 기반으로 로그스테이시 설정을 추가했으나 로그스테이시 사용하지 않는다면 해당 부분을 주석해서 사용해도 된다.
$ docker-compose up -d
위 명령어로 도커를 실행
APM 설정
APM Server 설정
- APM으로 이동
Setup Instructions
버튼을 클릭
# 해당 파일 다운
curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.5.1-darwin-x86_64.tar.gz
# 압축 해제
tar xzvf apm-server-7.5.1-darwin-x86_64.tar.gz
# apm-server로 이동
cd apm-server-7.5.1-darwin-x86_64/
apm-server.yml
설정 파일을 수정한다
아래 내용은 중간정도 부분에 존재
#-------------------------- Elasticsearch output --------------------------
output.elasticsearch:
# Array of hosts to connect to.
# Scheme and port can be left out and will be set to the default (`http` and `9200`).
# In case you specify and additional path, the scheme is required: `http://localhost:9200/path`.
# IPv6 addresses should always be defined as: `https://[2001:db8::1]:9200`.
hosts: ["localhost:9200"] # localhost:9200 으로 hosts 지정
우문투의 경우 apm-server.yml 위치
/etc/apm-server/apm-server.yml
실행중인지 확인 코드
sudo service apm-server status
Agent 설정
- Agent 설정도 동일하게 해당 가이드를 참고하여 진행한다
- Maven Central으로 이동해서 해당 언어에 맞는 Agent를 다운로드
Check agent status
버튼을 눌러서 위에서 설정한 APM 서버가 제대로 동작 중인지 확인할 수 있다.- 오른쪽 최하단
Launch APM
버튼을 클릭해서 종료한다. 해당 설정으로 다른 무언가를 생성하지 않고 필요한 APM Server, APM Agent를 설정하는 것이 목적이다
Agent 실행
java -javaagent:/path/to/elastic-apm-agent-<version>.jar \
-Delastic.apm.service_name=my-application \
-Delastic.apm.server_url=http://localhost:8200 \
-Delastic.apm.secret_token= \
-Delastic.apm.application_packages=org.example \
-jar my-application.jar
모니터링 대상 서버 구동시 해당 Agent를 같이 실행하면 된다
java -javaagent:/절대 경로/elastic-apm-agent-1.24.0.jar \
-Delastic.apm.service_name=order-service \
-Delastic.apm.server_url=http://localhost:8200 \
-Delastic.apm.application_packages=com.service.order
윈도우
-Duser.language= -Duser.country=KR -Duser.timezone=UTC -javaagent:"C:\workspace\elastic-apm-agent-1.25.0.jar" -Delastic.apm.service_name=test -Delastic.apm.server_url=http://localhost:8200 -Delastic.apm.application_packages=com.test
service_name
: APM 대상의 서버 이름server_url
: 위에서 설정한 APM 서버 주소application_packages
: 애플리케이션 패키지 주소secret_token
: 설정은 사용하지 않아 제거
키바나 APM
- 위에 설정한 APM 서버 확인
Transactions
- 해당 애플리케이션 트랜잭션 정보를 출력.
- 해당 트랜잭션 내용을 살펴볼 수 있으며, HTTP 요청/응답에 대한 자세한 내용도 표시한다.
- 해당 쿼리 문의 상세한 내용도 보여준다
Errors
- 해당 서버의 Error를 보여준다.
- 발생한 Error를 클릭하면 해당 오류의 더 많은 정보를 보여준다.
- 오류가 발생한 트랜잭션을 클릭하면 트래잭션 탭으로 이동되며, 해당 이슈의 원인을 파악 할 수 있다.
JVMs
현재 시스템 리소스에 대한 내용
memory 에러 발생하는 경우
Linux
The
vm.max_map_count
setting should be set permanently in/etc/sysctl.conf
:grep vm.max_map_count /etc/sysctl.conf vm.max_map_count=262144
To apply the setting on a live system, run:
sysctl -w vm.max_map_count=262144
macOS with Docker for Mac
The
vm.max_map_count
setting must be set within the xhyve virtual machine:- From the command line, run:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
2. Press enter and use`sysctl` to configure `vm.max_map_count`:
sysctl -w vm.max_map_count=262144
3. To exit the `screen` session, type `Ctrl a d`.
Windows and macOS with Docker Desktop
The
vm.max_map_count
setting must be set via docker-machine:docker-machine ssh sudo sysctl -w vm.max_map_count=262144
Windows with Docker Desktop WSL 2 backend
The
vm.max_map_count
setting must be set in the docker-desktop container:wsl -d docker-desktop sysctl -w vm.max_map_count=262144
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod-mode
댓글