다운로드 공식 링크
위의 링크를 통해 다운로드 받을 수 있다.
저는 로그스태시와 친하지 않습니다.
그래서 자세한 설명이 들어가지 않을 수도 있습니다.
저도 겨우겨우 실행만 한 수준이기 때문입니다.
압축을 풀고 안에 들어가면 여러 폴더들이 있을 것이다.
거기서 bin/logstash 파일이 logstash의 실행파일이다.
일단, 다른 설정은 건드리지 않고 ./bin/logstash
를 입력하여 실행했을 때 실행이 되는지 확인해야 한다.
Java가 설치되어있지 않으면 logstash 폴더 내에 내장되어있는 Java를 통해 실행된다.
하지만 만약 설치되어있다면 조금 난감한 상황이 생길수도 있는데, 너무 낮은 버전이 설치되어 있거나, 너무 최신버전이 설치되어 있어도 실행이 되지 않는다.
최신버전에서 안된다니? 로스트 테크놀로지라도 있는거냐?!
실은 최신버전으로 오면시 지원이 중단된 기능들이 있다보니 너무 최신버전에서는 작동되지 않는다.
본인의 경우에는 .zshrc
혹은 .bashrc
파일 내에 있는 JAVA_HOME
프로퍼티에 주석처리를 하여 로컬에 설치된 Java를 사용하지 않는 것으로 logstash에 내장된 Java를 통해 실행되도록 처리했다.
다른 방법도 많이 있을텐데 각자의 방법으로 해보시길 바란다.
config/
경로에 있는 파일들이다.
기본적으로 이 파일이 있긴 한데 전부 주석처리 되어있어 실질적인 내용은 없는것과 마찬가지다.
본인이 넣은 설정이다.
중요한게 path.config
인데, 여기에 로그스태시가 설치된 경로의 config/logstash.conf
를 써줘야 한다.
만약 설정 파일을 여러개를 쓰려거든 config/*.conf
이렇게 써도 된다.
이 파일은 기본적으로 들어있지 않은 파일인데, 샘플은 config/logstash-sample.conf
라는 이름으로 들어있다.
input
, filter
, output
이렇게 구역이 나눠지며,
input
은 데이터 소스에 대한 설정filter
는 가공해야 하는 부분이 있다면 그 부분에 대한 설정output
은 데이터가 들어갈 목적지를 설정한다.여기서 jdbc_driver_library
는 기본적으로 제공되지가 않는다.
직접 어딘가에서 다운로드 받아야 하는데,
https://downloads.mysql.com/archives/c-j/
위 주소에서 받거나, 어떻게든 다운로드 받아서 사용해야 한다.
https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
filter에 대한 공식 가이드 문서이다.
본인은 mysql 쿼리문에 JSON_ARRAYAGG
를 사용해서 나온 array string을 json filter가 파싱하지 못해서 방법을 찾다가 ruby filter를 이용하여 성공했다.
("[\"모자\"]"
이런 느낌의 json string을 json filter가 파싱하지 못한다.)
ruby filter에 대한 가이드 문서는 아래 링크를 참고하실 바란다.
https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html
여기서 AWS의 elasticsearch에 연결하면서 애먹은 부분이 있는데, ssl
설정과 ilm_enabled
설정이 없으면
xpack permission denied
에러가 나면서 실패하는 것이다.
AWS elasticsearch를 사용하시는 분들은 아래 링크를 참고하시길 바란다.
https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/es-managedomains-logstash.html
input {
jdbc {
jdbc_driver_library => "/Users/juunini/logstash-7.11.2/mysql-connector-java-8.0.16.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://url:port/db_name"
jdbc_user => "user"
jdbc_password => "password"
jdbc_paging_enabled => true
tracking_column => "updated_at"
use_column_value => true
tracking_column_type => "numeric"
schedule => "*/5 * * * * *"
statement => "SELECT ... FROM ..."
}
}
filter {
ruby {
code => "
require 'json'
category_names = JSON.parse(event.get('category_names'))
event.set('category_names', category_names.select { |name| name != nil })
"
}
mutate {
copy => { "idx" => "[@metadata][_id]"}
remove_field => ["idx", "@version", "updated_at"]
}
}
output {
stdout { codec => "rubydebug"}
elasticsearch {
index => "items"
document_id => "%{[@metadata][_id]}"
hosts => ["https://url:443"]
user => "user"
password => "password"
ssl => true
ilm_enabled => false
}
}