반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

Elastic stack 을 활용한 로그 수집 본문

Project 고니/Elastic stack

Elastic stack 을 활용한 로그 수집

닉의네임 2020. 3. 15. 14:02
반응형

Elastic stack 7.6.1 활용한 로그수집

 

[elasticsearch 설치]

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512

shasum -a 512 -c elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512 

tar -xzf elasticsearch-7.6.1-linux-x86_64.tar.gz

cd elasticsearch-7.6.1/

 ======================== Elasticsearch Configuration =========================

cluster.name: revu-logsystem

# ------------------------------------ Node ------------------------------------

# Use a descriptive name for the node:

node.name: log-node

# ---------------------------------- Network -----------------------------------

# Set the bind address to a specific IP (IPv4 or IPv6):

network.host: 0.0.0.0

# --------------------------------- Discovery ----------------------------------

#

# Pass an initial list of hosts to perform discovery when this node is started:

# The default list of hosts is ["127.0.0.1", "[::1]"]

#

discovery.seed_hosts: ["127.0.0.1"]

#

# Bootstrap the cluster using an initial set of master-eligible nodes:

#

cluster.initial_master_nodes: ["log-node"]



[kibana 설치]

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz

curl https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c - 

tar -xzf kibana-7.6.1-linux-x86_64.tar.gz

cd kibana-7.6.1-linux-x86_64/config

vi kibana.yml

 

-------------------- kibana config ------------------

#kibanaserver host ip

#

server.host: "0.0.0.0"

#

elasticsearch.hosts: ["http://localhost:9200"]

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

nohup ./bin/kibana &

 

[logstash 설치]

wget  https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz

tar -xzvf logstash-7.6.1.tar.gz

 

logstash.conf 파일 작성

input {

        beats {

                port => "5044"

        }

}

 

filter {

      grok {

        match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }

        remove_field => ["@version"]

      }

 

 }

 

output {

  elasticsearch {

    hosts => ["http://localhost:9200"]

    index => "access-log-%{+YYYY.MM.dd}"

    # 인덱스 네임을 %{[fields][index_name]} 으로 넘겨받을수 있다 - 비츠로부터 

    #user => "elastic"

    #password => "changeme"

  }

}



실행은 다음과 같이 &연산자를 활용하여 background로 실행하게 한다.

$ bin/logstash -f config/beat-log.conf &

 

logstash -r -f “/home/logstash/test.conf”

앞에서 설명한 -f 명령행 매개변수 외에 -r 플래그도 사용했습니다. 이렇게 하면 Logstash는 구성이 변경되었음을 식별할 때마다 자동으로 구성을 다시 로드합니다. 이것은 특히 개발 중 매우 유용합니다.

 

 

롤오버 인덱스 확인 필요함

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/indices-rollover-index.html#rollover-index-api-path-params

 

[filebeat 설치]

https://www.elastic.co/kr/downloads/beats/filebeat

 

다운 → 압축해제 → 심볼릭링크

$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz

$ tar -zxvf filebeat-7.6.1-linux-x86_64.tar.gz

$ ln -s filebeat-7.6.1-linux-x86_64.tar.gz filebeat

 

filebeat가 실행될때의 설정파일을 작성해준다.

$ cd filebeat

$ vi access_log.yml

 

filebeat.inputs:

- type: log

 enabled: true

 

#인덱스네임을 넘겨줄수 있다

 fields:

   index_name: "my_custom_file_index_name" 

 paths:

   - /~~~/logs/apache/access.log.* # 실제 엑세스 파일의 경로

 tail_files: true # filebeat 시작시점 기준 파일 끝에서부터 로깅을 읽기 시작

 ignore_older: 1m # filebeat 시작시점 기준 1분전의 내용은 무시

 close_inactive: 2m

 clean_inactive: 15m

logging.level: info

logging.to_files: true

logging.files: # filebeat가 실행되면서 남기는 로깅파일 정보. 도큐먼트를 읽어보는것을 추천한다.

 path: /~~~/logs/filebeat

 name: filebeat-log

 keepfiles: 7

 rotateeverybytes: 524288000

output.logstash: # 최종적으로 output 할 logstash의 정보를 입력해준다.

 hosts: ["@.@.@.@:5044"]

 

$ ./filebeat -c gc_log.yml -d publish &

 

filebeat를 서버에다 설치를 해보자

 

자바가 설치 되어있나 보까

 

java -version

java 

 

apt-get install -y openjdk-9-jdk

 

염병 서버 ㅅㅂ 이것도 없네

sudo apt install -y openjdk-9-jre-headless

 

sudo mkdir /elastic

sudo chown ubuntu.ubuntu /elastic/ -R

 

cd /elastic

 

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz

tar -zxvf filebeat-7.6.1-linux-x86_64.tar.gz

 

cd filebeat-7.6.1-linux-x86_64/

 

cp -af filebeat.yml access-log.yml

chmod go-w /elastic/filebeat-7.6.1-linux-x86_64/access-log.yml

 

 ./filebeat -c access-log.yml -d publish &

 

Exiting: error unpacking config data: more than one namespace configured accessing 'output' (source:'app-log.yml')

 

sudo apt-get update

 

 

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {

        beats {
                port => "5044"
        }

}

filter {
      grok {
        match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }
        remove_field => ["@version","agent","input","tags","cloud","ecs","log"]
      }

 }

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[fields][index_name]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }

 

 

input {

        beats {

                port => "5044"

        }

 

}

 

filter {

      grok {

        match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }

        remove_field => ["@version"]

      }

 

 }

 

output {

  elasticsearch {

    hosts => ["http://localhost:9200"]

    index => "access-log-%{+YYYY.MM.dd}"

    #user => "elastic"

    #password => "changeme"

  }

}

 

반응형
Comments