안녕하세요 앵과장입니다.
개발블로그를 너무 오랜만에 쓰고있네요
항상 평생직장이다 라고 생각하고 들어가는데
내마음에 드는곳은 찾기가 쉽지가 않습니다.
간만에 아무것도 없는곳에서 개발하려니 아주많은 단점이 있지만
한가지 장점이라고 하면 시스템을 구축해볼수 있다는 것입니다.
DEV 환경 구축
version : 2021.07.28 기준 7.13.x 진행
EC2 : centos 7.x
JDK : 11
Cpu : 2
Memory : 4~8
Disk : 20~50G
선행조건 :
ec2 인스턴스 중 도메인이 필요한 부분은 미리 alb A recode 도메인 설정되었으며
방화벽 또는 dev환경 vpc구성후 private Network 생성 한뒤 보안 이슈 최소화될수있도록 구성되었습니다
AWS Cloud
ELK 구성 하기에 앞서서 아키텍처 부터 간단하게 그림으로 공유드립니다.
공식사이트 있을겁니다 어디서 봤는데 기억이 안나네요
Elasticsearch : ec2 3대
master node 1 + data node 2 기본적인 구조
개발은 3대로 진행하며 real환경에서는 로드밸런싱 read, write 형태로 나누는 구조 개선 그리고 Hot Warm Cool형태 필요
기본적으로 인스턴스1개에 1 node이며
검색최적화 권장 노드당 20기가 유지하는것을 추천드립니다. 실질적으로 50기가까지 할수있다고는 하지만
권장하지 않습니다.
리플리카를 통해서 같은노드를 복제할수 있는데 검색을 빨리하기위해 복제노드를 여러대 늘리기보다는 상황에 맡는 방법을 사용하시기 바랍니다.
Elasticsearch 공식 가이드
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/install-elasticsearch.html
Step1 : GPG Key import 샤이닝 키 다운받고 설치
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Step2: repo 파일생성
vim /etc/yum.repos.d/elasticsearch.repo
//아래내용 생성
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
Step3: yum 설치
sudo yum install --enablerepo=elasticsearch elasticsearch
Step4: EC2 인스턴스 재기동시 자동실행 설정
(centos 7하위 버전은 명령어가 다를수 있습니다. 참고하세요)
sudo systemctl enable elasticsearch
Step5: elasticsearch 실행
(centos 7하위 버전은 명령어가 다를수 있습니다. 참고하세요)
sudo systemctl start elasticsearch
Step6: elasticsearch 상태확인
sudo systemctl elasticsearch status
Step7:
Elasticsearch 기본 Port는 9200 입니다.
ES간 통신은 9300 으로 진행됩니다.
변경하셔도 되지만 그냥 기본포트 쓰시는것을 추천합니다.
해당 명령어 호출하면 Elasticsearch 에서 전달할수있는 JSON Response확인이 가능합니다.
curl {localhost}:9200
Kibana : ec2 1대
많이 바뀌었네요 내가알고있던 느낌이 아닙니다.
해당내용 쓸때만해도 Legacy를 논하며 쓴거같은데 개발자는 항상 열린마음으로 그럴수있다는 생각을 가지고 사셔야합니다.
첫느낌은 신선하며
여러가지 커스텀할수있는 기능들이 존재하며
여러가지 플러그인들을 사용하기 위한 설명들이 존재합니다.
메뉴얼이 영어이기때문에 번역기를 돌리시고 ES모니터링, dev Tool 등이 눈에 바로 보이지 않습니다. dashboard를 만드셔야되는데
이부분 천천히 시간날때 공부하시면 저좀 알려주세요 ㅎㅎ
Step1 : kibana repo 생성
# vi /etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Step2: intall
sudo yum install kibana -y
Step3: EC2 인스턴스 재기동시 자동실행 설정
(centos 7하위 버전은 명령어가 다를수 있습니다. 참고하세요)
sudo systemctl enable kibana
Step4: Kibana 실행
sudo systemctl start kibana
Step5: Kibana 확인
sudo systemctl status kibana
kibana 기본 port 5601 이며
시각화 + devtool 지원하기때문에 web 에서 확인이 가능합니다.
정상적이라면 아래 화면을 볼수 있습니다.
Kibana 6.x 버전만 사용하셨다면
7.x버전부터 달라진점을 아주크게 느낄수 있습니다.
약간에 러닝커브가 존재하니 하나씩 확인해주시면됩니다.
Logstash : ec2 1대
7.13.x버전 rpm
logstash 는 여러가지 데이터 파이프라인이며 되도록이면 별도 서버 구성이 필요함 여러가지 비지니스로직수행되기 때문에 I/O memory 로 인해서 ES와 함께 사용하면 서비스하다 밤을 셀수있는 경우를 만들수있으니 별도로 구성하는것을 권장합니다.
간단하게 설명하면 Logstash 는 Input -> filter -> output 형태로 구성할수있으며
데이터를 전달할수 있는 파이프라인을 구성할수 있게 합니다.
Step1 : kibana repo 생성
# vi /etc/yum.repos.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Step2: install
sudo yum install logstash -y
Step3: EC2 인스턴스 재기동시 자동실행 설정
(centos 7하위 버전은 명령어가 다를수 있습니다. 참고하세요)
sudo systemctl enable logstash
Step4: logstash 실행
sudo systemctl start logstash
Step5 : logstash 확인
sudo systemctl status logstash
Beats : ec2 1대
apache, was Log 부터 해서 kibana, elasticsearch log 등 수집하는 Agent이며 이부분도 별도로 설치해서 진행하는것을 권장함
Metricbeat 설치
Step1: Metricbeat RPM 다운로드
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.13.4-x86_64.rpm
Step2: RPM 설치
rpm -vi metricbeat-7.13.4-x86_64.rpm
Step3: Metricbeat 설정
# vi /etc/metricbeat/metricbeat.yml
Kibana end point 설정
# =================================== Kibana ===================================
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:
# Kibana Host
# Scheme and port can be left out and will be set to the default (http and 5601)
# In case you specify and additional path, the scheme is required: http://localhost:5601/path
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
host: "{설치된 키바나 IP}:5601"
# Kibana Space ID
# ID of the Kibana Space into which the dashboards should be loaded. By default,
# the Default Space will be used.
#space.id:
Step4: Elasticsearch Output
# vi /etc/metricbeat/metricbeat.yml
Kibana tool에서 설정한 정보확인
# ================================== Outputs ===================================
# Configure what output to use when sending the data collected by the beat.
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["{elasticsearch IP}:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elk-user"
#password: "P@ssword!"
# ------------------------------ Logstash Output -------------------------------
#output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
Step5: Kibana Dashboard 설정
metricbeat setup --dashboards
Step6: Metricbeat 실행
기본초기화 setting
metricbeat setup -e
서비스활성화
sudo systemctl enable metricbeat
sudo chkconfig --add metricbeat
서비스 시작
sudo systemctl start metricbeat
레퍼런스 :