ELK 스택에 NGINX 로그 전송하기

By | 2020년 3월 14일
Table of Contents

ELK 스택에 NGINX 로그 전송하기

JAVA 8 이상이 필요합니다. 설치되어 있지 않으면 여기 를 참조해서 설치합니다.

ELK 스택이 필요합니다. 설치되어 있지 않다면 여기 를 참조해서 설치합니다.

Logstash 설정하기

메모리가 작은 경우, JVM 메모리 설정을 변경해 줍니다.

sudo vi /etc/logstash/jvm.options
......
-Xms256m
-Xmx256m
......
sudo vi /etc/logstash/logstash.yml
......
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d
path.logs: /var/log/logstash
......
sudo vi /etc/logstash/conf.d/logstash-nginx-es.conf
input {
    beats {
        port => 5400
        ssl => false
        # ssl => true
        # ssl_certificate_authorities => ["/etc/elk-certs/elk-ssl.crt"]
        # ssl_certificate => "/etc/elk-certs/elk-ssl.crt"
        # ssl_key => "/etc/elk-certs/elk-ssl.key"
        # ssl_verify_mode => "force_peer"
    }
}

filter {
    grok {
        match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
        overwrite => [ "message" ]
    }
    mutate {
        convert => ["response", "integer"]
        convert => ["bytes", "integer"]
        convert => ["responsetime", "float"]
    }
    # geoip {
    #     source => "clientip"
    #     target => "geoip"
    #     add_tag => [ "nginx-geoip" ]
    # }
    date {
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
        remove_field => [ "timestamp" ]
    }
    useragent {
        source => "agent"
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "weblogs-%{+YYYY.MM.dd}"
        document_type => "nginx_logs"
    }
    stdout { codec => rubydebug }
}
sudo systemctl start logstash
sudo systemctl enable logstash

아래 명령으로 logstash 가 실행되고 있음을 확인할 수 있습니다.

netstat -tulpn | grep 5400

gpg key 추가

웹서버가 ELK 서버와 다르면 gpg key 를 추가로 설치해 주어야 합니다.

# gpg key 추가
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# ElasticSearch 7.x 추가
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Filebeat 설치하기

sudo apt update
sudo apt install filebeat
sudo mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.org
sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/*.log
  exclude_files: ['\.gz$']
  # scan_frequency: 10s

output.logstash:
  hosts: ["172.31.31.196:5400"]
  # ssl.certificate_authorities: ["/etc/elk-certs/elk-ssl.crt"]
  # ssl.certificate: "/etc/elk-certs/elk-ssl.crt"
  # ssl.key: "/etc/elk-certs/elk-ssl.key"
sudo systemctl start filebeat
sudo systemctl enable filebeat

에러가 발생하면 아래의 명령으로 로그를 확인할 수 있습니다.

tail -n 100 /var/log/syslog

답글 남기기