이번시간에는 ELK(Elasticsearch+Logstash+Kibana) 를 설치하여 ELK Stack 서버를 구축해 보겠습니다.
현재 Elasticsearch는 7.5 버전까지 출시가 되었으며, CentOS에서 Yum 패키지를 통해 설치해 보도록 하겠습니다.
Elasticsearch는 7.5 버전의 새로운 기능 및 릴리즈 정보는 아래 링크를 참고하시기 바랍니다.
Elastic Stack 7.5.0 출시
현재 Elasticsearch는 7.5 버전까지 출시가 되었으며, CentOS에서 Yum 패키지를 통해 설치해 보도록 하겠습니다.
Elasticsearch는 7.5 버전의 새로운 기능 및 릴리즈 정보는 아래 링크를 참고하시기 바랍니다.
Elastic Stack 7.5.0 출시
< OS 환경 설정 > - OS : Centos 7 64bit
- Partition : / 50G (System 영역)
/ELK 300G (ELK Data 영역)
- CPU : 8Core
- RAM : 32G
1. Java 설치 ( java 8 이상)
Elasticsearch 는 Java8 이상이 필요합니다. 만약 java가 설치되어 있지 않으면 jdk 1.8.0-openjdk 파일을 설치합니다.
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@localhost ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
BDB2053 Freeing read locks for locker 0x1b: 5689/140083220739904
Loaded plugins: fastestmirror
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mesa-libglapi.x86_64 0:18.3.4-5.el7 pango.x86_64 0:1.42.4-4.el7_7
pcsc-lite-libs.x86_64 0:1.8.8-8.el7 pixman.x86_64 0:0.34.0-1.el7 python-javapackages.noarch 0:3.4.1-11.el7 python-lxml.x86_64 0:3.2.1-4.el7
ttmkfdir.x86_64 0:3.0.9-42.el7 tzdata-java.noarch 0:2019c-1.el7 xorg-x11-font-utils.x86_64 1:7.5-21.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
Complete!
[root@localhost ~]#
Java 버전 확인
[root@localhost ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
[root@localhost ~]#
2. Elasticsearch PGP 키 가져오기 Elasticsearch 설치시 공개 서명키가 필요하며, 아래와 같이 공개 서명키(public signing key) 를 설치해줍니다.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
3. Elastic repository 설정 /etc/yum.repos.d 디렉토리 밑에 Elastic.repo 라는 파일을 만들고 아래의 Repository 정보를 등록합니다.
vi /etc/yum.repos.d/Elastic.repo
[Elastic-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
Elasticsearch, Logstash, Kibana 모두 동일한 저장소를 사용하고 있어서 한번만 등록해 주면 됩니다.
4. Elasticsearch/ Logstash / Kibana 설치
Repository 등록 후 Yum을 통해 ELK 패키지를 설치합니다.
Repository 등록 후 Yum을 통해 ELK 패키지를 설치합니다.
yum -y install elasticsearch
yum -y install logstash
yum -y install kibana
5. 환경 설정 ELK 설치가 완료되면 아래와 같이 추가적으로 설정값을 변경해 주면 됩니다. 디스크 용량 관리차원에 서 로그 데이터 파티션을 별도 분리하여 관리하고, Java heap 메모리 설정 및 성능 튜닝등을 통해 퍼포먼스를 향상킬 수 있습니다.
1) Elasticsearch.yml 파일 수정 및 디렉토리 생성 - elasticsearch가 환경 설정 파일 : /etc/elasticsearch/elasticsearch.yml
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: clustername // 클러스터 이름 변경(선택)
path.logs: /ELK/log/elasticsearch // elasticsearch 로그 파일 위치
path.data: /ELK/elasticsearch // elasticsearch 데이터 파일 위치
network.host: 0.0.0.0 // elasticsearch 바인딩 정보
http.port: 9200 // elasticsearch 서비스 포트(default 9200)
## 성능 튜닝 관련 설정.
thread_pool.search.queue_size: 10000
indices.memory.index_buffer_size : 512mb
cluster.max_shards_per_node : 3000
- elasticsearch 디렉토리 생성 및 소유권 변경
mkdir /ELK/log // 로그 파일 디렉토리 생성
mkdir /ELK/log/elasticsearch // elasticsearch 로그 디렉토리 생성
mkdir /ELK/elasticsearch // elasticsearch 데이터 디렉토리 생성
## 디렉토리 소유권 변경 ( root => elasticsearch )
chown elasticsearch.elasticsearch /ELK/log/elasticsearch -R
chown elasticsearch.elasticsearch /ELK/elasticsearch -R
2) elasticsearch jvm.options heap 메모리 사이즈 조절
Heap 메모리 사이즈는 최대 32G 이하로 세팅하는 것을 권장하며, 여기서는 32G 메모리의 절반인 16G 로 세팅하였습니다. heap 메모리 관련이나 성능 튜닝관련해서는 차후에 따로 포스팅을 하도록 하겠습니다.
vi /etc/elasticsearch/jvm.option
-Xms1g => Xms16g
-Xmx1g => Xms16g
3) logstash.yml 파일 수정 및 디렉토리 생성 - logstash 환경 설정 파일 : /etc/logstash/logstash.yml
vi /etc/logstash/logstash.yml
path.data: /ELK/logstash/
path.logs: /ELK/log/logstash
- logstash 디렉토리 생성 및 소유권 변경
mkdir /ELK/log/logstash // logstash 로그 디렉토리 생성
mkdir /ELK/logstash // logstash 데이터 디렉토리 생성
## 디렉토리 소유권 변경 ( root => logstash )
chown logstash.logstash /ELK/log/logstash -R
chown logstash.logstash /ELK/logstash -R
4) logstash jvm 옵션 heap 메모리 조절 ( 1G => 4G ) logstash heap 메모리도 시스템 사양에 따라 적절하게 값을 할당해 주시면 됩니다. 여기서는 4G로 할당하였습니다
vi /etc/logstash/jvm.option
-Xms1g => Xms4g
-Xmx1g => Xms4g
5) kibana.yml 환경 설정
- kibana 환경 설정 파일 : /etc/kibana/kibana.yml
vi /etc/kibana/kibana.yml
server.host: 0.0.0.0
elasticsearch.hosts: "http://localhost:9200"
6. Elasticsearch , Kibana 시작 및 서비스 등록
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl enable kibana
systemctl start kibana
7. Logstash 파일 생성 및 Logstash 실행
Logstash는 외부 로그데이터 전송시 로그를 수집하고(Input), 변환한 후(filter), elasticsearch로 전송(output) 해주는 역할을 합니다. logstash 실행시 데이터 수집 및 변환 출력을 위한 필터가 필요합니다.
1) logstash 필터 파일 구조 ( logstash.conf , 파일 이름 임의 생성 가능 )
원하는 이름으로 생성하시면 되며 아래와 같은 구조로 작성을 합니다.
원하는 이름으로 생성하시면 되며 아래와 같은 구조로 작성을 합니다.
input {
udp {
host => "0.0.0.0"
port => 514
}
filter {
grok {
match => ["message", "%{SYSLOG5424PRI:syslog_index}%{GREEDYDATA:message}"]
overwrite => [ "message" ]
}
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
※ input : 로그데이터를 수신할 프로토콜 및 포트, 코덱 등을 정의
※ filter : 수신한 로그에 대한 파싱, 인덱싱 및 변환 작업
※ output : 변환한 데이터를 Elasticsearch 등 외부 저장소로 출력
8. ELK 서비스 포트 방화벽 허용
## Allow Logstash Input
firewall-cmd --add-port=514/udp
firewall-cmd --add-port=514/udp --permanent
## Allow Elasticsearch
firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent
## Allow Kibana
firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent
9. Kibana 웹 URL 접속
http://ELK_ServerIP:5601
웹브라우저에서 http://elk_server_ip:5601 로 접속하면 아래와 같이 Kibana Web UI 화면이 보이게 됩니다.
다음번에는 Kibana 접속시 아파치 웹 서버를 통한 로그인 인증 설정 방법,
logstash.conf 에 다양한 로그 형식에 대한 필터링 설정 예시 등 대해서 포스팅 하도록 하겠습니다.
logstash.conf 에 다양한 로그 형식에 대한 필터링 설정 예시 등 대해서 포스팅 하도록 하겠습니다.
궁금하신 내용 있으면 댓글 남겨 주시면 답변 드리도록 하겠습니다.