나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Framework

logback & logstash 패턴 설정

devidea 2017. 4. 4. 16:46

ELK의 기본 구조를 나타내는 그림이다.

server의 로그를 server측 Filebeat와 데이터를 저장하는 elasticsearch 서버의 Logstash 연결을 통해 데이터를 기록한다.


출처 : https://assets.digitalocean.com/articles/elk/elk-infrastructure.png


여기서 한가지 의문점이 생기는데, 어떻게 정의한 로그들을 가져가는지 이다.

어떻게 구조화단 로그 데이터를 elasticsearch에 맞춰서 넣을까?


우리는 일단 App Server가 spring의 logback을 사용한다고 가정하였다.

logback의 xml 설정을 통해 기록되는 로그들을 일정한 패턴을 두고 쓰게 만들 수 있다.

logback의 로그 발생 패턴과 logstach가 로그를 가져가서 elasticsearch에 기록하는 패턴을 통일화 하면은 저장된 로그들의 검색 및 분석에 용이할 것이다.


아래는 먼저 logback 설정이다.


로그 파일의 생성은 일단위로 하였으며, 날짜, hostname, thread, level, logger, method, line, message 등의 정보를 일련의 규격화된 포멧으로 기록하게 하였다.

<?xml version="1.0" encoding="UTF-8"?>

<!-- For assistance related to logback-translator or configurations  -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user             -->
<!--                                                                -->
<!-- For professional support please see                            -->
<!--    http://www.qos.ch/shop/products/professionalSupport         -->
<!--                                                                -->
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [${HOSTNAME}] [%thread] %level %logger{36}@%method:%line - %msg%n</pattern>
        </encoder>

    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/path/to/logbach/log/project.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>100</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [${HOSTNAME}] [%thread] %level %logger{36}@%method:%line - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="INFO"/>
    <logger name="org.hibernate" level="INFO" />

    <logger name="org.apache.commons" level="ERROR"/>
    <logger name="org.apache.velocity" level="ERROR"/>
    <logger name="org.apache.tiles" level="ERROR"/>
    <logger name="org.apache.catalina" level="INFO"/>

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

다음은 logstash의 설정 값이다.
특정 위치의 파일들을 읽어들이며 (*.log) logback에서 만들어 놓은 패턴대로 읽어 들이도록 설정이 되어 있다.

<?xml version="1.0" encoding="UTF-8"?>

<!-- For assistance related to logback-translator or configurations  -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user             -->
<!--                                                                -->
<!-- For professional support please see                            -->
<!--    http://www.qos.ch/shop/products/professionalSupport         -->
<!--                                                                -->
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [${HOSTNAME}] [%thread] %level %logger{36}@%method:%line - %msg%n</pattern>
        </encoder>

    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/path/to/logbach/log/project.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>100</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [${HOSTNAME}] [%thread] %level %logger{36}@%method:%line - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="INFO"/>
    <logger name="org.hibernate" level="INFO" />

    <logger name="org.apache.commons" level="ERROR"/>
    <logger name="org.apache.velocity" level="ERROR"/>
    <logger name="org.apache.tiles" level="ERROR"/>
    <logger name="org.apache.catalina" level="INFO"/>

    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>
다만 참고할 점은 logstash의 file로 설정되어 있는 부분을 beats 형태로 바꾸어 주어야 한다.

해당 설정은 아래 링크를 확인해 보자.

https://www.elastic.co/guide/en/beats/libbeat/current/logstash-installation.html

반응형

'Framework' 카테고리의 다른 글

ELK (elasticsearch + logstach + kibana) 설치  (0) 2017.04.04
rabbitmq 동접자 수 확인하기  (0) 2017.02.18