본문 바로가기

개발/Others

[ELK] 시작한 김에 ELK(2)

오늘은 logstash dummy 파일을 만들고 elasticsearch로 보낸 후 kibana에서 조회해보고자 한다.

지난번처럼 역시나 (https://xodns.tistory.com/115) 블로그의 내용을 참고했다.

 

Elastic 진영에서는 Beats 라는 Agent를 도입하여 사용을 권장하고 있는듯 하나,

일단은 임시로 생성한 파일을 통해 logstash로 읽고 elasticsearch로 보내는 과정을 진행해보고자 한다.

 

"DOCKER-ELK" 프로젝트에서 logstash 부분의 설정파일들을 수정해준다.

  • 일단 더미 파일을 하나 만들자. 나는 파일명을 logstash.log 로 했다.
hello
world
chicken
pizza
burger
  • logstash 경로에 test 디렉토리를 하나 만든 후 파일을 넣어준다.

  • pipeline 디렉토리 내에 test.conf를 만든다. 이미 존재하는 logstash.conf 를 참고하면 된다.
input {
    file {
        path => "/usr/share/logstash/input/logstash.log"
        start_position => "beginning"
    }
}

filter {
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        user => "logstash_internal"
        password => "${LOGSTASH_INTERNAL_PASSWORD}"
        index => "logstash"
    }
    stdout {
    codec => rubydebug
    }
}
  • config 디렉토리 내에 pipelines.yml 파일을 생성하고 내용을 입력해준다.
- pipeline.id: test
  path.config: "/usr/share/logstash/pipeline/test.conf"
  • -docker-compose.yml 파일에 logstash의 volumes 부분에 내용을 추가해준다.
  logstash:
    build:
      context: logstash/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
      # 내용추가
      - ./logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro,Z
      - ./logstash/test:/usr/share/logstash/input:ro,Z
  • kibana에서 설정을 하자.(Management -> Roles -> Index privileges -> Indices)

  • docker-compose를 다시 띄운(docker-compose down -> docker-compose up -d) 후 logstash 컨테이너의 로그를 확인

  • kibana의 Dev Tools에서 제공되는 console로 조회해보자.
GET /_cat/indices

yellow open logstash ... 1 1 4 0 16.1kb 16.1kb

 


ELK stack 구성의 가~~~장 기본적인 기능들만 살펴보았다.

실무에서는 opensearch를 적용했고, SpringBoot와 연동하여

webclient 호출이나 opensearch java client를 사용해 bulk insert 등의 동작을 구성했다.

 

실제로 RDB에서 전환하면서, 제약사항도 있었지만,

기존에는 직접 개별적으로 라이브러리를 찾아 구성해야 했던 많은 기능들을,

다양한 플러그인을 통해 손쉽게 개선해 준 경우도 있었다.

(geoip 기능 , sql plugin + opensearch cli) 등..

 

또한 index 관리에 있어서도 template과 management 구성으로,

대용량 로그에 대한 주기적인 삭제정책 등도 간편하게 구성할 수 있었다.

 

특히 대용량 데이터를 처리하는 과정에 있어, 시간과 관련된 값을 다루는 부분이 굉장히 중요한데,

Elasticsearch는 java로 개발된 Apache Lucene 기반으로 만들어져,

java의 시간 메서드를 어느정도 다룰 수 있다면 크게 어려움 없이 이 부분에 대해 컨트롤이 가능하다.

(다만 현재는 모든 시간 메서드를 지원하는것은 아니고, 지속적인 패치를 통해 개선될것이라 생각한다.)

 

다음 글에서는 실제 opensearch 적용 과정에 경험한 문제들과 개선사항에 대해 작성해보고자 한다.