[Linux]

[Linux] ELK 실습

UtakerS 2022. 6. 20. 14:00
반응형

[Linux Log ELK 관리]

ELK Stack을이용한 Linux Log 관리

<출처> - https://medium.com/day34/

ELK (Elasticsearch, Logstash, Kibana)

[ Elasticsearch] 
- Java로 개발 된 오픈 소스 검색 엔진( Elasticsearch는 ELK Stack의 핵심 구성요소)

- HTTP 대시보드 웹 인터페이스(Kibana)와 함께 분산되어있는 다중 테넌트(분산저장)에 저장된 전체텍스트 검색 엔진을 제공

- JSON 문서 체계를 사용하여 데이터 요청, 검색, 저장을 수행하고, 로그 파일 뿐만아니라 각종 다양한 형태의 텍스트를 검색하는 데 사용

 

[ Logstash]

- 이벤트 및 로그 관리를 위한 오픈 소스 도구

- 데이터 수집을 위한 실시간 감시기능을 제공

- Logstash는 로그 데이터를 수집하고 데이터를 JSON 문서로 변환 후 Elasticsearch에 저장하는 역할을 수행

 

[ Kibana]

- Elasticsearch를 위한 오픈 소스 데이터 시각화 도구

- Kibana는 직관적이고, 깔끔한 형태의 대시 보드 웹 인터페이스를 제공

- Elasticsearch에서 데이터를 관리하고, Kibana에서 데이터를 시각화

 

[ Beats]

- Beats는 Client에 설치하여 Client에서 발생하는대량의 데이터를 Logstash&Elasticsearch 서버로 보낼 수 있는 경량 에이전트 데이터 전송 서비스

- Log File 전송에 사용되는"Filebeat" 외의 다양한 Beat를 제공 ("Metricbeat", "Packetbeat","Winlogbeat" )

- Beats 목록 및 다운로드 링크: https://www.elastic.co/kr/downloads/beats

 


Linux-01 -  Elasticsearch, Nginx WEB & Kibana, Logstash

Linux-02 - Logstash Client Filebeat

win10 - 웹브라우저에서 kibana 사용

 

[ 1. ELK Stack을 이용한 Syslog 수집 및 분석 ]

1. vm 메모리 증설(4GB)

 

2. selinux 비활성화

/etc/sysconfig/selinux 편집 > setenforce 0 > reboot > getenforce 

 

3. JDK install

 

4. Elasticsearch install

[root@localhost ~]# mkdir ./ELK 
[root@localhost ~]# cd ./ELK 
[root@localhost ELK]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-x86_64.rpm 
[root@localhost ELK]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

    오픈소스를 내려받고 GPG-key를 임포트 시키고 설치해야한다.

    해당 RPM 파일이 위변조되지 않았음을 보장

    만약 key값이 다르다면 설치시 안내문구가 뜬다

[root@localhost ELK]# rpm -ivh elasticsearch-7.6.1-x86_64.rpm

 

5. 환경 설정

- 보안설정 "Localhost"에서 9200번 Port를 이용하여 Elasticsearch가 동작하도록 설정 
- mlockall 기능을 활성화하여 모든 작업에 관할메모리 사용을 물리메모리를 사용하도록 설정 변경( Swap 영역사용안함) 
- 메모리페이징 시 Log 손실이 발생할 위험이 존재하므로, 페이징 작업을 진행하지 않도록 설정을 변경

 

[root@localhost ELK]# vi /etc/elasticsearch/elasticsearch.yml   << 검색 수집 분석하면서 메모리를 많이 잡아먹음
43 bootstrap.memory_lock: true 
55 network.host: localhost
59 http.port: 9200


[root@localhost ~]# vi /usr/lib/systemd/system/elasticsearch.service << demon관리

33 # Memory mlockall 
34 LimitMEMLOCK=infinity( 새로라인을정의해서작성)


[root@localhost ~]# vi /etc/sysconfig/elasticsearch 
46 MAX_LOCKED_MEMORY=unlimited



[root@localhost ELK]#systemctl daemon-reload( mlockall 설정적용을 위해 전체Daemon을 Reload ) 
[root@localhost ELK]# systemctl enable elasticsearch

[root@localhost ELK]# systemctl start elasticsearch

 

6. 확인

curl 명령어를 이용하여, mlockall 사용여부를 확인

 

curl 명령어를 이용하여, Elasticsearch 동작을 확인

 

7. Nginx WEB & Kibana install

[root@localhost ELK]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-x86_64.rpm 
[root@localhost ELK]# rpm -ivh kibana-7.6.1-x86_64.rpm

 

8. Kibana Service 설정파일 수정작업 

- 운영 Port 설정 및 외부 접근을 허용하기 위해 All-Network 설정진행( 특정 Host만 지정도 가능) 
- 전부 주석처리 되어있으며, 주석 해제 작업만 진행

[root@localhost ELK]# vi /etc/kibana/kibana.yml 
2 server.port: 5601 
7 server.host: "0.0.0.0" 
28 elasticsearch.hosts: ["http://localhost:9200"]

 

[root@localhost ELK]# systemctl enable kibana 
[root@localhost ELK]# systemctl start kibana

 

9. nginx 설치

[root@localhost ELK]# yum -y install nginx httpd-tools

 

- Kibana Service는 Reverse WEB Proxy Server을 통해 화면에 정보를 표시 
- ELASTIC 공식가이드에서 사용한 Nginx Web Server를 사용하여 Reverse WEB Proxy Server를 구성 
- Nginx를 설치하기 위해 EPEL 저장소를 추가 후 Nginx 패키지를 설치( httpd-tools 패키지를 함께 설치)

[ Forward Proxy (포워드 프록시)] 
- 일반적인 프록시 서버, 클라이언트와 웹 서버의 중계역할로 클라이언트 요청 시 Proxy서버는 해당 요청을 웹 서버로 중계하는역할
- 프록시 서버는 클라이언트의 요청이 발생하기 전까지는 접근하는 웹 서버의 주소를 알 수 없다.

[ Reverse Proxy (리버스 프록시)] 
- 클라이언트와 내부망의 서버 사이에 위치하는 Proxy Server를 말한다.
- 클라이언트 요청시 프록시 서버가 내부망 서버에 요청 후 응답 받은 자원을 클라이언트에게 전달 
- 리버스 프록시 서버는 실제 서버들에 대한 주소를 매핑해야 한다.

 

10. Server Block 설정 제거 후 새로운 가상호스트를 추가하여 사용 

[root@localhost ELK]# vi /etc/nginx/nginx.conf

38번째 라인부터 57번째 라인까지 삭제

 

[root@localhost ELK]# vi /etc/nginx/conf.d/kibana.conf

Reverse Proxy Server 운영을 위한 가상 호스트 설정

Client > web server(nginx) > kibana

Nginx WEB 접근은기본적인 Access 접근보안형식을 사용 
기본적인 Proxy Server 정보를 Header에 포함하는 설정정보를 함께 지정

Access 접근보안을 사용하므로, 접근 시 사용할 계정 및 P/W(itbank)값을 지정

[root@localhost ELK]# systemctl enable nginx 
[root@localhost ELK]# systemctl start nginx

 11. Logstash install

[root@localhost ELK]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.rpm 
[root@localhost ELK]# rpm -ivh logstash-7.6.1.rpm

12. 환경설정

- SSL/TLS에서 사용할 공개키 인증서 및 개인키를 생성 후 확인 
- SSL/TLS 설정파일을 참조하여 공개키 인증서 및 개인키를 생성 
- 추가 옵션을 통해 각 Key의 만료일 및 rsa Bit 값등을 지정한다.

 

[root@localhost ELK]# vi /etc/pki/tls/openssl.cnf

226 [ v3_ca ] 
227 # Server IP Address 
228 subjectAltName = IP: 192.168.1.100

 

-SSL/TLS를 이용하여 로그 정보 전송 시 로그정보를 암호화하여 전송하는 것이 좋다. 
-SSL/TLS Server IP 주소를 명시 ( 기존 설정 파일에 존재하지 않으므로, 새로작성 )

 

[root@localhost ELK]# openssl req -config /etc/pki/tls/openssl.cnf \

-x509 -days 3650 -batch -nodes -newkey rsa:2048 \ 
-keyout /etc/pki/tls/private/logstash-forwarder.key \ 
-out /etc/pki/tls/certs/logstash-forwarder.crt

 

[root@localhost ELK]# vi /etc/logstash/conf.d/syslog.conf

- Client로부터 Filebeat를 이용하여 전송된 데이터를 받아들일 형식을 결정 
- 사용 Port 정의 및 SSL/TLS 설정 값 정의 
- Logstash의 경우 Filebeat로부터 반드시 지정된 시간내에 데이터가 전송되어야한다. 
- 만약 지정된 시간내에 데이터 전송이 들어오지 않을 경우 연결을 해제한다. 
- client_inactivity_timeout 설정을 통해 Filebeat로부터 들어오는 데이터에 대한 응답대기 시간을 정의한다.

( 정의하지않을경우1분기본값 ) 
- 가상머신 환경을 사용 할 경우 60초내 응답을 못하는 경우가 발생하여 연결이 끊길 수 있으므로 10분으로 값을 늘려준다.

- Logstash에서는 다양한 Filter Plugin을 지원( "grok" Fileter Plugin을 주로 사용) 
- grok 기본형식: %{ 미리 정의된 정규 표현식: 정규표현식에 Match 된 데이터를 담을 Field} 
- Linux Syslog에 대한 Filter식을 정의 ( 주요서비스에 대한 기본 Parsing 설정을 공식사이트에서 제공 )

http://grokconstructor.appspot.com/do/match

https://www.elastic.co/guide/en/logstash/7.6/config-examples.html

- Logstash에서 수집한 데이터를 Elasticsearch로 전송하기 위한 설정을 진행 
- Elasticsearch의 주소 및 Index 설정등을 진행한다. 
- Elasticsearch의 주소 및 Index 설정등을 진행한다. 
- Index 설정은 하루에 한번씩 새로운 Index를 생성하여 로그 관리의 편의성을 가져오기 위해 사용된다.

 

[root@localhost ELK]# systemctl enable logstash 
[root@localhost ELK]# systemctl start logstash 
[root@localhost ELK]# firewall-cmd --permanent --add-service=http 
[root@localhost ELK]# firewall-cmd --permanent --add-port=5044/tcp 
[root@localhost ELK]# firewall-cmd --reload

13. Logstash Client Filebeat Install(Linux02-Client)

 

scp로 복사

mv ./logstash-forwarder.crt /etc/pki/tls/certs/

 

- Logstash Client에서 접속 후 ELK Server의 공개키 인증서를 SCP를 이용하여 복사진행 
- 전송된 공개키 인증서를 신뢰 할 수 있는 CA 인증기관으로 등록하기 위해 "/etc/pki/tls/certs" 디렉터리로이동

 

[root@localhost ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

[root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-x86_64.rpm

[root@localhost ~]# rpm -ivh filebeat-7.6.1-x86_64.rpm

[root@localhost ~]# vi /etc/filebeat/filebeat.yml 
24 enabled: true 
27 paths: 
28 -/var/log/*.log 
29 -/var/log/secure 
30 -/var/log/messages

 

# Filebeat에서 수집할 로그파일지정 
# 수집하고자 하는 Log의 절대경로를 명시 ( 여러개의 경로 지정도 가능하다. ) 
# messages Log를 전송하게 설정함으로써 30초 주기의 모니터링 메시지가 Logstash로 전송되도록한다. (연결해제방지)


150 #--------------------------Elasticsearch output ------------------------------ 
151 #output.elasticsearch: 
152 # Array of hosts to connect to. 
153 #hosts: ["localhost:9200"]


# Filebeat Output 기본값 Elasticsearch 우리는 Logstash로 Output을 진행하므로 해당 라인을 반드시 주석처리한다.

 

163 #-----------------------------Logstash output -------------------------------- 
164 output.logstash: 
165 # The Logstash hosts 
166 hosts: ["192.168.1.100:5044"] 
167 ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] 
168 bulk_max_size: 1024


# Logstash Server의 IP 주소 지정 및 서비스 포트 지정 
# 기존 주석 처리되어있는 부분을 주석 해제(설명부분제외) 
# SSL/TLS 통신을 위해 복사해 온 SSL 공개키 인증서

 

- Filebeat 사용을 True로변경

- 기본 Elasticsearch 출력을 진행하므로, 주석 처리 후 출력 처리를 Logstash에서 수행하도록 설정을 변경

 

[root@localhost ~]# systemctl enable filebeat 
[root@localhost ~]# systemctl start filebeat

start를 하게되면 linux01 watch로 보고있던거에 올라오는거 확인

 

 

14. ELK Stack 동작확인(win10)

nginx에서 reverse proxy server의 형태로 존재하고있어서 web 페이지가 아닌 kibana가 뜬다.

 

next step

Create Index Pattern

 

반응형