-
ELK 구축 및 Filebeat로 로그 전송🔍 elastic search/💡 elk 2022. 11. 22. 11:23
📌 Docker Compose 로 ELK 구축
ELK 구축
https://github.com/deviantony/docker-elk
mkdir ~/workspace cd ~/workspace git clone https://github.com/deviantony/docker-elk.git
Logstash 파이프라인 설정 추가
Logstash 파이프라인 설정은 logstash/pipeline/logstash.conf 를 수정해주면 된다.
Logstash 파이프라인 설정은 크게 다음의 3단계로 구성된다.
- Input
- Filter
- Output
input { # FileBeat를 통해 로그 수집 beats { port => 5000 host => "0.0.0.0" ssl => false } tcp { port => 4560 codec => json_lines } } ## Add your filters / logstash plugins configuration here filter { grok { match => [ "message", "\\[%{LOGLEVEL:log_level}\\]" ] } } output { # 처리한 로그를 Elastic 서버로 전송 elasticsearch { hosts => "elasticsearch:9200" user => "elastic" password => "changeme" index => "logstash-%{+YYYY.MM.dd}" } }
❓Grok
- 정규표현식을 이용해 원하는 데이터 영역만 추출하는 기능
grok { match => [ "message", "\\[%{LOGLEVEL:log_level}\\]" ] }
로그로 부터 Log Level를 파싱하여 관리하기 위해 사용
- 로그 메세지에서 Log Level를 파싱하여 커스텀 필드인 log_level로 추가하는 부분이 match 부분이다.
Log Level은 (INFO, DEBUG, WARN… 등)을 포함하는 사전에 정의된 패턴
이에 매칭되는 값이 있는 경우 log_level 이라는 필드로 해당 값을 추가
Dokcer Compose 실행
docker-compose build && docker-compose up -d
ELK 컴포넌트
- Elasticsearch : 9200 / 9300
- Logstash : 5000 / 9600
- Kibana : 5601
Kibana에서 로그를 확인하기 위해 먼저 축적되는 로그가 있어야 한다.
- 해당 로그를 기반으로 설정
- 로그를 받아 저장하기 위해 Filebeat를 사용
📁 Filebeat로 로그 전송
Filebeat 설치
$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.0-x86_64.rpm $ rpm -vi filebeat-7.12.0-x86_64.rpm
Filebeat 설정 변경
sudo rm filebeat.yml sudo vi filebeat.yml
// filebeat.yml filebeat.inputs: - type: log enabled: true paths: # 각자의 경로에 맞게 수정 ex) - /Users/beomsic/Documents/study/elk/logs/error/*.log - /home/로그경로... # custom fields가 필요한 경우 추가 fields: env: "dev" project: "project" # multiline 설정 multiline.pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}[[:space:]][0-9]{2}:[0-9]{2}:[0-9]{2}[[:space:]]\\[ multiline.negate: true multiline.match: after setup.kibana: # 각자의 서버 주소:5601로 설정 host: "서버주소:5601" output.logstash: enabled: true # 각자의 서버 주소:5000로 설정 hosts: ["서버주소:5000"]
fields
- fields 하위에는 custom 한 값들을 추가로 넘겨줄 수 있다.
- 위의 코드에서는 현재 로그를 전송하려는 서버의 환경 정보, 프로젝트 명 추가
multiline
- 패턴을 구분자로 하여 여러 라인의 메시지를 1개의 메시지로 인식하도록 처리한다.
- 이런 패턴을 multiline.pattern 으로 추가
- multiline.negate 는 true
- multiline.match 는 after로 주면 된다.
- 이는 같은 패턴이 나올 때 까지 이전 로그에 붙인다는 것을 의미
연결 테스트
- 설정 정보 테스트
filebeat test config
- 연결 테스트
filebeat test output
시작 및 종료
- 로드
filebeat setup -e
- 시작
filebeat run
📌 Kibana 설정 및 모니터링
Kibana 설정
index Pattern 설정
Stack Management → Index Patterns → Create index pattern
- 이때, Elastic으로 전송된 로그가 있어야 한다.
Logstash output 설정에 작성한 인덱스 패턴을 추가.
- Logstash output 설정에서 작성한 elk 로 시작하는 인덱스 패턴의 형태로 로그가 작성된다.
로그 모니터링
Discover 로 이동
→ 로그 확인
참고자료
https://mangkyu.tistory.com/197
https://techblog.woowahan.com/2659/
https://heodolf.tistory.com/23
https://github.com/deviantony/docker-elk
'🔍 elastic search > 💡 elk' 카테고리의 다른 글
ELK 를 통한 사용자 요청에 대한 로그 수집 (0) 2022.11.23