Joswlv

Logstash 기초

2017-02-19

Logstash 기초

설치

최신 버전은 Download Logstash에서 다운 받으면 된다.

하지만 낮은 버전을 이용할 경우 다음 과 같이 하면 된다. 우선 해당 버전 logstash repo정보를 찾는다.

작업을 위해 2.3버전이 필요했다.링크

링크에서 설명한 것을 보면 다운로드를 위한 pulic signing key를 다음과 같이 발급받는다.

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

그리고 /etc/yum.repos.d/ 디렉토리에 logstash.repo파일을 다음과 같이 만들고 저장한다.

[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

그리고 yum install logstash를 하면 logstash 2.3버전이 설치가 된다.

설치는 /opt/logstash디렉토리에 설치된다.

개념

logstash는 파이프라인같은 개념이다. 다양한 곳에서 Input을 받아 사용자가 가공하여 다양한 곳으로 출력 및 저장 할 수 있다.

데이터가 소스에서 저장소로 이동할 때 logstash필터에서 미리 정의한 이벤트 및 구조를 정의 할 수 있다. 사용할 수 있는 라이브러리는 다양하다.

  • input : 데이터를 받는다.
  • filter : 데이터를 가공한다.
  • output : 데이터를 출력한다.

이렇게 정리가 된다.

사용하기

logstash를 사용하기 위해서 데이터 소스를 가공을 정의한 conf파일이 필요하다.

모양은 다음과 같다.

input {
        .
        .
        .
}

filter {
        .
        .
        .
}

output {
        .
        .
        .
}

conf파일을 만들면 logstash가 설치된 폴더안에 있는 bin폴더에 있는 logstash를 사용하면 된다.

./logstash -f test.conf

예제

finace.yahoo.com에서 apple 주식 정보를 csv파일로 다운 받아 elasticsearch에 저장해보자

데이터는 Date, Open, High, Low, Close 등이 있다.

conf파일을 작성하면 다음과 같다.

input {
  file {
    path => "/root/applestock.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter {
  csv {
      separator => ","
      columns => ["Date","Open","High","Low","Close","Volume","Adj Close"]
  }
  mutate {convert => ["Open", "float"]}
  mutate {convert => ["High", "float"]}
  mutate {convert => ["Low", "float"]}
  mutate {convert => ["Close", "float"]}
}
output {
    elasticsearch {
        hosts => "localhost"
        index => "applestock"
    }
    stdout {}
}
  • input에서 file을 받고, 처음부터 읽겠다고 선언했다. 그리고 sincdb_path는 position을 저장하는 db의 위치인데, 사용을 안하겠다고 선언했다.
  • filter에서 csv파일을 ,로 구분하고 Open, High, Low, Close를 float라고 mapping을 했다.
  • 결과 같음 elasticsearch applestock index에 저장했다. 그리고 저장되는 과정을 출력했다.

다음과 같이 stdout이 되는 것을 확인 할 수 있다.

...
2017-02-20T03:08:23.445Z ip-172-31-3-227 1981-08-24,18.999999,18.999999,18.875,18.875,5768000,0.279022
2017-02-20T03:08:23.445Z ip-172-31-3-227 1981-08-21,20.375001,20.375001,20.125,20.125,10477600,0.2975
2017-02-20T03:08:23.445Z ip-172-31-3-227 1981-08-20,21.624999,21.75,21.624999,21.624999,4278400,0.319674
2017-02-20T03:08:23.445Z ip-172-31-3-227 1981-08-19,21.624999,21.624999,21.375,21.375,5168800,0.315978
2017-02-20T03:08:23.445Z ip-172-31-3-227 1981-08-18,21.875,21.875,21.624999,21.624999,4250400,0.319674
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-17,22.375,22.375,22.125001,22.125001,4726400,0.327065
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-14,23.125,23.125,22.875,22.875,6048000,0.338152
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-13,23.374999,23.374999,23.25,23.25,6871200,0.343695
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-12,24.125,24.125,24.00,24.00,6568800,0.354782
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-11,24.750001,24.750001,24.50,24.50,17864000,0.362174
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-07,25.25,25.375,25.25,25.25,2301600,0.373261
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-06,25.375,25.375,25.25,25.25,2632000,0.373261
2017-02-20T03:08:23.446Z ip-172-31-3-227 1981-08-05,25.875,25.999999,25.875,25.875,4373600,0.3825
...

ElasticSearch에 Index가 생성된 것을 확인 할 수 있다.

Kibana를 이용하여 apple주식데이터를 시각화를 하였다.

사용된 Document는 9125개임을 확인 할 수 있다.

Reference


Comments