ELK란?
https://captcha.tistory.com/44
ELK는 위 그림과 같이, 분석 및 저장 기능을 담당하는 ElasticSearch, 수집 기능을 하는 Logstash, 이를 시각화하는 도구인 Kibana의 앞글자만 딴 단어이다. ELK는 접근성과 용이성이 좋아 최근 가장 핫한 Log 및 데이터 분석 도구이다.
쉽게 설명하면 logstash로 데이터를 가져올 길을 만들고, elasticsearch로 예쁘게 저장하고, kibana로 시각화해서 보여준다고 생각하면 될 거 같다.
1. ELK docker를 띄우기 위한 세팅
여기서는 docker-compose를 이용해 각 서비스를 도커로 띄울것이다.
물론 로컬 컴퓨터에 설치해서 사용해도 되지만, 도커를 쓰는게 훨씬 편함!
우리는 configuration만 설정해주면 뚝딱하고 대시보드를 만들 수 있다.
ELK에서 제공하는 기본 소스를 다운받자. 여기서 config등을 참고 할 수 있다.
https://github.com/deviantony/docker-elk
2. docker-compose.yml 파일 작성
- ELK_VERSION은 .env파일에 정의
ELK_VERSION=7.14.1
- docker-compose.yml
version: '3.6'
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
container_name: elasticsearch
environment:
ES_JAVA_OPTS: "-Xmx8g -Xms8g"
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- elk
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
container_name: logstash
environment:
LS_JAVA_OPTS: "-Xmx2g -Xms2g"
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
- type: bind
source: ./mydata
target: /usr/share/mydata
ports:
- "5000:5000/tcp"
- "5000:5000/udp"
- "9600:9600"
networks:
- elk
depends_on:
- elasticsearch
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
container_name: kibana
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
volumes:
elasticsearch:
3. Logstash Config 설정
~/logstash/pipline/logstash.conf
위의 docker-compose.yml에서 Logstash부분에 mydata폴더를 /usr/share/mydata 폴더로 바인딩 해두었다.
아래처럼 데이터 위치를 작성하여 폴더 안의 모든 csv파일을 읽어와보자!
또한 csv파일에 Year, Week, Count, Time Stamp 이렇게 4개의 컬럼이 있다고한다면,
filter 부분에서와 같이 colums를 통해 정의해주면 된다.
input {
# 각 서비스들이 사용할 포트 정의해주기
beats {
port => 5044
}
tcp {
port => 5000
}
# 데이터 위치 정의해주기
file {
path => ["/usr/share/mydata/*.csv"]
start_position => "beginning"
sincedb_path => "/dev/null"
codec => plain{ charset => "UTF-8" }
}
}
filter {
csv {
separator => ","
columns => [
"Year","Week","Count","Time Stamp"
]
skip_empty_columns => "true"
skip_header => "true"
}
mutate {convert => ["Week","string"]}
mutate {convert => ["Year","string"]}
mutate {convert => ["Count","string"]}
# 기존 값을 묶어 새로운 Field 생성하기
mutate {add_field => {"year-week" => "%{Year}-%{Week}"}}
mutate {convert => ["year-week","string"]}
# 시간 타입의 데이터를 특정 포맷으로 읽어오기
date { match => ["Time Stamp", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss"]}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index => "myindex"
}
# 로그 볼 수 있도록
stdout {
codec => rubydebug
}
}
logstash/config/logstash.yml
## Default Logstash configuration from Logstash base image.
## https://github.com/elastic/logstash/blob/master/docker/data/logstash/config/logstash-full.yml
#
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
config.reload.automatic: true
config.reload.interval: 3s
## X-Pack security credentials
#
xpack.monitoring.enabled: true
#xpack.monitoring.elasticsearch.username:
#xpack.monitoring.elasticsearch.password:
4. Elasticsearch config 설정
---
## Default Elasticsearch configuration from Elasticsearch base image.
## https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/elasticsearch.yml
#
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
discovery.type: single-node
## X-Pack settings
## see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html
#
xpack.license.self_generated.type: basic
xpack.security.enabled: false
xpack.monitoring.collection.enabled: false
5. Kibana 설정
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.shardTimeout: 30000
kibana.autocompleteTerminateAfter: 10000000
#monitoring.ui.container.elasticsearch.enabled: true
## X-Pack security credentials
6. 백그라운드로 도커 서비스 실행하기
sudo docker-compose down
sudo docker-compose --env-file .env up -d
여기까지 했으면 http://localhost:9200을 통해 Kibana 대시보드에 접속할 수 있다.
Kibana는 시각화를 간단하게 해줄 수 있는 툴들을 제공하기 때문에 쉽게 내가 원하는 형식의 대시보드를 만들 수 있다~
'Study > 프로그래밍' 카테고리의 다른 글
vscode로 arguments세팅 config 예시 (0) | 2021.11.04 |
---|---|
virtualenv를 이용해 특전 버전 python 가상 환경 만들기 (0) | 2021.10.20 |
마크다운 쉽게 쓰기 (0) | 2021.03.24 |
github 에 PR메세지 포맷 설정하기 (0) | 2021.03.17 |
CircleCi에서 Slack으로 알림 보내기 (0) | 2021.02.22 |
댓글