Skip to content

coin-pipeliner/coin-elk

Repository files navigation

ELK Stack on Docker

진행상황

  • coin-pipeliner 네트워크 내에서 kafka-cluster, producer, elk stack 모두 연결 완료
  • vega 문법을 이용하여 candle chart visualize
  • 현재는 데이터를 읽어들이는 대로 저장하고 시각화 하기 때문에 생명주기 관리가 필요하다. 데이터가 쌓이기만 하는 상황

앞으로의 과제

  • flick 의 분석결과 시각화
  • 여러 인덱스를 같이 시각화
  • 인덱스 생명주기 관리 hot-warm-cold cycle (못할 가능성 농후)

실행 방법

  1. 커스텀 네트워크 생성 (이미 있으면 Skip)
docker network create coin-pipeliner
  1. (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'
  1. Kafka 실행

https://github.com/coin-pipeliner/Coin-Producer/tree/dev 참고

  1. ELK 빌드
docker compose build
  1. ELK 실행
docker compose up # -d
  1. 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"
}
'
  1. kibana 웹 접속 - localhost:5601

user: elastic

password: changeme (초기)

  1. coin-producer 로 데이터 적재
  • 현재는 btc-krw-날짜 로 index가 만들어짐
  • 웹 콘솔 좌측 메뉴바 맨 하단 stack management 에서 저장된 인덱스 확인

스크린샷 2022-05-15 오후 9.48.39.png

스크린샷 2022-05-15 오후 9.49.08.png

데이터 자체를 확인하기 위해서 Discover 탭 클릭

data view 를 만들어야 볼 수 있는데 index 이름 그대로 적어주면 된다

스크린샷 2022-05-15 오후 9.49.35.png

우측 상단에 시간을 적절히 설정하면 데이터를 확인할 수 있다.

스크린샷 2022-05-15 오후 9.50.05.png

시각화를 위해서 Visualize Library 클릭

스크린샷 2022-05-15 오후 9.50.33.png

Custom visualiztion 으로 visualiztion 을 생성한다 (candle 차트 생성을 위해)

스크린샷 2022-05-15 오후 9.51.03.png

우측 에디터에 vega 코드 입력 (vega 는 그래프를 위한 라이브러리)

스크린샷 2022-05-15 오후 9.51.56.png

{
  "$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" }
      }
    }
  ]
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published