'kibana'에 해당되는 글 33건

  1. 2017.02.09 [Kibana] Unique Count 사용 시 threshold 스크립트 추가.
  2. 2017.02.01 [Kibana] Metric 내 script 사용 예제
  3. 2016.11.21 [Kibana] Date Histogram Advanced DSL
  4. 2016.04.14 [Kibana] document_already_exists_exception 에러 발생.
  5. 2015.10.01 [Kibana] kibana 를 이용한 모니터링 대쉬보드 사용시 주의 할 점 - Search Thread.
  6. 2015.09.09 [Elastic] Elastic 제품들...
  7. 2015.08.06 [Kibana] Kibana 에서 Index Alias 사용하기
  8. 2015.07.29 [Kibana4.x] Value format 설정하기
  9. 2015.07.29 [Kibana4.x] 생성한 dashboard export & import 하기.
  10. 2015.03.11 로그생성 프로그램 - makelogs

[Kibana] Unique Count 사용 시 threshold 스크립트 추가.

Elastic/Kibana 2017. 2. 9. 12:54

기억력 극복을 위해 또 기록해 봅니다.


elasticsearch의 cardinality aggregation 을 kibana 에서는 unique count 로 사용 합니다.

여기에 정확도 조절을 위해 precision_threshold 를 설정할 수 있는데요.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html


QueryDSL)

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author_hash",
                "precision_threshold": 100 
            }
        }
    }
}



Kibana Script)

{

"precision_threshold":40000

}


위와 같이 사용하시면 됩니다.

주의 하실 부분은 CPU와 Memory 사용에 민감하고 circuit breaker 설정도 확인하셔야 합니다.


:

[Kibana] Metric 내 script 사용 예제

Elastic/Kibana 2017. 2. 1. 17:01

Kibana 에서 visualize 생성 시 metric 영역을 통한 script 사용 초간단 예제 입니다.

참고 하실 문서는 아래 문서 보시면 됩니다.


[참고문서]

https://www.elastic.co/guide/en/kibana/4.6/metric-chart.html


[Script 예제]

{

  "size": 0,

  "query": {

    "filtered": {

      "query": {

        "query_string": {

          "analyze_wildcard": true,

          "query": "*"

        }

      },

      "filter": {

        "bool": {

          "must": [

            {

              "range": {

                "time": {

                  "gte": 1485788400000,

                  "lte": 1485874799999,

                  "format": "epoch_millis"

                }

              }

            }

          ],

          "must_not": []

        }

      }

    }

  },

  "aggs": {

    "2": {

      "terms": {

        "field": "id",

        "size": 5,

        "order": {

          "1": "desc"

        }

      },

      "aggs": {

        "1": {

          "sum": {

            "field": "price",

            "script": "doc['price'].value * doc['count'].value"

          }

        }

      }

    }

  }

}


[Kibana 예제]

"script" : "doc['price'].value * doc['count'].value"

}


:

[Kibana] Date Histogram Advanced DSL

Elastic/Kibana 2016. 11. 21. 10:34

Kibana 를 사용하면서 많이 사용하는 것중 하나가 바로 Date Histogram Aggregation 입니다.

기본 결과에 대한 정렬은 count 에 대한 desc 으로 결과가 전달 되는데요.

날짜에 대한 desc 정렬을 하고 싶은 경우 아래와 같은 스크립트를 추가 하시면 됩니다.


제가 많이 사용하는 스크립트라 매번 타이핑 하기 귀찮아서 올려 봅니다.


{

"field":"time",

"interval":"1w",

  "order": {

    "_key": "desc"

  }

}


- field 값에 time 을 넣은 이유는 @timestamp 를 사용하기 않기 때문 입니다. :)

- order 에 사용 가능한 field 는 

Date Histogram 에서는 _key, _count

Terms 에서는 _term, _count

입니다.


:

[Kibana] document_already_exists_exception 에러 발생.

Elastic/Kibana 2016. 4. 14. 18:10

참 별것도 아닌데 이런것 가지고 삽질 하면 스트레스 받습니다.

그래서 잊지 않기 위해 기록합니다.


보통 elasticsearch 구성 시 default 값을 많이 사용하게 됩니다. 그러다 보니 에러를 자연스럽게 피해가게 됩니다.

뭔소리냐면, refresh_interval 의 경우 default 1s 로 되어 있습니다.


그렇기 때문에 create index 와 create document 를 했을 때 바로 처리가 되는데요.

저 같은 경우는 refresh_interval 을 서비스 특성에 맞춰 변경을 하였습니다. 이로 인해 kibana 설치 및 실행 시 아래와 같은 에러가 발생을 했습니다.


[error][status][plugin:elasticsearch] Status changed from green to red - [document_already_exists_exception] [config][4.5.0]: document already exists, with: {"shard":"0","index":".kibana"}


그래서 이상하다 싶어 .kibana 를 지워주기도 하고 실제 .kibana/config/4.5.0 문서도 지우기도 했는데요. 역시 해결이 안되었습니다. 원인을 refresh_interval 에 있었던 것이죠.


kibana 에서 이건 기본적으로 해당 .kibana 인덱스 생성 시 자동으로 .kibana index settings 에 refresh_interval 을 1s로 해주면 별 문제가 없을 것 같은데.. issue에도 올라와 있는 내용인데 뭐 언젠가 해결해 주겠죠.


이상 마칩니다.

:

[Kibana] kibana 를 이용한 모니터링 대쉬보드 사용시 주의 할 점 - Search Thread.

Elastic/Kibana 2015. 10. 1. 13:56

ELK를 이용해서 매트릭 수집이나 시스템 모니터링 등을 하고 계신 분들이 많은 걸로 압니다.

이미 경험해 보신 분들이 많을 것 같기는 하지만 그래도 공유 차원에서 글 작성해 보겠습니다.


보통 ELK 를 이용해서 데이터를 수집 후 kibana 로 dashboard 구성을 해서 지표를 보게 됩니다.

잘 아시겠지만 kibana의 기본 설정은 logstash-* 로 모든 index를 대상으로 질의를 하게 됩니다.

이와 같은 이유로 시간이 지날 수록 성능이 떨어지고 에러가 발생하게 되는데요.


잘 아시겠지만 elasticsearch 에서의 모든 action 은 thread 단위로 동작 하게 됩니다.

그렇기 때문에 kibana를 이용한 dashboard 를 계속 띄워 놓고 auto refresh 를 사용하게 되면 해당 주기 동안 계속 search request 가 실행 됩니다.


하나의 예를 들어 보면 index 당 shard 크기를 5개로 했다고 가정 하겠습니다. (replica 0)

현재까지 생성된 index 는 30일치 30개 입니다.

그렇다면 총 shard 수는 5 x 30 = 150개가 됩니다.


kibana 를 이용해서 한 화면에 8개의 지표를 볼 수 있는 dashboard를 구성했다고 가정 하겠습니다.

이와 같이 했을 경우 dashboard 에서 실행 되는 질의는 총 8개 입니다.

이 8개의 질의에 대한 elasticsearch에서의 실행 되는 search thread 수는 얼마나 될까요?


8 x 5 x 30 = 1200 개의 search thread 가 실행 되게 됩니다.


이게 무슨 문제를 일으킬 수 있을까요?


elasticsearch에서는 threadpool 설정을 통해서 search thread 크기를 조정 할 수 있습니다.

아래는 ThreadPool.java 의 code snippet 입니다.


defaultExecutorTypeSettings = ImmutableMap.<String, Settings>builder()

....

    .put(Names.SEARCH, settingsBuilder().put("type", "fixed").put("size", ((availableProcessors * 3) / 2) + 1).put("queue_size", 1000).build())

....


위에서 보시는 것 처럼 기본 runnable size 는 (availableProcessors * 3) / 2) + 1 입니다.

그리고 queue_size 는 1000 개로 정해져 있습니다.


CPU가 4 core 라고 가정하면,

runnable thread size = ( ( 4 x 3 ) / 2 ) + 1 = 7

queue thread size = 1000

이와 같습니다.


8개의 지표로 구성된 dashboard를 한번 호출 할 때마다 1200 개의 search request 가 발생을 하게 되고 이 시점에 일부 시스템 리소스가 부족하게 된다면 해당 elasticsearch 로 다른 applicaiton 에서 aggregation과 같은 질의를 실행 했을 때 잘 못된 정보가 return 될 수도 있습니다.


실제 이런 경우 elasticsearch의 error log 를 보면 아래와 같은 메시지를 보실 수 있습니다.


[2015-09-29 00:08:40,896][DEBUG][action.search.type       ] [Madame Masque] [....][7], node[zXJSZ4IYS2KwPhj190hhEQ], [P], s[STARTED]: Failed

 to execute [org.elasticsearch.action.search.SearchRequest@542e2e00] lastShard [true]

org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution (queue capacity 1000) on org.elasticsearch.search.action.SearchServiceTransp

ortAction$23@76a71853

at org.elasticsearch.common.util.concurrent.EsAbortPolicy.rejectedExecution(EsAbortPolicy.java:62)

at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)

at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)

at org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor.execute(EsThreadPoolExecutor.java:79)

......중략.....

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:745)


에러 메시지는 queue capacity 1000 을 넘었기 때문에 reject 했다는 내용입니다.


해결 방법은 간단 합니다.

- kibana의 dashboard 화면을 단순화 하고 필요한 시점에만 띄워 놓고 봅니다.

- kibana의 auto-refresh 를 off 하거나 주기를 길게 줍니다.

- threadpool.search.queue_size 를 늘려 줍니다.


경험 할 수도 있고 안할 수도 있지만 운영하면서 알고 있으면 그래도 도움은 되지 않을까 싶어서 공유 합니다.

:

[Elastic] Elastic 제품들...

Elastic 2015. 9. 9. 10:30

Elasticsearch, Logstash, Kibana 를 주로 사용하고 있다 보니 다른 제품들은 크게 관심있게 보지를 않았습니다.

제가 관심 있게 보는건 저 한테 필요 하거나 오픈소스 이거나 인데요.

당연히 위에 제품들은 모두 제가 사용하고 있는 것들이고 오픈소스 입니다.


Elastic 에서 제공하고 있는 제품들은 아래 링크를 통해서 확인 하시면 되는데요.


제품 소개 링크) https://www.elastic.co/products


최근까지 제가 잘 못 알고 있던 제품이 있었는데 이것도 한번 사용해 보기 위해 elastic 제품들을 각각 한 줄로 정리해 보기로 했습니다.


Elasticsearch - 오픈소스 무료

루씬 기반의 분산 검색 엔진 입니다.


Logstash - 오픈소스 무료

다양한 input/filter/ouput/codec 들을 제공하는 collector 입니다.


Kibana - 오픈소스 무료

elasticsearch를 DB로 사용하는 visualization/dashboard 도구 입니다.


Packet Beat - 오픈소스 무료

OS 또는 Process 등에서 발생 하는 network 모니터링 도구 입니다.


Top Beat - 오픈소스 무료

기본적인 시스템(CPU, MEM, IO, DISK) 모니터링 도구 입니다.


Elasticsearch Hadoop Plugin - 오픈소스 무료

Hadoop component 들과 elasticsearch를 쉽게 연동 할 수 있도록 도와 주는 라이브러리 입니다.


Found - SaaS 형 서비스 유료

Cloud 환경에서 ELK 를 쉽게 구축하고 사용할 수 있도록 해주는 서비스 입니다.


Shield - 유료

ELK를 이용하여 기업에서 사용하기에는 부족했던 인증, 권한 등의 기능을 제공해 주는 제품 입니다.


Watcher - 유료

ELK를 이용하면서 아쉬웠던 alert 이나 notification 에 대한 기능을 제공해 주는 제품 입니다.


Marvel - 유료 (개발자 버전은 무료)

Elasticsearch에 대한 관리 및 모니터링을 제공하는 제품 입니다.


저는 기본적으로 ELK 기반으로 필요한건 다 만들어서 사용을 하고 있는 편입니다.

beats 도 역시 만들어서 사용하고 있었는데요. 

이건 한번 시도를 해봐야 겠내요. :)

:

[Kibana] Kibana 에서 Index Alias 사용하기

Elastic/Kibana 2015. 8. 6. 18:38

보통 ELK 조합으로 처음 사용하시는 분들의 경우 index 수가 많아 질 수록 kibana chart 생성이 느려 지거나 shard failed  같은 메시지를 경험 하실수 있을 텐데요.


이유는 아주 가까운 곳에 있습니다.

이미 아시는 분들도 많을 테지만 첨 접하시는 분들에게는 유용할 수 있으니 올려 보겠습니다.


기본적으로 logstash를 사용하면 time based 로 index 가 생성 됩니다.

보통 아래와 같은 패턴으로 정의 됩니다.

logstash-%{+YYYY.MM.dd}


위와 같이 정의가 되어 있기 때문에 kibana 에서는 아래와 같이 설정이 되는데요.

logstash-*

- Settings -> Indices 에 있습니다.


즉, 이렇게 설정이 되기 때문에 생성된 모든 index 를 대상으로 질의를 하게 됩니다.

그럼 어떤 문제들이 발생 할지 예측 가능 하시겠죠.


전체 index를 대상으로 질의를 하기 때문에 search thread 가 생성되어 있는 shard 수 만큼 실행 되게 됩니다.

결국 시스템 리소스는 쭈욱 올라갈거고 이렇게 되다 보면 timeout 등이 발생을 하게 될 겁니다.

결국 shard failed 현상이 나오게 되는 것입니다.


이런 문제를 해결 하기 위해서는 index aliases 기능을 활용 하시면 됩니다.

어차피 보고 싶은 정보는 최신 정보이기 때문에 latest index 에 대해서만 alias 를 생성해 주시고 chart 및 dashboard 생성 시 생성한 alias 를 대상으로 만들어 주시면 됩니다.

하지만 하루가 지나면 alias 를 다시 latest index 를 바라 볼 수 있도록 바꿔 줘야 하기 때문에 이런 부분은 관리 기능을 만들어서 사용하시면 별 문제 없이 지속적으로 사용을 하실 수 있을 것입니다.


[Index Aliases]

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html


:

[Kibana4.x] Value format 설정하기

Elastic/Kibana 2015. 7. 29. 17:46

kibana를 이용하다 보면 화면에 보여지는 값에 대한 format 을 고치고 싶은 욕구가 생깁니다.

이걸 어디서 고쳐줘야 하나 싶은데 역시 매뉴 몇번 눌러 보면 찾을 수 있습니다.

귀찮아 하시는 분들을 위해 공유해 봅니다.


[참고문서]

https://www.elastic.co/blog/kibana-4-1-field-formatters


[매뉴 tree]

## Global 설정

GNB -> Settings -> Advanced


## 특정 인덱스의 field format을 바꾸고 싶을 경우

GNB -> Settings -> Indices -> Select Index Patterns -> controls 컬럼에서 수정하고자 하는 field 클릭


[Advanced 화면]



:

[Kibana4.x] 생성한 dashboard export & import 하기.

Elastic/Kibana 2015. 7. 29. 17:40

매뉴만 몇번 눌러 보시면 다 아시는 내용인데요.

눌러 보기 귀찮아 하시는 분들도 있을 것 같아 걍 올려 봅니다.


간혹 작성한 kibana dashboard를 export 받고 싶거나 import 받고 싶을 때가 있습니다.

근데 이거 어디서 백업을 받을 수 있지 하고 찾으면 잘 안찾아 지죠.


아래 페이지에서 export & import 받을 수 있으니 참고하세요.


[매뉴 tree]

GNB -> Settings -> Objects


[매뉴]



:

로그생성 프로그램 - makelogs

Elastic/Logstash 2015. 3. 11. 16:35

logstash에서 제공하는 generator가 쓸만하지 않아서 아래 도구 사용합니다.


[링크]

https://www.npmjs.com/package/makelogs


to install

npm install -g makelogs
makelogs --count=10m --days=-2,+10


[Command Help]

jeong-ui-MBP:makelogs hwjeong$ makelogs --help

A utility to generate sample log data.


Usage: makelogs [options]


Options:

  --count, -c     Total event that will be created, accepts expressions like "1m" for 1 million (b,m,t,h)       [default: 14000]

  --days, -d      The number of days ± today or two numbers, seperated by a comma, like "-1,+10" or "-10,+100"  [default: 1]

  --host, -h      The host name and port                                                                        [default: "localhost:9200"]

  --auth          user:password when you want to connect to a secured elasticsearch cluster over basic auth     [default: null]

  --shards, -s    The number of primary shards                                                                  [default: 1]

  --replicas, -r  The number of replica shards                                                                  [default: 0]

  --dry           Test/Parse your arguments, but don't actually do anything                                     [default: false]

  --help          This help message

  --reset         Clear all logstash-* indices before genrating logs

  --verbose       Log more info to the console

  --trace         Log every request to elastisearch, including request bodies. BE CAREFULL


[예제]

makelogs -c 100 -d 0 -h localhost:9200 -s 1 -r 0 --reset

makelogs -c 100 --days=-1,+1 -h localhost:9200 -s 1 -r 0 --reset


설명) -d 0 는 오늘 날짜 기준으로 데이터 생성

logstash-20150311


설명) --days=-1,+1 은 오늘 날짜 기준으로 앞뒤로 하나씩 인덱스를 더 생성

logstash-20150310

logstash-20150311

logstash-20150312

: