Hello World

ELK 요약 본문

Back-End/좋은글

ELK 요약

EnterKey 2016. 5. 4. 14:30
반응형

ELK

  • Elasticsearch + Logstash + Kibana
  • Elasticsearch는 Apache의 Lucene을 바탕으로 개발한 실시간 분산 검색 엔진이며,
  • Logstash는 각종 로그를 가져와 JSON형태로 만들어 Elasticsearch로 전송하고,
  • Kibana는 Elasticsearch에 저장된 Data를 사용자에게 Dashboard 형태로 보여주는 솔루션이다. ELK Architecture
  • http://elastic.co 사이트 오픈소스 제품

장점

  • Google Analytics(GA)의 데이터로 사이트 접속 통계를 구할 경우 원하는 대로 데이터를 획득하기 어렵다.
  • 자체 서버의 모든 로그를 100% 수집할 수 있기 때문에 데이터에 대한 신뢰성이 높다.
  • 파라미터 값별로 통계를 볼 수 있기 때문에 정확한 데이터 분석이 가능하다.
  • 검색엔진(lucene)이 포함되어 있어, 빠르게 데이터를 검색할 수 있다.
  • 모두 오픈소스이며 자유롭게 사용이 가능하다.

사전 준비

  • 로그수집 서버(AWS 추천)
    • aws 접속 key가 있는 경우
    • 윈도우에서 git bash 추천(http://git-scm.com). putty 접속보다 쉬움
  • 리눅스 서버 CentOS 또는 Ubuntu
  • Java 1.7 이상(esp. logstash는 1.8이상 필요)

nginx 설치(샘플용)

sudo yum install nginx -y
sudo service nginx start
curl -i http://localhost
sudo chown -R ec2-user:ec2-user /var/log/nginx /usr/share/nginx/html
echo "<h1>Hello World</h1>" > /usr/share/nginx/html/hello.html

nginx (Optional)

  • CentOS는 yum install nginx 전에 yum install epel-release 필요
  • CentOS 7.x에서 service는 systemctl로 바뀜
### CentOS 7.x
[root@elk1 local]# service nginx start
Redirecting to /bin/systemctl start  nginx.service
[root@elk1 local]# systemctl start nginx
[root@elk1 local]# systemctl stop nginx
[root@elk1 local]# ps -ef | grep nginx
root     17933  9025  0 20:47 pts/0    00:00:00 grep --color=auto nginx

[root@elk1 local]# systemctl start nginx
[root@elk1 local]# ps -ef | grep nginx
root     17952     1  0 20:48 ?        00:00:00 nginx: master process /usr/sbinnginx
nginx    17953 17952  0 20:48 ?        00:00:00 nginx: worker process
nginx    17954 17952  0 20:48 ?        00:00:00 nginx: worker process
root     17956  9025  0 20:48 pts/0    00:00:00 grep --color=auto nginx
[root@elk1 local]#

AWS 포트 설정

  • EC2 Security Groups
  • 외부 접근 포트 추가(inbound)
    • http(80)
    • elasticsearch(9200)
    • kibana(5601)

설치

  • Elasticsearch
  • Kibana
  • Logstash (FluentD로 대치 가능)

  • 버전을 맞춰서 작업하는 것이 좋지만, 최신 버전으로 작업해도 동작함(2016/04/03 현재)

  • 설치 위치 /opt/ 또는 ~/local/ 권장

Elasticsearch 설치

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

Kibana 설치

cd ~/local
wget https://download.elastic.co/kibana/kibana/kibana-4.5.0-linux-x64.tar.gz
tar xvfz kibana-4.5.0-linux-x64.tar.gz
cd kibana-4.5.0-linux-x64
  • elasticsearch 연결(optioanl)
    • config/kibana.yml 파일을 열어서 elasticsearch_url 값을 맞춰줌
bin/kibana

Logstash 설치

cd ~/local
wget https://download.elastic.co/logstash/logstash/logstash-2.3.0.tar.gz
tar xvfz logstash-2.3.0.tar.gz
cd logstash-2.3.0
  • conf 파일 생성
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 {}
}
  • logstash 실행
    # debug
    bin/logstash -f logconf/nginx.conf --debug
    # run
    bin/logstash -f logconf/nginx.conf
    # background run
    nohup bin/logstash -f logconf/nginx.conf &
    

Kibana 통계

시각화(Visualize)

  • Terms(request.raw, clientip.raw, ...) 또는 Filters(request: "/hello.html", ...) 이용해서 차트 생성
  • 테이블, 라인차트, 파이차트, 지도 등 가능
  • 만들어진 차트는 저장 가능

대시보드 만들기

  • 저장된 차트를 한 화면에서 볼 수 있도록 추가, 레이아웃 가능

part 2

Logstash

  • 파라미터 필드 만들기

    filter {
      mutate {
          add_field => {
              "tmp" => "%{request}"
          }
      }
      if [tmp] =~ "\?" {
          mutate {
              split => [
                  "tmp", "?"
              ]
              add_field => {
                  "params" => "%{[tmp][1]}"
              }
          }
          kv {
              field_split => "&"
              source => "params"
              include_keys => [ "category", "utm_source" ]
              prefix => "param_"
          }
      }
    }
    
  • 이미지 제거

    filter {
      if [message] =~ "^#|\.(css|js|ico|png|xml|jpg|JPG|gif|jpeg|eot\?) " {
          drop {}
      }
    }
    
  • useragent 파싱

      useragent {
          source => "agent"
      }
    

Kibana

Filebeat with logstash

  • (Optional)
  • logstash forwarder(deprecated) 의 경량(lightweight) 버전
  • logstash plugin 설치

    cd ~/local/logstash-2.3.0
    ./bin/logstash-plugin install logstash-input-beats
    
  • filebeat 설치

cd ~/local
wget https://download.elastic.co/beats/filebeat/filebeat-1.2.0-x86_64.tar.gz
tar xvfz filebeat-1.2.0-x86_64.tar.gz
cd filebeat-1.2.0-x86_64
# 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

참고

Markdown Files

  • ELK; 오픈소스 데이터 시각화 패키지
  • Node.js
  • IntelliJ 단축키
  • RabbitMQ
  • JS Fullstack MEAN
  • OBS; 맥에서 아프리카 방송하기
  • Docker
  • VirtualBox
  • Hibernate
  • Secure Coding
  • Grunt.js
  • Cloud Foundry
  • aws
  • server.png


출처: http://okdevtv.com/md/#elk/elk.md

반응형
Comments