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개임을 확인 할 수 있다.