오브젝트스토리지

[오브젝트 스토리지 활용] 빅데이터 분석 - ELK Stack

ELK Stack이란 무엇인가?


 

ELK Stack  Elasticsearch, Logstash 및 Kibana 세개의 오픈 프로젝트를 합친  ELK 솔루션Beats 를 추가한 솔루션입니다.

Elasticsearch 는 분석 및 저장 기능 , Logstash 는 수집 및 재가공 , Kibana는 시각화 탐색 및 실시간 분석을 담당하며 ,  이를 통해 접근성과 편리성을 갖춘 데이터 분석을 제공합니다.

ELK Stack를 활용하여 로그를 효율적으로 관리하고 iwinv obejct백업 저장소로 사용하여 백업 , 복원등을 원할하게 할 수 있습니다 .

 

 

 

 

 

ELK Stack 설치하기   


  로그 생성 서버 ( Elasticsearch , Logstash , Kibana 설치   )  1대  , 로그 수집 서버( File beat 설치) 1대로  구성하였으며 , 각 각 Ubuntu 18.04 , CentOS7 를 사용하였습니다.  

 * ELK를 한서버에 설치할 경우 메모리는 4GB이상을 권장합니다. 

 * ELK를 설치하려면 Java가  설치되어 있어야 합니다. ( 메뉴얼에서는 openJDK 8로 진행)

 

 

 

# 로그 생성 서버 #

 

Elasicsearch 설치 

파일 다운로드

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.deb

 

설치 

sudo dpkg -i elasticsearch-6.6.2.deb

 

환경설정

sudo vi /etc/elasticsearch/elasticsearch.yml

network.host : 0.0.0.0

해당 줄 주석 해제바인딩 할 ip 주소 설정 (모두 허용시 0.0.0.0 )

 

 

서비스 등록 및 시작 

sudo systemctl enable elasticsearch.service

sudo systemctl start elasticsearch.service

 

확인 

curl -X GET "localhost:9200/"

{
"name" : "-Cltmk8",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ybW6tLeSSM2yfAoKnupcWg",
"version" : {
"number" : "6.6.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "3bd3e59",
"build_date" : "2019-03-06T15:16:26.864148Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

 

Logstash 설치

 

파일 다운로드

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.2.deb

 

설치 

sudo dpkg -i logstash-6.6.2.deb

 

 

환경설정

sudo vi /etc/logstash/conf.d/filebeat.conf   ( 원하는 이름으로 config파일 생성)

input {
beats {
port => 5044
}
}

filter {
if [fields][log_type] == "nginx_access" {
grok {
match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\"\"%{DATA:[nginx][access][agent]}\""] }
remove_field => "message"
}
mutate {
add_field => { "read_timestamp" => "%{@timestamp}" }
}
date {
match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
remove_field => "[nginx][access][time]"
}
useragent {
source => "[nginx][access][agent]"
target => "[nginx][access][user_agent]"
remove_field => "[nginx][access][agent]"
}
geoip {
source => "[nginx][access][remote_ip]"
target => "[nginx][access][geoip]"
}
}
}

output {
if([fields][log_type] == "nginx_access") {
elasticsearch {
hosts => ["localhost:9200"]
index => "access-log-%{+YYYY.MM.dd}"
}
}
else if([fields][log_type] == "nginx_error") {
elasticsearch {
hosts => ["localhost:9200"]
index => "error-log-%{+YYYY.MM.dd}"
}
}
else if([fields][log_type] == "laravel") {
elasticsearch {
hosts => ["localhost:9200"]
index => "laravel-log-%{+YYYY.MM.dd}"
}
}
}

 


서비스 등록 및 시작 

sudo systemctl enable logstash.service

sudo systemctl start logstash.servic

 

 

Kibana 설치

파일 다운로드

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-amd64.deb

 

설치 

sudo dpkg -i kibana-6.6.2-amd64.deb

 

환경설정

sudo vi /etc/kibana/kibana.yml

server.host : "0.0.0.0"

elasticsearch.url : "http://elasticsearch_server_address:9200"

server.host - 바인딩할 ip주소를 설정합니다.

elasticsearch를 설치한 서버 ip를 넣어줍니다. ( 기본포트 9200 )

 


서비스 등록 및 시작 

sudo systemctl enable kibana.service

sudo systemctl start kibana.service

 

확인 

curl -v  [로그 수집 서버 IP] :5601
* Rebuilt URL to: 127.0.0.1:5601/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 5601 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:5601
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 302 Found
< location: /app/kibana
< kbn-name: kibana
< kbn-xpack-sig: 5c22340e091aef783cf686b3daaee8eb
< content-type: text/html; charset=utf-8
< cache-control: no-cache
< content-length: 0
< connection: close
< Date: Tue, 15 Sep 2020 06:00:03 GMT
<
* Closing connection 0

 

 

 

# 로그 생성 서버 # 

 

File Beat 설치

파일 다운로드

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.2-x86_64.rpm

 

설치 

sudo rpm -vi filebeat-6.6.2-x86_64.rpm

 

환경설정

sudo vi /etc/filebeat/filebeat.yml

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:

#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["로그 수집 서버 IP:5044"]

output.elasticserch 는 주석처리 

output.logstash 주석해제 

기본포트 5044

 


서비스 등록 및 시작 

sudo systemctl enable filebeat.service

sudo systemctl start filebeat.service

 

모듈 설치 및 설정 (apache 모듈 활성화)

모듈 목록 확인 

filebeat module list

filebeat modules list
Enabled:

Disabled:
apache
system
auditd
aws
azure
...............


   apache 모듈 활성화하기 

filebeat modules enable apache

 

모듈 목록 재확인 하기  

filebeat module list

filebeat modules list
Enabled:
apache

Disabled:
system
auditd
aws
azure
...............

 

모듈 설정파일 수정 

sudo vi /etc/filebeat/modules.d/apache.yml

- module: apache
# Access logs
access:
enabled: true
input:
fields:
server_name: test-web
log_type: apache_access
var.paths: ["/var/log/httpd/access_log"]

# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:

# Error logs
error:
enabled: true
input:
fields:
server_name: test-web
log_type: apache_error
var.paths: ["/var/log/httpd/error_log"]

# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:

 

 

ELK Stack 사용하기 


 

 

 Kibana 웹 접속하기

http:// [로그 수집 서버]:5601 로 접속 

  

 

 

index pattrn 설정

 management  메뉴 클릭 후 Create index pattren 클릭  logtash* 입력 후 next  step 클릭

 

 

 

 

 time filter 에서 @timestamp를 선택 후 , Create Index Pattern 클릭

 

 

 

 로그확인 

Logs 메뉴 선택시 수집 된 로그를 확인할 수 있습니다. 

 

 

 

 

discover 메뉴를 통해 filter별 데이터 검색할수 있습니다. 

 

 

 

 

 

백업 및 복원하기 ( iwinv 오브젝트 스토리지 활용)


 

먼저 , iwinv 오브젝트 스토리지에서 ELK Stack의 백업저장소로 사용할 버킷생성합니다.  

ELK stack의 스냅샷 기능을 통해 백업파일을 해당 버킷에 저장하고, 해당 백업파일을 이용해 복원이 가능합니다. 

 

 

# 백업  #

 

스냅샷 저장소 생성

 curl -X PUT "localhost:9200/_snapshot/REPOSITORY_NAME?pretty" -H 'Content-Type: application/json' -d'
{
"type": "s3",
"settings": {
"endpoint" : "Endpoint"
"bucket": "Bucket_Name",
"region": "default",
"access_key": "Access_Key",
"secret_key": "Secret_Key"
}
}
'

REPOSITORY_NAME = 생성할 저장소 이름 

Bucket_Name = 저장소로 사용할 버킷명

Endpoint -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> API {IDC} Endpoint 

Access_Key  : console.iwinv.kr -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> Access Key ID

Secret_Key   : console.iwinv.kr -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> Secret Key ID

 

 

스냅샷 찍기

 curl -X PUT "localhost:9200/_snapshot/my-snapshot-repo/SNAPSHOT-NAME?wait_for_completion=true&pretty" -H 'Content-Type:application/json' -d'
{
"indices": "Index_Name",
"ignore_unavailable": true,
"include_global_state": false
}

SNAPSHOT-NAME = 생성할 스냅샷 이름 

Index_Name = 스냅샷을 생성할 인덱스 지정 (  여러개 입력 가능)

 

 

백업 확인 

저장소로 지정한 버킷에 백업 파일 및 indicys 디렉토리가 생성됬는지 확인합니다. 

 

 

 

 

# 복원 #

 

인덱스 목록 확인 

 curl -XGET 'localhost:9200/_cat/indices?pretty'

green open .kibana_1 --mUQ4qxQF2NbQgZJB0rEA 1 0 3 0 20.3kb 20.3kb
yellow open logstash-2020.09.16 1azEZGPsRkqYmd8axjvXCw 5 1 580 0 1.4mb 1.4mb

 

 

인덱스 닫기 

 curl -X POST "http://localhost:9200/Index_Name/_close?pretty"

 해당 인덱스를 닫은 후 인덱스 목록을 재확인하면 해당 인덱스가 사라진것을 확인 할 수 있습니다.  

kibana 웹으로 확인시에도 Log 및 Index-pattern이 사라진것을 확인 할 수 있습니다.

 

 

 

 

복구하기 

 curl -XPOST 'localhost:9200/_snapshot/REPOSITORY_NAME/SNAPSHOT-NAME/_restore'

 

 

인덱스 및 Log 확인 

 복구 후 인덱스 목록을 확인하면 닫았던 인덱스 목록이 다시 나타나며 ,  Kibana 확인시 로그 및 인덱스 패턴이 다시 복구 된것을 확인 할 수 있습니다.