ELK

장점

사전 준비

sudo add-apt-repository ppa:openjdk-r/ppa

sudo apt-get update
sudo apt-get install openjdk-8-jdk -y

nginx 설치(샘플용)

AWS 포트 설정

설치

Elasticsearch 설치

mkdir ~/local
cd ~/local
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz
tar xvfz elasticsearch-2.4.1.tar.gz
ln -s elasticsearch-2.4.1 elasticsearch
cd elasticsearch
vi config/elasticsearch.yml
  # `# network.host: 192.168.0.1`의 주석을 풀고 `network.host: 0.0.0.0`으로 변경
  # 모든 IP에서 접근 가능
bin/elasticsearch -d
  # 데몬(백그라운드)로 실행. 옵션 -d를 빼면 터미널 접속해 있는 동안만 실행

Kibana 설치

cd ~/local
wget https://download.elastic.co/kibana/kibana/kibana-4.6.1-linux-x86_64.tar.gz
tar xvfz kibana-4.6.1-linux-x86_64.tar.gz
ln -s kibana-4.6.1-linux-x86_64 kibana
cd kibana
bin/kibana
# background run
nohup bin/kibana &

Logstash 설치

cd ~/local
wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz
tar xvfz logstash-2.4.0.tar.gz
ln -s logstash-2.4.0 logstash
cd logstash
mkdir logconf
vi logconf/nginx.conf

logconf/nginx.conf

input {
    file {
        path => "/var/log/nginx/access.log"
        start_position => beginning
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {}
    stdout {}
}

Kibana 통계

시각화(Visualize)

대시보드 만들기

part 2

Logstash config

    # params
    if [request] =~ "\?" {
        kv {
            field_split => "&"
            source => "querystring"
            include_keys => [ "query", "redirectUrl" ]
            prefix => "param_"
        }
    }

geo_point




### Kibana
* 질의어 문법(query syntax)
  * Lucene 검색 엔진의 문법 그대로 사용(https://lucene.apache.org/core/2_9_4/queryparsersyntax.html)
* `request: "uri"`
* 제외 `-device : "Spider"`

### elasticsearch
* 데이터 지우기
  * `curl -XDELETE http://localhost:9200/logstash*`



## Filebeat with logstash
* (Optional)
* logstash forwarder(deprecated) 의 경량(lightweight) 버전
* logstash plugin 설치

cd ~/local/logstash ./bin/logstash-plugin install logstash-input-beats


* filebeat 설치

cd ~/local wget https://download.elastic.co/beats/filebeat/filebeat-1.3.1-x86_64.tar.gz ln -s filebeat-1.3.1-x86_64 filebeat cd filebeat

elasticsearch 부분 #으로 주석 처리

elasticsearch:

#hosts: ["localhost:9200"]

logstash 부분 # 주석 해제

logstash: hosts: ["localhost:5044"]

filebeat.yml 내용 중 로그 위치 변경 /var/log/nginx/*.log



* logconf/nginx.conf 파일 변경

input { beats { port => 5044 } } filter { grok { match => [ "message", "%{COMBINEDAPACHELOG}", "message", "%{COMMONAPACHELOG}" ] } geoip { source => "clientip" } } output { elasticsearch { hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }


./filebeat -e -c filebeat.yml


* start shell

echo "nohup ./filebeat -e -c filebeat.yml &" > start.sh chmod +x start.sh ./start.sh



## ELK with PM2
* 2G짜리 메모리의 인스턴스에서 ELK를 돌리면 OutOfMemory 때문에 종종 Elasticsearch 또는 Kibana가 죽습니다. 
* 고육지책으로 Kibana는 node 기반이기 때문에 pm2로 Kibana가 죽으면 자동으로 살리는 방법입니다.

* download from http://nodejs.org and install node.js

npm install -g pm2 cd ~/local/kibana pm2 start bin/cli

* check kibana status with `pm2 list`
* pm2 logs path is placed in ~/.pm2/logs

## kibana 인증 with nginx

sudo vi /etc/nginx/nginx.conf

* `server_name:` 아래 kibana 프록시 설정
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
            proxy_pass http://localhost:5601;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }

```

참고

What Else?