데이터 수집(파일비트, 로그스태시) -> 인덱싱(엘라스틱서치) -> 시각화(키바나 로그스태시는 데이터의 전처리와 후처리를 담당한다
위에서는 Elasticsearch에게 데이터를 전달 한다고 하였지만, 실제 실무에서 사용이 되는 것을 보면 다양한 서비스에 이벤트 데이터를 전달할 수 있다.
로그스태시의 input, filter, output은 커스터마이징 하는 것이 까다롭다.
또한 파이프라인의 환경은 yaml 파일을 통해 수정한다.
Input
Filter
Output
Filebeats, Rebbitmq, Redis, Salesforce
모든 소스, 사이즈 및 형태의 데이터를 수집한다
데이터는 여러 시스템에서 다양한 모습으로 산발적으로 보관된 경우가 많다. Logstash는 다양한 입력(Input)을 지원하여 여러 공통 소스로부터 로그 수집이 가능하다. 즉, 로그, 메트릭, 웹 애플리케이션, 데이터 저장소 및 다양한 AWS 서비스를 연속 스트리밍 형태로 간편하게 수집할 수 있다.
로그스태시의 필터는 이벤트를 분석하고 명명된 필드를 식별하여 이를 공통적으로 구조화된 형식으로 변환한다. 또한 Logstash는 형식이나 복잡성에 상관 없이 데이터를 동적으로 변환하고 준비 해둔다.
Logstash는 원하는 곳으로 데이터를 라우팅(Routing) 할 수 있는 다양한 출력을 지원한다. 때문에 여러 저장소로 데이터를 다운스트림 하는 유연성도 확보할 수 있다.
input {
file { # plugin
codec => json
path => "c:/logs/*.log"
}
}
filter {
geoip { # plugin
database => "./GeoLite2-City.mmdb"
source => "ip"
}
}
ouput {
stdout { # plugin
codec => dots {}
}
elasticsearch { # plugin
index => "apache_elastic_example"
template => "./apache_template.json"
template_name => "apache_elastic_example"
template_overwrite => true
}
}
위 사진을 보면 input, filter, output에 해당하는 플러그인 리스트들을 나열 하였다.
필요한 경우 해당 링크를 참고하여 적용하자.
Input
- Files
- Syslog
- SQL Queries
- HTTP request
- Elasticsearch
- Beats
- Metrics systems
- And More..
Filter
- log 파싱
- 데이터 확장
- 태그 추가
- And More..
Output
- Elasticsearch
- Data 보관소 (ex : Amazon S3)
- Alterting & Monitoring system
- And more..
Logstash로 데이터 수집
Logstash 파이프 라인의 중간 처리 장치
최종 단계로 이벤트는 여러 출력 사용 가능
인코딩 방식
# foo.conf
input {
file { # ⚡ plugin
path => "C:/logstash-2.3.1/logstash-tutorial-dataset"
start_position => "beginning"
ignore_older => 0
}
}
output {
stdout {}
file {
path => "C:/output.txt"
}
}
input {
beats { # ⚡ plugin
port => 5044 # logstash port
host => "0.0.0.0"
}
}
여러개의 filebeat로부터 데이터를 수집하여 로그스태시로 전달
# 원하는 형식(pattern)
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
input {
file {
path => "/var/log/http.log" # 해당 경로에서 파일 읽는다
}
}
filter {
grok { # ⚡ plugin
match => {
"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
}
}
}
input {
file {
path => "D:/sample.log"
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "%{COMMONAPACHELOG}"
}
}
geoip { # ⚡ plugin
source => "[apache2][access][remote_ip]"
target => "[apache2][access][geoip]"
}
}
output {
elasticsearch { # ⚡ plugin
hosts => localhost
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
경량 로그 데이터 수집기