반응형
Nginx로그를 Filebeat으로 수집할때 Filebeat에 Nginx Mode가 있어 자동으로 패턴을 분석해줍니다.
하지만 OSS버전의 Filebea로는 잘 적용되지 않았습니다.
그래서 Filebeat로그를 Logstash로 받아 Logstash에서 패턴을 매칭한다음 AWS Elasticsearch에 저장했습니다.
우선 Filebeat 설정을 OSS Logstash에 맞게 변경해줍니다.
아래는 제 filebeat.yml 예시입니다.
logging.metrics.enabled: false
filebeat.inputs:
- type: log
enabled: true
paths:
- '/var/log/nginx/access.log*'
fields:
server_name: nginx
log_type: nginx
fields_under_root: true
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
output.logstash:
hosts: ["my logstash url:5044"]
setup.ilm.enabled: false
setup.ilm.check_exists: false
setup.template.settings:
index.number_of_shards: 1
다음으로 Logstash 에 필터를 넣어 줍니다.
저는 'log_type'이라는 custom filed를 넣어주고 구분을 했습니다.
filter {
if [log_type] == "nginx" {
grok {
match => {
"message" => ["%{IPORHOST:clientip} (?:-|(%{WORD}.%{WORD})) %{USER:ident} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:client-agent} %{QS:forwarder}"]
}
}
}
}
아래는 logstash.conf 전체 예시 입니다.
input {
tcp {
port => 5000
codec => json_lines
}
beats {
port => 5044
}
}
filter {
if [log_type] == "nginx" {
grok {
match => {
"message" => ["%{IPORHOST:clientip} (?:-|(%{WORD}.%{WORD})) %{USER:ident} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:client-agent} %{QS:forwarder}"]
}
}
}
}
output {
if [log_type] and [server_name]{
elasticsearch {
hosts => ["https://aws-elasticsearch-url.ap-northeast-2.es.amazonaws.com:443"]
ssl => true
index => "log-%{[server_name]}-%{[log_type]}-%{+YYYY.MM.dd}"
user => ""
password => ""
ilm_enabled => false
manage_template => false
}
} else if [appname] and [profile]{
elasticsearch {
hosts => ["https://aws-elasticsearch-url.ap-northeast-2.es.amazonaws.com:443"]
ssl => true
index => "log-%{[appname]}-%{[profile]}-%{+YYYY.MM.dd}"
user => ""
password => ""
ilm_enabled => false
}
} else {
elasticsearch {
hosts => ["https://aws-elasticsearch-url.ap-northeast-2.es.amazonaws.com:443"]
ssl => true
index => "logstash-%{+YYYY.MM.dd}"
user => ""
password => ""
ilm_enabled => false
}
}
}
728x90
'DevOps' 카테고리의 다른 글
[Jenkins 다중서버 무중단 배포 2/5] 서버 등록 (0) | 2021.10.30 |
---|---|
[Jenkins 다중서버 무중단 배포 1/5] Jenkins 설치 (0) | 2021.10.30 |
AWS Elsticsearch Nginx 로그 수집 (0) | 2021.10.15 |
AWS Elasticsearch Index 자동삭제로 용량 관리 (1) | 2021.10.15 |
AWS Elasticsearch 샤드 제한 (0) | 2021.10.15 |