티스토리 뷰

먼저 실제 프로젝트 제작에 앞서서 Logstash에 대해서 미리 사용법을 알아두려 합니다. 

Logstash를 간단하게 설명하면, 요청이 들어오면 처리 후 출력하거나 다른 곳 ( ex: ElasticSearch , DB 등 ) 으로 보낼 수 있습니다.  

Logstash 를 비롯한 ELK 스택이 각광받는 이유는 일단 Logstash가 데이터의 종류와 상관없이 모든 데이터를 모을 수 있는 구조로 되어 있기 때문입니다. 여러곳에서 분산된 데이터를 Logstash에서 중앙관리를 할 수 있습니다. 어디서 많이 본 듯한 개념이죠? Kafka와 비슷하지만 조금 다른  Logstash에 대해서 알아보려 합니다.

ELK 답게 웬만한 언어는 다 지원이 되지만, 저는 Spring Boot 환경에서 테스트 해보려 합니다. 

 


#Pom.xml

먼저 logstash와 관련된 Dependency를 추가해줍니다. 해당 Dependency를 통해 Logstash로 요청을 전달할 수 있습니다.

<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.1.1</version>
</dependency>

#logback-spring.xml

위에서 추가한 Dependency를 활용하기 위해서 xml 파일을 수정해 여러 설정들을 할 수 있습니다.

주요한 옵션들을 하나하나 살펴보려합니다.

아래의 옵션은 scan을 True로 하고 scan주기를 30초로 둔 것인데, 해당 기능을 활성화 시켜두면 어플리케이션재시작없이 자동으로 xml의 변경점을 파악해서 적용을 해줍니다. 로그와 관련된 내용은 서비스 재시작 없이 xml의 변경만으로도 적용이 되는 아주 편리한 기능입니다. 특수한 경우를 제외하고 반드시 해당 옵션을 활성화 시키는 것을 추천드립니다.

<configuration scan="true" scanPeriod="30 seconds">

 

다음은 출력 포맷을 설정하는 부분입니다. appender를 통해서 어디서 출력될지를 먼저 지정하고, 현재는 ConsoleAppender로 되어 있어서 콘솔에 출력이 됩니다.

다음으로는 오는 pattern을 통해서 실제로 어떤식으로 출력할지 결정하게 됩니다. 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS}[%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

 

테스트를 위해 간단한 클래스를 만들었습니다. 위치는 어디든 괜찮습니다! 테스트용으로 잠시 main으로 빼뒀으니까요

package com.parkgg.onewex;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;

@Slf4j
public class test {
    public static void main(String[] args) {
        log.debug("Whatever TV");
    }
}

실행 하시면 다음과 같이 Log가 출력됩니다.

기본적으로 출력 Log 레벨이 DEBUG 단이기 때문에 로그가 실행이 되고, 시간 형태부터 마지막에 msg가 출력된 뒤 줄바꿈 까지 저희가 설정한 셋팅형태로 로그가 출력되는 것을 볼 수 있습니다.

다음으로는 root level을 통해서 레벨을 INFO로 변경해줍니다.

 


# Logstash 에서 출력

사실 위에서 출력되는 개념은 기초적이지만, 기초적인을 것을 가지고 Logstash로 출력하려 합니다. 

코드를 다음과 같이 수정해줍니다. 

appender를 보면 LogstashTcpSockerAppender로 되어있는데 TcpSocker을 통해서 출력해줄 예정입니다.

그리고 해당하는 주소 값은 [CentOS IP]:5000 형태로 보내줍니다. 만약 로컬환경이라면 localhost:5000이 될거에요. 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>10.10.0.20:5000</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

 

 

다시 CentOS환경으로 돌아와 Logstash의 파일 위치를 찾아줍니다. 저는 docker-compose로 실행시키고 있기 때문에 

[docker-compose 파일위치]/logstash/pipeline/logstash.conf 에 있습니다. 

// from docker-elk
vim ./logstash/pipeline/logstash.conf

그리고 해당 파일을 다음과 같이 수정해줍니다. 

input {
	tcp {
    	port => 5000
        codec => json_lines
    }
}

output {
	stdout{}
}

tcp port 5000 에서 오는 요청을 input값으로 넣고 codec은 json형태로 하겠다는 의미입니다. output은 일단 log에서 확인 할 수 있게 stdout로 설정했습니다.

다음으로 logstash 실행 후 logs를 확인해보면 다음과 같이 출력되는 것을 확인 할 수 있습니다.

docker logs [Logstash Container id]

 

자 마지막으로 Logstash에서 Elastic Search로 해당 데이터를 보내도록 하려합니다. 아까 수정했던 파일은 아래와 같이 재수정 해줍니다. 그럼 index는 기억나시나요? index명을 logstash-* 형태로 하고 뒤에 로그가 찍힌 날짜를 인덱스로 두려합니다.

input {
        tcp {
                port => 5000
                codec => json_lines
        }
}

## Add your filters / logstash plugins configuration here

output {
        elasticsearch {
                hosts => ["10.10.0.20:9200"]
                index => "logstash-%{+YYYY.MM.dd}"
        }
}

docker-compose를 사용하시는 분이라면 ELK Stack을 실행시켜주고, 아닌 분들이라면 Elastic Search도 기동해주세요. 마찬가지로 Kibana도  기동시켜줘야 합니다.

5601 포트로 접속 시 키바나 대쉬보드를 확인 할 수 있습니다.

키바나 대쉬보드에서 Management를 통해서 저희가 생성한 Index를 확인하려합니다.

 

저희가 인덱스명 을 logstash-* 형태로 만들었으니, Data View 탭에서 Create data view를 통해서 해당 인덱스 값을 추가해줍니다. 

여기까지만 성공하셔도 성공입니다. 만약 해당 index가 없다면 애초에 여기서 에러가 출력됩니다. 저도 이부분에 굉장히 애를 많이 먹었었는데, 다시 해보니 잘돼서 기분이 좋네요. 

그리고 해당하는 로그들을 다양한 시각화를 통해 찾아 볼 수 있지만, 해당 내용은 추후에 좀 더 자세하게 다뤄볼게요.

감사합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함