참고용으로 보시는걸 추천합니다! 후에 다시 정리해서 올리겠습니다!
ELK를 사용한 로그 모니터링 시스템 만들기
- 로그를 생성하는 서버들에 Filebeat를 설치하고, 로그를 집계할 서버에 ELK를 설치한다.
- Filebeat에서 LogStash로 로그를 전송하고 LogStash에서 한번 필터링을 거친 로그들이 ElasticSearch에 저장된다.
- 저장 된 로그는 Kibana를 통해서 시각화하여 볼 수 있다.
로그스태시란?
모든 로그정보를 수집하여 하나의 저장소(DB, Elasticsearch 등)에 출력해주는 시스템
오픈소스 데이터 수집 엔진으로, 실시간 파이프라인 기능을 갖춘 시스템으로, 다양한 입력차원에서 데이터를 수집 및 분석, 가공 및 통합해 다양한 목적지에 저장하는 파이프라인을 구출할 수 있다.
ElasticSearch 설치
brew install elasticsearch
설치 확인
curl -X GET "localhost:9200/"
Kibana 설치
brew install kibana
#server.host 외부에서 접근하기 위하여 0.0.0.0 으로 설정
server.host: "0.0.0.0"으로 수정해야함
server.post : 5601 주석 제거
elasticserarch.host: ["http://localhost:9200"] 주석 제거
설치 확인
curl -v [Log 수집 서버 IP]:5601 ( 로컬일 경우 127.0.0.1)
LogStash 설치
brew install logstash
logstash -f pipeline.conf
input {
beats {
port => "5044"
}
}
# grok 필터를 활용하여 엑세스로그 한줄을 아래처럼 파싱
# 필터는 apache의 로깅 설정에 의해 만들어지는 파일의 포멧에 맞추어 설정.
filter {
grok {
match => { "message" => ["%{IPORHOST:clientip} (?:-|%{USER:ident}) (?:-|%{USER:auth}) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{NOTSPACE:uri}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:bytes}) (?:-|%{NUMBER:bytes2})( \"%{DATA:referrer}\")?( \"%{DATA:user-agent}\")?"] }
remove_field => ["timestamp","@version","path","tags","httpversion","bytes2"]
}
}
# elasticsearch에 인덱싱 하겟다는 의미
# index 이름에 날짜 형태로 적어주면 인덱싱 하는 시점의 시간에 따라 인덱싱 이름이 자동으로 변경
output {
elasticsearch {
hosts => [ "{elasticsearch ip}:9200" ]
index => "index-%{+YYYY.MM}"
}
}
Elastic Search Logstash logs
- filebeat 설치
curl -L -O <https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-darwin-x86_64.tar.gz> tar xzvf filebeat-7.8.1-darwin-x86_64.tar.gz
cd filebeat-7.8.1-darwin-x86_64/
- filebeat.yml 수정
output.elasticsearch:
hosts: ["<es_url>"]
username: "elastic"
password: "<password>"
setup.kibana:
host: "<kibana_url>"
- logstash 모듈 활성화 및 구성
/filebeat modules enable logstash
- Filebeat 시작
./filebeat setup
./filebeat -e
Nginx
brew install nginx
nginx의 access.log를 위한 파이프 라인
logstash -f pipeline.conf
input {
file {
type => ngnix_access
path => ["/usr/local/Cellar/nginx/1.19.3/logs/access.log"]
}
}
filter {
grok {
match =>{"message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch { hosts => ["192.168.0.134:9200"] }
stdout { codec => rubydebug }
}
elasticsearch 조회
엘라스틱서치에서 어디에 어떻게 저장되는지 알기 위한 명령어
curl -XGET 'localhost:9200/_cat/indices?v'
'개발' 카테고리의 다른 글
[Git] Please use a personal access token instead. (0) | 2021.08.17 |
---|---|
[Mac] nGrinder란? , 설치 및 부하 테스트 해보기 (0) | 2021.01.29 |
코드 컨벤션 (0) | 2020.10.08 |
[Intellij] No tasks available when executing JUnit runner class (0) | 2020.10.07 |
[Intellij] error: please select Android SDK (0) | 2020.09.29 |