ELK 설치 하고 실습 하기 2 - Kibana 설치

2017. 6. 16. 17:13DB&NoSQL/Elasticsearch,ELK

ELK 설치 하고 실습 하기 2  - Kibana 설치

아래 모든 설치 전에 사전에 java 최소 버전은 8이어야 한다고 당부 . 

*주의!!! 
이 문서는 ELK에 있는 getting started Guide을 되는대로 번역을 해 놓은 것입니다. (장담할수없어요.. 참고만 하세요)
    • 설치 
      • 다운로드 : https://www.elastic.co/downloads/kibana
      • 설치가이드 : https://www.elastic.co/guide/en/kibana/current/getting-started.html
        • Load a sample data set into Elasticsearch
        • Define an index pattern
        • Explore the sample data with Discover
        • Set up visualizations of the sample data
        • Assemble visualizations into a Dashboard
      • config/kibana.yml 을 열어서 "elasticsearch.url"에 위에서 생성한 Elasticsearch instance로 맞춘다.(기본으로 했으니 맞겠지)
      • bin/kibana.bat 을 실행한다.
      • 브라우저에서 http://localhost:5601 보자 
      • index patterns: please specify a default index pattern 이라고 나옴.
    • Kibana : Loading Sample Data
      • 윌리엄 세익스피어 전체 작품을 적절하게 필드로 파싱한  json
        https://download.elastic.co/demos/kibana/gettingstarted/shakespeare.json

        {
           "index":{
                           "_index":"shakespeare"
                          ,"_type":"act"
                          ,"_id":0
                       }
        }
        {
            "line_id":1
            ,"play_name":"Henry IV"
            ,"speech_number":""
            ,"line_number":""
            ,"speaker":""
            ,"text_entry":"ACT I"
        }

        {
            "line_id": INT,
            "play_name": "String",
            "speech_number": INT,
            "line_number": "String",
            "speaker": "String",
            "text_entry": "String",
        }


      • 무작위로 생성한 가상 계정 세트
        https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip 

        {
            "index":{
                          "_id":"1"
                        }
        }
        {
            "account_number":1
            ,"balance":39225
            ,"firstname":"Amber"
            ,"lastname":"Duke"
            ,"age":32
            ,"gender":"M"
            ,"address":"880 Holmes Lane"
            ,"employer":"Pyrami"
            ,"email":"amberduke@pyrami.com"
            ,"city":"Brogan"
            ,"state":"IL"
        }

        {
            "account_number": INT,
            "balance": INT,
            "firstname": "String",
            "lastname": "String",
            "age": INT,
            "gender": "M or F",
            "address": "String",
            "employer": "String",
            "email": "String",
            "city": "String",
            "state": "String"
        }
        


      • 랜덤으로 생성된 로그 파일들의 세트 
        https://download.elastic.co/demos/kibana/gettingstarted/logs.jsonl.gz 


        {
           "index":
                          {
                             "_index":"logstash-2015.05.18"
                             ,"_type":"log"
                          }
        }
        blablablabla...
        {
            "memory": INT,
            "geo.coordinates": "geo_point"
            "@timestamp": "date"
        }
        


      • 세익스피어 와 로그  데이터 셋을 로드 하기 전에, 우리는 필드에 대한 매핑을 세팅할 필요가 있다.
        매핑은 인덱스안에 문서를 논리적 그룹으로 나누고 ,
        필드의 검색가능성 또는 토큰화 되었는지, 또는 별도의 단어로 분리 되는지 와 같은  필드의 특성들을 명시합니다.

      • 세익스피어 데이터 셋에 매핑을 세팅하기 위해, KIbana에 Dev tools에 Console에서 아래 명령어를 치세요.  
        {
            "line_id":1
            ,"play_name":"Henry IV"
            ,"speech_number":""
            ,"line_number":""
            ,"speaker":""
            ,"text_entry":"ACT I"
        }

        PUT /shakespeare
        {
         "mappings" : {
          "_default_" : {
           "properties" : {
            "speaker" : {"type": "keyword" },
            "play_name" : {"type": "keyword" },
            "line_id" : { "type" : "integer" },
            "speech_number" : { "type" : "integer" }
           }
          }
         }
        }

      • 이 매핑은 데이터 셋에 대한 다음과 같은 특성을 지정합니다.
        • speaker와 play_name 필드가 keyword 필드이기 때문에, 이 둘은 분석되지 않습니다.
          문자열을 싱글 유닛으로 다뤄집니다. 다수의 단어들이 포함되어 있더라도.
        • line_id 와 speech_number 필드는 integer 형입니다.

      • 로그 데이터 셋은 그들의 필드들에 geo_point 타입을 적용함으로써
        로그에서 위도/경도(latitude/longitude) 쌍에 지리적 위치로 레이블을 지정하는 매핑을 요구합니다.

        PUT /logstash-2015.05.18
        {
          "mappings": {
            "log": {
              "properties": {
                "geo": {
                  "properties": {
                    "coordinates": {
                      "type": "geo_point"
                    }
                  }
                }
              }
            }
          }
        }



        PUT /logstash-2015.05.19
        {
          "mappings": {
            "log": {
              "properties": {
                "geo": {
                  "properties": {
                    "coordinates": {
                      "type": "geo_point"
                    }
                  }
                }
              }
            }
          }
        }
        



        PUT /logstash-2015.05.20
        {
          "mappings": {
            "log": {
              "properties": {
                "geo": {
                  "properties": {
                    "coordinates": {
                      "type": "geo_point"
                    }
                  }
                }
              }
            }
          }
        }
        

      • account data 셋은 매핑을 요구하지 않습니다.
        그래서, 이 시점에, 아래 명령으로 데이터 셋을 로드 하는 Elasticsearch bulk를 사용할 준비가 되었습니다. 

        curl -H "Content-Type:application/x-ndjson" -XPOST "localhost:9200/bank/account/_bulk?pretty" --data-binary @accounts.json
        curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary '@shakespeare.json'
        curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/_bulk?pretty' --data-binary '@logs.jsonl'

      • 등록 확인은... 

        GET /_cat/indices?v
        


      • 그럼 아래와 같이 등록된 정보가 잘 나온다고 합니다.

        health status index               pri rep docs.count docs.deleted store.size pri.store.size
        yellow open   bank                  5   1       1000            0    418.2kb        418.2kb
        yellow open   shakespeare           5   1     111396            0     17.6mb         17.6mb
        yellow open   logstash-2015.05.18   5   1       4631            0     15.6mb         15.6mb
        yellow open   logstash-2015.05.19   5   1       4624            0     15.7mb         15.7mb
        yellow open   logstash-2015.05.20   5   1       4750            0     16.4mb         16.4mb


    • Kibana : Define Index Pattern

      • Elasticsearch에 로드된 각각의 데이터 셋은 index pattern을 가지고 있습니다.
      • index pattern은 다수의 지시자들과 매칭할수 있는 optional wildcards를 갖는 문자열 입니다. 
      • 공통로깅에서는 일반적인 인덱스 이름은 날자를 포함합니다. (YYYY.MM.DD 포멧으로)
        5월을 위한 인덱스 패턴은 "logstash-2015-05*" 이 겠죠.
      • management  > index pattern > Add New 
        위의 shakespeare plays 와 financial accounts 같은 데이터 셋은 time-series data를 포함하지 않습니다.
        index contains time-bases evenets box 를 uncheck.(위 데이터셋에 인덱스 패턴을 생성할때)
      • 기본적인 것이지만, 인덱스 패턴을 정의할 때 해당 패턴에 일치하는 인덱스가  Elasticsearch에 존재 해야 함.