Data Flow
데이터 분석 흐름을 풀어 설명해보자면 ,
Filebeat로 log파일을 catch하여
전처리 log 파일을 Logstash로 data loading한다음
ElasticSearch로 data를 보내 분석한 후
Kibana를 통해 시각화 및 관리
터미널에서 실행하는 순서는 ( 순서 중요 )
elasticsearch 실행
kibana 실행
작성한 logstash conf파일 실행
filebeat 실행
구성 및 선결요건
elasticsearch-7.15.0
logstash-7.15.0
filebeat-7.15.0
kibana-7.15.0
elasticsearch 설정 및 실행
elasticsearch 설정
vi ~/prod/elk/elasticsearch-7.15.0/config/elasticsearch.yml
... 하단 추가(취소)
# xpack.security.enabled: true
...
elasticsearch 실행
cd ~/prod/elk/elasticsearch-7.15.0/bin
./elasticsearch
# elasticsearch 실행확인
curl localhost:9200
{
"name" : "ubuntu",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "zPtzZ_nzRUeCsj1haIy6AQ",
"version" : {
"number" : "7.15.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "79d65f6e357953a5b3cbcc5e2c7c21073d89aa29",
"build_date" : "2021-09-16T03:05:29.143308416Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
logstash 설정 및 실행
logstash.yml 및 pipeline.yml설정
### logstash 설정 수정
vi ~/prod/elk/logstash-7.15.0/config/logstash.yml
...
#logstash가 주기적으로 pipeline 설정파일을 다시 읽어와서 pipeline을 구축 함
config.reload.automatic: true
#logstash가 pipeline 설정파일을 읽어오는 주기를 설정(하기는 3초에 한번씩 읽어 옮)
config.reload.interval: 3s
...
### pipeline 설정 수정
vi ~/prod/elk/logstash-7.15.0/config/pipelines.yml
- pipeline.id: test
# pipeline conf파일을 지정.
# 하기는 위에서 정의한 logstash.conf파일로 지정했음.
# 여기서 root폴더는 logstash root임.
path.config: "./config/logstash.conf"
# 제대로 안될 시 아래와 같은 에러 발생
## 에러1
ERROR: Pipelines YAML file is empty. Location: /home/hyper/prod/elk/logstash-7.15.0/config/pipelines.yml
## 에러2
[2022-03-26T08:37:16,850][INFO ][logstash.config.source.local.configpathloader] No config files found in path {:path=>"/home/hyper/prod/elk/logstash-7.15.0/bin/config/logstash.conf"}
logstash.conf 수정
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
# filter{
# grok{
# match => { "message"=> ["%{IPORHOST:clientip} (?:-|%{USER:ident})"]
# }
# }
# }
filter {
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
remove_field => "timestamp"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
logstash 실행
cd ~/prod/elk/logstash-7.15.0/bin
./logstash -f ../config/logstash.conf # .conf파일을 명시해줘야 정상적으로 실행됨
# logstash 정상 실행 확인
netstat -nlp | grep 5044
키바나 실행
cd ~/prod/elk/kibana-7.15.0-linux-x86_64/bin
./kibana
filebeat 설정 및 실행
/var/log 하위 로그들중 secure, sulog만 수집
vi ~/prod/elk/filebeat-7.15.0-linux-x86_64/filebeat.yml
...
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
# Change to true to enable this input configuration.
enabled: "true"
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/secure
- /var/log/sulog
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["127.0.0.1:5044"]
...
# filebeat 실행
cd ~/prod/elk/filebeat-7.15.0-linux-x86_64
sudo filebeat setup -e
# filebeat 실행확인
systemctl status filebeat.service
# 실행 확인
elasticsearch API 인덱스 목록을 조회하여 확인해보면 filebeat- 를 확인 할 수 있다
키바나 접속
kibana 접속
xxx.xxx.xxx.xxx:5601로 kibana에 접속 한다
좌측 메뉴
Management -> Stack Management -> Index Patterns -> Create index pattern 선택
Index pattern name 부분에 filebeat* 입력 후 Next step 클릭
Time field 부분에 @timestamp 선택 후 Create index pattern 클릭
좌측 메뉴
Analytics -> Discover 을 선택
좌측 fileds를 선택하면 원하는 정보만 확인 가능 하다.