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일 무료로 먼저 써보고 결정하는게 나을 듯하다.
끝!
'검색엔진 > Elasticsearch' 카테고리의 다른 글
Docker EFK Stack 설치 및 적용 (0) | 2022.05.17 |
---|---|
Docker ELK Stack 설치 오류 (0) | 2022.02.21 |
Comment