'Elastic/Kibana'에 해당되는 글 18건

  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.08.06 [Kibana] Kibana 에서 Index Alias 사용하기
  7. 2015.07.29 [Kibana4.x] Value format 설정하기
  8. 2015.07.29 [Kibana4.x] 생성한 dashboard export & import 하기.

[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 를 늘려 줍니다.


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

:

[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


[매뉴]



: