본문 바로가기
Opensource 모니터링 구축/ELK

리눅스 Logstash 설치 - ELK Stack 설치(2)

by Infralabs 2024. 8. 21.
반응형

모니터링 시스템 구축 과정에서 로그 수집을 위해 ELK Stack(Elasticsearch, Logstash, Kibana) 중 하나인 Logstash를 설치하였습니다.
이번 게시글에서는 Rocky Linux 8.X 환경에서 Logstash를 설치하는 과정을 소개하고자 합니다.

1. Logstash 소개

Logstash는 다양한 데이터를 수집하고 이를 처리하여 저장할 수 있는 오픈소스 솔루션입니다. 
 

1-1. Logstash 의 주요 기능과 구성 요소

모니터링 시스템을 구축하면서 사용하는 주요 기능으로 입력, 필터, 출력이 있습니다. 

  • 입력 (input) : 로그 파일, 데이터베이스, 네트워크 소켓 등 여러 데이터를 입력받을 수 있습니다. 
  • 필터 (Filter) : 입력된 데이터를 정제하고, 형식을 변경하고, 필드 추가 및 제거 등의 작업을 수행합니다. 대표적으로 Grok(정규표현식 기반 파싱), Mutate(데이터 변형) 등을 사용합니다.
  • 출력 (Output) : 처리된 데이터를 출력합니다. Elasticsearch, 파일시스템, 메일 등 여러 매체로 출력할 수 있습니다. 

 
ELK 스택(Elasticsearch, Logstash, Kibana) 설치를 위해 Logstash 설치하는 과정을 설명하고자 합니다. 
저는 Logstash의 input으로 로그 파일을 입력 받아, 필터링 후 Elasticsearch로 출력하는 형태로 사용하였습니다.
 

2. Logstash 설치 

설치 경로 : /app/logstash

2-1. Logstash 다운로드 

공식 홈페이지를 통해 각자 환경에 맞는 플랫폼을 선택한 후 다운로드합니다. 
https://www.elastic.co/kr/downloads/logstash

Download Logstash Free | Get Started Now

Download Logstash or the complete Elastic Stack (formerly ELK stack) for free and start collecting, searching, and analyzing your data with Elastic in minutes....

www.elastic.co

2-2. Logtash 설치

다운로드받은 파일을 설치하고자 하는 경로에 압축을 풀어 옮겨줍니다. 

tar xvzf logstash-8.15.0-linux-x86_64.tar.gz
mv logstash-8.15.0 /app/logstash

2-3. Logstash 설정 

Logstash의 설정파일로는 config 하위에 logstash.yml 와 logstash.conf 2가지 파일이 있습니다. 

  • logstash.yml : logstash 솔루션 설정 
  • logstash.conf : 데이터 입력, 가공, 출력 설정 

1) Logstash 기본 설정 

로그 경로와 로그 레벨에 대해 설정합니다. 

# log level 설정 
log.level: fatal 
# logs 경로 설정 
path.logs: /log/logstash

 

2) Logstash input 플러그인을 통한 로그 파일 수집 

Logstash의 input 플러그인를 활용하여, /var/log/messages 로그를 수집합니다. 

#vi logstash.conf 
input{
        file{
		path => "/var/log/messages"
		start_position => beginning
        }
}

 

3) Logstash 특정 텍스트 포함 여부 확인 및 삭제 

filter 플러그인 중 drop 기능을 통해 특정 텍스트가 포함되어 있다면 출력하지 않고 버릴수 있습니다. 

# vi logstash.conf 
filter {
		# 수집한 데이터에 dnf 라는 텍스트가 있다면 drop 
        if "dnf" in [message] {
                drop { }
        }
}

 

4) Logstash 새로운 필드 생성

filter 플러그인 중 mutate 기능을 활용하여 새로운 필드를 만들거나 변경할 수 있습니다. 

# vi logstash.conf 
filter {
		# 수집한 데이터에 dnf 라는 텍스트가 있다면 drop 
        if "dnf" in [message] {
                drop { }
        }
        # sendmsg 라는 필드값을 not으로 설정 
        mutate {
                replace  => { "sendmsg" => "not" }
        }
}

 

5) Logstash 데이터를 Elasticsearch로 출력하기 

Logstash의 Elasticsearch output 플러그인을 활용하여 가공한 데이터를 Elasticsearch에 저장할 수 있습니다. 
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

Elasticsearch output plugin | Logstash Reference [8.15] | Elastic

If you configure the plugin to use 'TLSv1.1' on any recent JVM, such as the one packaged with Logstash, the protocol is disabled by default and needs to be enabled manually by changing jdk.tls.disabledAlgorithms in the $JDK_HOME/conf/security/java.security

www.elastic.co

# vi logstash.conf

output{
        elasticsearch{
                hosts => "https://{Elasticsearch가 설치된 서버IP}:{Port}"
                
                # SSL 기능 활용하는 경우 
                ssl_enabled => true
                ssl_truststore_path => "/app/logstash/certs/IR-GRAFANA.p12"
                ssl_truststore_password => "{패스워드}"
                ssl_keystore_path => "/app/logstash/certs/IR-GRAFANA.p12"
                ssl_keystore_password => "{패스워드}"
                
                # Elasticsearch 계정
                user => "swadm"
                password => "{패스워드}"
                
                # 수집한 데이터를 저장할 인덱스명
                index => "syslog"
        }
}
반응형