일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MySQL
- elasticsearch
- Spring Batch
- jenkins
- linux
- Spring
- AWS
- Spring Boot
- springboot
- Design Patterns
- IntelliJ
- jsp
- ubuntu
- redis
- Git
- 요리
- devops
- Oracle
- php
- JVM
- javascript
- Gradle
- Web Server
- laravel
- java
- 맛집
- it
- tool
- ReactJS
- db
- Today
- Total
아무거나
ELK 설치 본문
logstash (https://www.elastic.co/kr/products/logstash)
Logstash
"Logstash는 오픈소스 서버측 데이터 처리 파이프라인으로, 다양한 소스에서 동시에 데이터를 수집(Ingest)하여 변환한 후 자주 사용하는 "스태쉬(Stash)-보관소"로 보냅니다. (여기서는 당연히 Elasticsearch입니다.)"
현재 설명하고자하는 기본 목적은 로그분석 [ CloudFront Access Log ]를 기반으로 합니다.
Logstash보다 데이터 수집에 목적을 맞춰 경량화 및 다양한 제품으로 구성된 Beats가 있으며 Filebeat, Metricbeat, Packetbeat, Winlogbeat, Heartbeat가 있습니다.
파이프라인으로 Input plugins, Output plugins, Filter plugins, Codec plugins을 다양한 조합으로 사용할 수 있습니다.
[logstash config]
input{
file {
path => "/home/logs/cafe-cf-access-log/*"
type => "cloudfront"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter{
if [type] == "cloudfront" {
if ( ( [message] =~ "#Version: 1.0" ) or ( [message] =~ "#Fields: date" )) {
drop {}
}
}
grok {
match => { "message" => "%{DATE_EU:date}\t%{TIME:time}\t%{WORD:x_edge_location}\t(?:%{NUMBER:sc_bytes}|-)\t%{IPORHOST:c_ip}\t%{WORD:cs_method}\t%{HOSTNAME:cs_host}\t%{NOTSPACE:cs_uri}\t%{NUMBER:sc_status}\t%{GREEDYDATA:referrer}\t%{GREEDYDATA:User_Agent}\t%{GREEDYDATA:cs_uri_stem}\t%{GREEDYDATA:cookies}\t%{WORD:x_edge_result_type}\t%{NOTSPACE:x_edge_request_id}\t%{HOSTNAME:x_host_header}\t%{URIPROTO:cs_protocol}\t%{INT:cs_bytes}\t%{GREEDYDATA:time_taken}\t%{GREEDYDATA:x_forwarded_for}\t%{GREEDYDATA:ssl_protocol}\t%{GREEDYDATA:ssl_cipher}\t%{GREEDYDATA:x_edge_response_result_type}" }
}
mutate {
gsub => [ "%{User_Agent}", "\%2520\g", " " ]
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "listener_timestamp", "%{date} %{time}" ]
}
date {
match => [ "listener_timestamp", "yy-MM-dd HH:mm:ss" ]
timezone => "Asia/Seoul"
}
grok{
match => { "listener_timestamp" => "%{TIME:t_time}" }
}
useragent {
source => "User_Agent"
target => "useragent"
}
geoip {
source => "c_ip"
target => "geoip"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float"]
split => ["t_time", ":"]
add_field => {
"group_time" => "%{t_time[0]}"
}
}
if [referrer] {
grok {
match => { "referrer" => "%{URIPARAM:referrer_querystring}" }
tag_on_failure => []
}
mutate {
gsub => [ "referrer_querystring", "\?", "" ]
}
kv {
source => 'referrer_querystring'
field_split => '&'
target => 'referrer_queryparams'
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "cloudfront"
}
stdout { codec => rubydebug }
}
ElasticSearch (https://www.elastic.co/kr/products/elasticsearch)
"Elasticsearch는 점점 많은 문제를 해결하는 분산형 RESTful 검색 및 분석 엔진입니다."
Logstash로 받은 Data를 저장, Kibana를 통한 Data 시각화를 도와준다.
geoip 및 시간대 별 Grouping을 위해서 다이나믹템플릿을 사용하지 않고 별로도 정의된 템플릿을 사용한다.
추후 성능을 위해서 template을 튜닝해야한다.
[ElasticSearch template]
curl -XPUT 'localhost:9200/_template/cloudfront?pretty' -d'
{
"template" : "cloudfront",
"mappings": {
"cloudfront": {
"properties": {
"geoip": {
"properties": {
"location": {
"type": "geo_point"
}
}
},
"group_time": { "type": "integer" }
}
}
}
}'
Kibana
"Kibana는 Elasticsearch 데이터를 시각화하고 Elastic Stack의 탐색을 지원"
데이터를 정제/시각화 하는 역활을 하며 다양한 기능들을 가지고 있다.
Grouping될수 있는 Type은 날짜, 숫자 유형이 가능하며 Range은 날짜, 숫자, IPv4가 가능하다.
유의사항
root 계정으로 설치/실행하지 말 것
host 설정은 0.0.0.0으로 설정할 것
보안을 위해서는 x-pack을 설치해야하나 비용이 발생
x-pack을 사용하지 않을 경우
대외 오픈을 하지 않을 것
대외 오픈을 해야 할 경우 getaway를 통해 오픈할 것
kibana를 통해 시각화할 경우 시각화할 대상에 대한 template에 대한 정확한 정의가 필요
설치) https://okdevtv.com/mib/elk/elk5
logstash/ cloudfront log pattern) https://logstash.jira.com/browse/LOGSTASH-1550
logstash/ grok Default pattern ) https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
'Data Store > Elastic Stack' 카테고리의 다른 글
데이터 업데이트(UPDATE) (0) | 2019.05.07 |
---|---|
데이터 입력 조회 삭제(GET, POST, DELETE..) (0) | 2019.05.07 |
elasticsearch 설치 (0) | 2019.05.03 |
엘라스틱서치 정의 (0) | 2019.05.03 |
elasticsearch5 에러 cannot allocate memory해결 (0) | 2019.05.02 |