- coin-pipeliner 네트워크 내에서 kafka-cluster, producer, elk stack 모두 연결 완료
- vega 문법을 이용하여 candle chart visualize
- 현재는 데이터를 읽어들이는 대로 저장하고 시각화 하기 때문에 생명주기 관리가 필요하다. 데이터가 쌓이기만 하는 상황
- flick 의 분석결과 시각화
- 여러 인덱스를 같이 시각화
- 인덱스 생명주기 관리 hot-warm-cold cycle (못할 가능성 농후)
- 커스텀 네트워크 생성 (이미 있으면 Skip)
docker network create coin-pipeliner
- (Optional) 비밀번호 변경
내장된유저 Elastic 의 비밀번호를 변경하고 싶다면
.env 파일의
ELASTIC_PASSWORD 값을 변경
그 외에 KIBANA_SYSTEM_PASSWORD 등도 같이 변경해준다.
ELASTIC_VERSION=8.1.2
## Passwords for stack users
#
# User 'elastic' (built-in)
#
# Superuser role, full access to cluster management and data indices.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
ELASTIC_PASSWORD='changeme'
# User 'logstash_internal' (custom)
#
# The user Logstash uses to connect and send data to Elasticsearch.
# https://www.elastic.co/guide/en/logstash/current/ls-security.html
LOGSTASH_INTERNAL_PASSWORD='changeme'
# User 'kibana_system' (built-in)
#
# The user Kibana uses to connect and communicate with Elasticsearch.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
KIBANA_SYSTEM_PASSWORD='changeme'
- Kafka 실행
https://github.com/coin-pipeliner/Coin-Producer/tree/dev 참고
- ELK 빌드
docker compose build
- ELK 실행
docker compose up # -d
- Elastic Search 에 logstash 와 kibana 가 접근할 수 있는 권한 부여
- Elastic Search 가 정상적으로 bootup 되고 나서 바로 권한을 주어야 logstash 나 kibana 에서 접속할 때 오류가 없다
- logstash 권한 부여 (terminal 에 입력)
- 비밀번호를 바꿨다면 changeme 를 변경해주고 email 도 본인 email
curl -k -u elastic:changeme -X POST "http://localhost:9200/_security/user/logstash_internal?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "changeme",
"roles" : [ "superuser" ],
"full_name" : "logstash internal",
"email" : "이메일@yonsei.ac.kr"
}
'
- kibana 권한 부여
curl -k -u elastic:changeme -X POST "http://localhost:9200/_security/user/kibina_system?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "changeme",
"roles" : [ "superuser" ],
"full_name" : "kibana system",
"email" : "이메일@yonsei.ac.kr"
}
'
- kibana 웹 접속 - localhost:5601
user: elastic
password: changeme (초기)
- coin-producer 로 데이터 적재
- 현재는 btc-krw-날짜 로 index가 만들어짐
- 웹 콘솔 좌측 메뉴바 맨 하단 stack management 에서 저장된 인덱스 확인
데이터 자체를 확인하기 위해서 Discover 탭 클릭
data view 를 만들어야 볼 수 있는데 index 이름 그대로 적어주면 된다
우측 상단에 시간을 적절히 설정하면 데이터를 확인할 수 있다.
시각화를 위해서 Visualize Library 클릭
Custom visualiztion 으로 visualiztion 을 생성한다 (candle 차트 생성을 위해)
우측 에디터에 vega 코드 입력 (vega 는 그래프를 위한 라이브러리)
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"width": 800,
"autosize": {
"type": "fit",
"contains": "padding"
},
"description": "A candlestick chart inspired by an example in Protovis (http://mbostock.github.io/protovis/ex/candlestick.html)",
"data": {
"url": {
"%context%": true,
"%timefield%": "@timestamp",
"index": "_all",
"body": {
"aggs": {
"time_buckets": {
"date_histogram": {
"field": "@timestamp",
"fixed_interval": "1s",
"time_zone": "Asia/Seoul",
"min_doc_count": 0
},
"aggs": {
"high": {
"max": {
"field": "high_price"
}
},
"open": {
"max": {
"field": "opening_price"
}
},
"close": {
"min": {
"field": "trade_price"
}
},
"low": {
"max": {
"field": "low_price"
}
}
}
}
},
"size": 0
}
},
"format": { "property": "aggregations.time_buckets.buckets" }
},
"encoding": {
"x": {
"field": "key",
"type": "temporal",
"title": "Date"
},
"y": {
"type": "quantitative",
"scale": { "zero": false },
"axis": { "title": "Price" }
},
"color": {
"condition": {
"test": "datum.open < datum.close",
"value": "#06982d"
},
"value": "#ae1325"
}
},
"layer": [
{
"mark": "rule",
"encoding": {
"y": { "field": "high.value" },
"y2": { "field": "low.value" }
}
},
{
"mark": "bar",
"encoding": {
"y": { "field": "close.value" },
"y2": { "field": "open.value" }
}
}
]
}