본문 바로가기

카테고리 없음

filebeat->logstash->elasticsearch 실습

#인풋 --> 파일비트
filebeat.inputs

type: log
enabled: true #수집할 파일이 log type이라면 true로 변경

paths: #수집할 로그의 경로

#아웃풋 --> 엘라스틱서치
output.elasticsearch

hosts: ["엘라스틱서치ip:9200"]
ex. 127.0.0.1:9200

# username:
# password: 
도 필요함

#filebeat 실행하기
cd ~/prod/elk/filebeat-7.15.0-linux-x86_64
./filebeat

#kibana 페이지 접속하기
http://localhost:5601/app/dev_tools#/console

#filebeat 내용 확인하기
GET filebeat-*/_search

#filebeat 로그 몇개나 들어갔는지 확인하기
GET filebeat-*/_count

이렇게 filebeat에서 수집은 빠르게 됨 elasticsearch로 바로 보낼 순 있지만,
파싱을 못함 필터를 태워서 보내야 보다 정제된 데이터를 만들 수 있음. (logstash 필요 이유)

-----------------------------------------------------------------------

cd /home/hyper/prod/elk/filebeat-7.15.0-linux-x86_64/
vi filebeat.yml

#1 elasticsearch 주석처리
output.elasticsearch 모두 주석처리

#2 logstash 부분 주석해제
output.logstash
hosts: ["127.0.0.1:5044"]

# logstash가 beats를 입력받게끔 수정
cd /home/hyper/prod/elk/logstash-7.15.0/
vi workshop.conf

input {
    beats{
        port => 5044
    }
}

주의) agent라는 필드가 사실 beats에서 agent 필드도 저장해서 보냄 즉, beats가 수집한 내 localhost정보임
그정보가 중복이 나기때문에 최종적으로 useragent 실행시에 오류가 발생할 수 있음
그러므로, grok를 실행하기 전에 agent 필드를 지워줄 것임(mutate.remove_field)

filter{
    # 추가!
    mutate {
remove_field => ["agent"]
    }
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
    }

...

cf) stdout을 띄우면 데이터가 엄청 많이 들어감 / 데이터가 들어가는걸 확인은 하지만, 너무 많은 내용을 보고 싶지 않을때, 쓰는 것
codec -> rubydebug 코덱을 사용 / dots --> 하나의 이벤트당 점으로 표현
output {
stdout {
codec => "dots"
         # codec => "rubydebug"
# codec => "json"
}
...



# logstash 실행
./bin/logstash -f workshop.conf

# filebeat 실행전 주의
# 지금까지 읽었던 파일은 안 읽음, 지금까지 읽었던 플래그를 지워줌 플래그는 data 디렉토리 안에 있음. 이를 삭제해야 함
# 안하고 실행할 시에는 수집이 안됨
cd ~/prod/elk/filebeat-7.15.0-linux-x86_64
ls data/
rm -fr data/

# filebeat 실행
cd ~/prod/elk/filebeat-7.15.0-linux-x86_64
./filebeat



# filter 마지막 단에 불필요한 녀석 지우기
    mutate {    # 불필요한 녀석들 지우기
        remove_field => ["timestamp", "host", "@version", "agent"] #일반 타임스탬프, 로그스태시가 찍은 호스트 정보, @version, agent도 받고 가공했기때문에
    } 

#인덱스 이름 지정하기(elasticsearch.index)
elasticsearch {
        index => ["apachelog-%{+yyyy.MM.dd}"]    # 인덱스 이름을 저장할 수 있음
        hosts => ["127.0.0.1:9200"]
}


.... <-- dots가 생성된다는 것은 filebeat에서 보내서 logstash가 받고 있는 것


logstash가 elasticsearch로 잘보내는지 확인할 것
http://localhost:5601/app/dev_tools#/console

GET _cat/indices/apachelogs*
#아파치로그가 날짜별로 생성되는 것을 확인할 수 있음.

#Elasticsearch는 *(아스트리크)를 이용해서 멀티테넌시를 지원 / 여러 인덱스를 한꺼번에 묶어서, 검색하는 것이 가능
# 7.x 버전의 경우, 카운트가 제대로 안잡힘
GET apachelog-*/_search

#로그 갯수를 확인하려면 _count를 이용하여, 확인이 가능
GET apachelog-*/_count