Elasticsearch APM 적용기..
728x90

elasticsearch apm 을 사용해서 어플리케이션의 상태를 알아보려고 한다.

이 글에서 사용하는 elasticsearch 의 버전은 7.11.1 이다.

elasticsearch 7.11.1 과 호환 되는 elastic 소프트웨어는 여기 에 자세하게 나와 있다.

사용중인 OS의 버전에 맞게 호환되는 elasticsearch, kibana, apm 등이 있으니 다른 버전으로 할 때 위 페이지에서 확인 후 설치

ElasticDocs 자세한 내용은 여기 ElasticDocs 에서 확인하면 된다.

elasticsearch 와 kibana , apm server 는 동일한 버전으로 맞춰준다.

환경
centos 8
jdk 1.7

버전 정보
elasticsearch 7.11.1
kibana 7.11.1
apm-server 7.11.1
elastic-apm-agent 1.26.2

jdk 1.7 이므로 agent 의 버전이 낮다.


설치

cd $HOME/ek

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.1-linux-x86_64.tar.gz
sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-7.11.1-linux-x86_64.tar.gz

압축 해제

sudo tar -zxvf elasticsearch-7.11.1-linux-x86_64.tar.gz
sudo tar -zxvf kibana-7.11.1-linux-x86_64.tar.gz

보기 편하게 폴더 명 수정

sudo mv elasticsearch-7.11.1 es-711
sudo mv kibana-7.11.1 kb-711

서버 설정 변경

limits.conf 변경

sudo vi /etc/limits.conf

현재유저        soft    nofile          65536
현재유저        hard    nofile          65536
현재유저        soft    nproc           65536
현재유저        hard    nproc           65536
현재유저        soft    memlock         unlimited
현재유저        hard    memlock         unlimited

virtual memory areas

sudo vi /etc/sysctl.conf

vm.max_map_count=262144

설정 완료 후 재 시작

limits.conf 이 수정되면 무조건 재시작 해야한다.
sysctl.conf 가 수정되면 재시작 안해도 됨.

elastic이 사용 할 폴더 소유자 <현재 유저> 유저로 이동


elasticsearch는 root 권한으로 실행 할 수 없다.

elasticsearch 는 data, log 등을 남겨야 할 폴더를 지정할 수 있기 때문에 미리 해당 폴더 생성 후 소유자 옮겨야한다.

경로 지정은 $HOME/ek/es-711/config/elasticsearch.yml 에 있다.

path.data: /var/lib/elasticsearch/data
path.logs: /var/log/elasticsearch/log

위 경로로 정했다.

config 파일에서 정한 경로에다가 폴더 생성

sudo mkdir /var/lib/elasticsearch

sudo mkdir /var/log/elasticsearch

먼저 elasticsearch, kibana가 설치된 폴더의 소유자를 happytuk 현재 elasticsearch를 기동하는 계정으로 바꿔준다.

sudo chown -R <username>:<usergroup> ~/ek/*

다음으로 log, data 가 저장될 폴더의 소유자를 happytuk(elasticsearch 기동하는 계정)으로 바꿔준다.

sudo chown -R <username>:<usergroup> /var/log/elasticsearch
sudo chown -R <username>:<usergroup> /var/lib/elasticsearch

소유자 바뀌었는지 확인

ls -l $HOME/ek

ls -l /var/lib/elasticsearch

ls -l /var/log/elasticsearch

yml 파일 설정

elasticsearch 가 설치된 폴더 경로에서 config 디렉토리로 가면 elasticsearch.yml 파일이 있다.

cd $HOME/ek/es-711/config/
vi elasticsearch.yml

cluster.name: <cluster-name>
node.name: <node-name>
path.data: /var/lib/elasticsearch/data
path.logs: /var/log/elasticsearch/log
bootstrap.memory_lock: true

network.host: "<private ip>"

discovery.seed_hosts: ["<private ip>"]

cluster.initial_master_nodes: ["<node-name>"]

보안 설정

xpack 이 elasticsearch 7.x 이상에서는 basic 라이선스에서도 인증까지 무료로 해줘서 쉽게 설정할 수 있다.

elasticsearch.yml 에 추가

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

이렇게 추가해주면 이제는 인증서를 만들어야한다.

$HOME/ek/es-711/bin

./elasticsearch-certutils ca

Enter 한번 치고 => 인증서 이름 default로 하겠다는 의미 (elastic-stack-ca.p12)
password 나오면 원하는 password 입력

certificate and private key 생성

./elasticsearch-certutil cert --ca elastic-stack-ca.p12


ca 파일의 password를 입력하라고 나온다 :

certificate 파일의 password를 설정하라고 나온다:
재입력 : 

elastic-stack-ca.p12 , elastic-certificates.p12 파일은 모두 el-711 폴더 안에 있다.

이제 config 폴더 안에서 certs 폴더 생성 후 생성한 p12 파일 모두 certs로 이동

mkdir  config/certs

mv elastic-stack-ca.p12 elastic-certificates.p12 config/certs/

elasticsearch.yml 수정

xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

그리고 xpack.security.transport.ssl.keystore.secure_password , xpack.security.transport.ssl.truststore.secure_password 를 설정해야한다.

elasticsearch.yml에 비밀번호를 적으면 실행 도중에 error 가 나오므로 elasticsearch-keystore 로 등록해준다.

elasticsearch-keystore는 bin 폴더에 있다.

cd $HOME/ek/es-711/bin

./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 

비밀번호 입력 : <아까 설정한 인증서의 비밀번호>

./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

비밀번호 입력 : <아까 설정한 인증서의 비밀번호>

실행

cd $HOME/elastic-kibana/el-711/bin

./elasticsearch

이것은 forward 실행 방식이다.

백그라운드로 돌리기 위해서 필요한 것은 -d 옵션이다. 하지만 실행할 때마다 긴 명령어를 적기는 힘드므로 스크립트를 만들어서 편하게 종료했다가 시작할 수 있는 스크립트를 작성했다.

스크립트

elasticsearch

#!/bin/sh

RED='\033[0;31m'
NC='\033[0m'
Green='\033[0;32m'
Blue='\033[0;34m'
BBlue='\033[1;34m'
BRed='\033[1;31m'
BGreen='\033[1;32m'
RETVAL=0
PNAME=elasticsearch
HOME="/home/happytuk"
PID=`cat $HOME/ek/es-711/run/$PNAME.pid`

case "$1" in

        start)
                if [ -z $PID ];then
                        $HOME/ek/es-711/bin/elasticsearch -d -p $HOME/ek/es-711/run/$PNAME.pid
                        wait
                        echo -e "${BBlue}elasticsearch${NC} ${BGreen}started${NC}"
                        RETVAL=$?
                elif [ ! -z $PID ];then
                        echo -e "${BBlue}elasticsearch${NC} is running"
                fi
        ;;

        status)
                if [ -z $PID ];then
                        echo -e "${BBlue}elasticsearch${NC} is ${RED}not${NC} running"
                elif [ ! -z $PID ];then
                        echo -e "${BBlue}elasticsearch${NC} is running"
                fi
        ;;

        stop)

                if [ ! -z $PID ];then
                        echo -e "${BBlue}elasticsearch${NC} ${RED}stopping..${NC}"
                        kill -15 $PID
                        wait
                        echp -e "${BBlue}elasticsearch${NC} ${RED}stopped${NC}"
                elif [ -z $PID ];then
                        echo -e "${BBlue}elasticsearch${NC} is ${RED}not${NC} running"
                fi
        ;;
esac

exit $RETVAL

Kibana 설정

kibana.yml 수정

cd kb-711/config
vi kibana.yml


server.name: "server-kibana"
#server.port: "5601" => 설정 안하면 기본 포트인 5601로 설정됨
elasticsearch.hosts: ["http://<ip>:9200"]   => 전에 설정한 elasticsearch의 host
server.host: "<ip>"
elasticsearch.username: "kibana_system"
#elasticsearch.password: ""

마찬 가지로 password 에 대한 정보는 keystore에 저장

cd $HOME/ek/kb-711/bin
./kibana-keystore create  => 이미 존재 한다고 하면 create 안해도된다.

./kibana-keystore add elasticsearch.username
password 입력 : ******
./kibana-keystore add elasticsearch.password
password 입력 : ******

Kibana 실행

cd $HOME/ek/kb-711/bin

./kibana

kibana encrypt key 생성

cd $HOME/ek/kb-711/bin

./kibana-encryption-keys generate

나온 key 목록들 복사 후 yml에 입력

cd $HOME/ek/kb-711/config

vi kibana.yml

xpack.encryptedSavedObjects.encryptionKey: <encryptedSavedObjects-encryptionKey>
xpack.reporting.encryptionKey: <reporting-encryptionKey>
xpack.security.encryptionKey: <security-encryptionKey>
xpack.reporting.capture.browser.chromium.disableSandbox: true => 이거는 안해주면 계속 warn 뜸.

실행 후 ip:5601 접속

그 전에 elasticsearch의 설정이 모두 끝난 상태여야 한다. ( 계정, password 등..)

그리고 기본 계정인 elastic 을 쓰는 것 보다 kibana에서 user 에 들어가서 자기 계정을 발급 받아서 사용하는게 좋다.(superuser 권한 받아서)

 

APM 설치

apm 설치

curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.11.1-x86_64.rpm
sudo rpm -vi apm-server-7.11.1-x86_64.rpm

 

Config 파일 수정

cd /etc/apm-server/

sudo vi apm-server.yml

output.elasticsearch:
    hosts: ["<es_url>"]  => elasticsearch 의 ip 
    username: <username> => elasticsearch 계정
    password: <password> => 비밀번호

실행

sudo service apm-server start

 

http://<kibana ip>:5601/app/home#/tutorial/apm 로 들어가서 한 단계 씩 수행하면 된다. 위의 과정도 저기 튜토리얼에 나와있다.

 

agent 의 경우 tomcat 구동할 때 javaagent 옵션에다가 설정해줬다.

 

sudo vi /usr/local/tomcat7/bin/catalina.sh

JAVA_OPT="-javaagent:/<agent 가 설치된 경로>/elastic-apm-agent-1.26.1.jar -Delastic.apm.service_name=<하고싶은 이름> -Delastic.apm.server_urls=http://<apm-server ip>:8200 -Delastic.apm.environment=production -Delastic.apm.application_packages=<root 패키지>

까지 한 후에 tomcat 재 시작

이렇게 나오게 된다.

 

service map 은 유료이므로 30일 무료로 먼저 써보고 결정하는게 나을 듯하다. 

끝!

728x90

'검색엔진 > Elasticsearch' 카테고리의 다른 글

Docker EFK Stack 설치 및 적용  (0) 2022.05.17
Docker ELK Stack 설치 오류  (0) 2022.02.21