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

  1. 2022.08.29 [Kibana] Discover 생성 후 삭제
  2. 2021.10.27 [Kibana] Discover 에서 데이터 요청 시 _source 와 fields
  3. 2020.09.10 [Kibana+Docker] Docker Compose 내 elasticsearch.hosts 설정
  4. 2020.05.11 [Kibana] Docker Compose 실행 시 Permission 오류.
  5. 2020.04.07 [Kibana] Visualize Metric JSON Input 예제
  6. 2020.04.02 [Kibana] Docker Compose 구성 하기
  7. 2020.04.01 [Kibana] Docker Compose 설정 시 environment 중
  8. 2019.06.19 [Kibana] timelion 매뉴얼.
  9. 2019.04.25 [Kibana] visualize 에서 scripted field 사용하기
  10. 2018.07.05 [Kibana] start and stop 스크립트

[Kibana] Discover 생성 후 삭제

Elastic/Kibana 2022. 8. 29. 11:20

Discover 를 새로 만들어서 저장하는 문서는 아래를 참고하세요.

https://www.elastic.co/guide/en/kibana/current/save-open-search.html

 

생성 후 삭제를 하고 싶은데 관련 내용은 별도 문서를 찾기 못해서 기록해 둡니다.

 

1. Stack Management

2. Kibana > Saved Objects

 

에 들어가서 삭제 하고 싶은 discover 를 찾아서 삭제 하면 됩니다.

 

그리고 추가적으로 Recently viewed 에 나오는 항목에 대한 삭제는 localStorage 에 저장 되기 때문에 직접 찾아서 삭제 하시면 됩니다.

아직까지 삭제 기능을 제공 하고 있지는 않습니다.

 

:

[Kibana] Discover 에서 데이터 요청 시 _source 와 fields

Elastic/Kibana 2021. 10. 27. 09:35

Kibana Discover 에서 데이터 요청 시 _source 는 false 로 가져 오지 않습니다.
다만, View 형식을 Table 에서 JSON 으로 변경 시 _source:true 로 데이터를 가져 오게 됩니다.
그렇기 때문에 기본 fields 를 이용해서 문서의 field 를 가져 오게 됩니다.

 

이걸 기록 하는 이유는 

log file ->

filebeat input log -> filebeat processors decode_json_fields -> filebeat output logstash ->

logstash input beat -> logstash output elasticsearch -> logstash output elasticsearch codec json -> 

elasticsearch ->

kibana

이 과정에서 kibana 에서 불필요한 데이터 요청을 하는 것 같아 확인을 해보니 Table 뷰와 JSON 뷰가 다르다는 걸 확인한 결과를 기록 한 부분 입니다.

 

기본 요청은 _source:false 이기 때문에 불필요한 요청을 하지 않습니다.

 

불필요한 요청이라고 하는 이유는 fields 는 _source 에서 정보를 가져오기 때문에 중복입니다.
:

[Kibana+Docker] Docker Compose 내 elasticsearch.hosts 설정

Elastic/Kibana 2020. 9. 10. 16:56

기본적으로 config/kibana.yml 에서는 array 로 설정을 하게 되어 있습니다.

Kibana : Multi-Elasticsearch 로 등록이 가능 하다는 것인데요.

 

Kibana 를 Docker 로 구성 할 경우 일반적인 yaml 문법의 array 등록 방식으로 작성을 하게 되면 에러가 발생을 합니다.

그래서 아래와 같이 작성을 하셔야 합니다.

 

[Code Example]

version: "3.7"
services:
  dockerr-kibana:
    image: docker.elastic.co/kibana/kibana:7.9.1
    container_name: docker-kibana
    environment:
      ELASTICSEARCH_HOSTS: '["http://host.docker.internal:9200","http://host.docker.internal:9201","http://host.docker.internal:9202"]'
    ports:
      - 5601:5601
    expose:
      - 5601
    restart: always
    network_mode: bridge

 

[Error Code]

version: "3.7"
services:
  dockerr-kibana:
    image: docker.elastic.co/kibana/kibana:7.9.1
    container_name: docker-kibana
    environment:
      ELASTICSEARCH_HOSTS: 
        - "http://host.docker.internal:9200"
        - "http://host.docker.internal:9201"
        - "http://host.docker.internal:9202"
    ports:
      - 5601:5601
    expose:
      - 5601
    restart: always
    network_mode: bridge

[Error Message]

$ docker-compose up
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.dockerr-kibana.environment.ELASTICSEARCH_HOSTS contains ["http://host.docker.internal:9200", "http://host.docker.internal:9201", "http://host.docker.internal:9202"], 
which is an invalid type, it should be a string, number, or a null

 

:

[Kibana] Docker Compose 실행 시 Permission 오류.

Elastic/Kibana 2020. 5. 11. 14:15

kibana 를 docker-compose 를 이용해서 실행 할 때 설정 파일, kibana.yml 파일에 대한 permission 오류가 발생 할 때가 있습니다.

이 경우 처음 부터 kibana.yml 파일이 있는 위치에 permission 을 부여 해 주거나 docker-compose.yml 파일에서 아래와 같이 추가 하시면 문제를 해결 할 수 있습니다.

 

user: "1002:0"

 

- host 서버에서

$ id

uid=1002 gid=20

 

- container 에서 

$ id

uid=1000 gid=0

 

실행한 놈과 실행 된 놈의 user 가 달라서 발생 하는 오류 입니다.

권한을 주거나 user 를 맞춰 주시면 됩니다.

:

[Kibana] Visualize Metric JSON Input 예제

Elastic/Kibana 2020. 4. 7. 20:11

kibana 에서 visualize 중 metric 을 구성 할 때 또는 다른 visualize 이더라도 비슷 합니다.

JSON Input 은 아래와 같이 넣으 실 수 있습니다.

{
  "script": {
    "inline": "doc['system.filesystem.free'].value / 1024 / 1024 /1024",
    "lang": "painless"
  }
}

좀 더 자세한 내용이 궁금 하신 분들은 아래 문서 한번 보시면 좋습니다.

 

공식문서)

https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-fields.html

 

 

:

[Kibana] Docker Compose 구성 하기

Elastic/Kibana 2020. 4. 2. 08:28

Kibana를 Docker로 구성 하기 위한 docker-compose.yml 내용을 살펴 봅니다.

 

참고문서)

 

https://www.elastic.co/guide/en/kibana/current/docker.html

 

docker-compose.yml)

version: '2.2'
services:
  ${KIBANA-SERVICE-NAME}:
    image: docker.elastic.co/kibana/kibana:7.6.2
    container_name: ${KIBANA-SERVICE-NAME}
#    depends_on:
#      - ${ES-SERVICE-NAME}
    ports:
      - 5601:5601
    expose:
      - 5601
    environment:
      ELASTICSEARCH_HOSTS: http://host.docker.internal:9200
    networks:
      - ${NETWORK-NAME}

networks:
  ${NETWORK-NAME}:
    driver: bridge

위 설정은 host 에서 Elasticsearch 를 Standalone 으로 띄우고 Kibana 를 컨테이너로 실행 시킨 후 연동 하도록 한 것입니다.

접속은 아래와 같이 하면 됩니다.

- http://localhost:5601

 

만약, docker-compose.yml 파일 내 Elasticsearch 와 Kibana 를 모두 구성해서 띄우실 때는 아래 설정을 맞춰 주면 됩니다.

- depends_on : 섹션에서 Elasticsearch 실행 후 Kibana 가 실행 되도록 구성

- network 구성은  같은 걸 사용하도록 하고 bridge 로 설정

- kibana 에서 elasticsearch 를 찾기 위해 host.docker.internal 이 아닌 ${ES-SERVICE-NAME} 으로 변경

 

또는 다른 인스턴스에 Elasticsearch 가 구성이 되어 있다면,

- environment: 섹션에서 host.docker.internal 이 아닌 Elasticsearch가 구성된 인스턴스의 DNS나 IP로 변경

하시면 됩니다.

 

 

 

 

:

[Kibana] Docker Compose 설정 시 environment 중

Elastic/Kibana 2020. 4. 1. 09:47

kibana docker compose 에서 아래 변수가 어떤 값을 참조 하는지 확인 하시기 바랍니다.

 

참고 문서)

https://www.elastic.co/guide/en/kibana/current/docker.html

environment:
    ELASTICSEARCH_URL: http://${SERVICE-NAME}:9200
    ELASTICSEARCH_HOSTS: http://${SERVICE-NAME}:9200
또는
    ELASTICSEARCH_URL: http://${CONTAINER-NAME}:9200
    ELASTICSEARCH_HOSTS: http://${CONTAINER-NAME}:9200

단일 노드에 Elasticsearch 와 Kibana 두 개의 컨테이너를 띄울 때 Kibana 에서는 Elasticsearch 의 Service 명 또는 Container 명으로 Elasticsearch 를 찾습니다.

:

[Kibana] timelion 매뉴얼.

Elastic/Kibana 2019. 6. 19. 11:34

요즘 timelion 쓸 일이 있어서 매뉴얼 링크 투척.

https://www.elastic.co/guide/en/kibana/current/timelion.html

 

Timelion | Kibana User Guide [7.1] | Elastic

In 7.x, you’ll no longer see the Timelion application in the Kibana side navigation. However, Timelion visualizations still exist in Visualize. To enable Timelion in the side navigation, set timelion.ui.enabled in your kibana.yml file. In 8.0, the Timelion

www.elastic.co

문서 보면 샘플 부터 자세히 나와 있습니다.

아래는 기본적인 샘플 쿼리 입니다.

.es(

    index=nginx-access-log*, 

    timefield='@timestamp', 

    q='application:app AND host_addr:xxx.xxx.kr', 

    metric='avg:response_time'

)

 

nginx access log 에 기록되는 api 서버의 응답 시간에 대한 평균을 구해서 특정 시간을 넘길 경우 alert 을 발생 시키기 위해 chart 를 그려본 내용입니다.

:

[Kibana] visualize 에서 scripted field 사용하기

Elastic/Kibana 2019. 4. 25. 14:14

예전에는 이 기능이 없어서 code 로 되어 있던 field 에 대해서 가독성 확보가 어려웠는데요.

나온지 한 참 되었는데 혹시 필요 하신 분들이 있을 수도 있어서 기록해 봅니다.

 

사실은 제가 기억력이 좋지 않아서 복습 차원에 정리 해 보는 내용입니다.

 

공식 문서)

https://www.elastic.co/guide/en/kibana/current/scripted-fields.html

 

Scripted Fields | Kibana User Guide [7.0] | Elastic

Use of Groovy, JavaScript, and Python scripting is deprecated starting in Elasticsearch 5.0, and support for those scripting languages will be removed in the future.

www.elastic.co

보통 visualize 에서도 "Advanced" 클릭 하시면 JSON Input 영역에 필요한 script 를 넣을 수 있습니다.

Terms aggregation 을 기본 예로 들면,

{
  "aggs": {
    "1": {
      "terms": {
        "field": "user",
        "size": 100000,
        "order": {
          "_count": "desc"
        }
      }
...중략...
}

Kibana 에서 이 정도 작성이 가능 합니다.

여기서 "min_doc_count" 같은 값을 설정 하고 싶을 경우 위에 이야기한 "Advanced" 를 클릭해서 값을 넣으시면 아래와 같이 등록이 됩니다.

 

Advacned JSON Input)

{
  "min_doc_count":3
}

 

최종 Request string)

{
  "aggs": {
    "1": {
      "terms": {
        "field": "user",
        "size": 100000,
        "order": {
          "_count": "desc"
        },
        "min_doc_count":3
      }
...중략...
}

그럼 scripted field 추가를 해보겠습니다.

공식 문서에 자세히 나와 있기 때문에 별도 화면 캡쳐 등의 설명은 하지 않겠습니다.

내용만 발췌 합니다.

Creating a Scripted Field

To create a scripted field:

  1. Go to Management > Kibana > Index Patterns

  2. Select the index pattern you want to add a scripted field to.

  3. Go to the pattern’s Scripted fields tab.

  4. Click Add scripted field.

  5. Enter a name for the scripted field.

  6. Enter the expression that you want to use to compute a value on the fly from your index data.

  7. Click Create field.

이렇게 생성 완료 후 Visualize 에서 Terms aggs 작성 하시면서 Field 쪽에 작성 하신 scripted field 를 넣어 주시면 됩니다.

단, 생성할 때 선택한 index 로 visualize 를 만드셔야지 scripted field 가 노출 됩니다.

 

아래는 제가 사용한 scripted field 정보 입니다.

Name : code_ko
Lang : painless
Script :
if (doc['code'].value == '1') { '카테고리1' } 
else if (doc['code'].value == '2') {'카테고리2'} 
else if (doc['code'].value == '3') {'카테고리3'} 
else if (doc['code'].value == '4') {'카테고리4'} 
else if (doc['code'].value == '5') {'카테고리5'} 
else if (doc['code'].value == '6') {'카테고리6'} 
else if (doc['code'].value == '7') {'카테고리7'} 
else if (doc['code'].value == '8') {'카테고리8'} 
else if (doc['code'].value == '9') {'카테고리9'} 
else if (doc['code'].value == '10') {'카테고리10'} 
else if (doc['code'].value == '11') {'카테고리11'} 
else if (doc['code'].value == '12') {'카테고리12'}

- pseudocode 로 변경해서 기록 했습니다.

:

[Kibana] start and stop 스크립트

Elastic/Kibana 2018. 7. 5. 09:52

Kibana 실행 스크립트.

$ bin/kibana 귀찮아서 그냥 es 에서 쓰던거 복붙.


[start.sh]


#!/bin/bash


DIR_NAME=`dirname "$0"`

DIR_HOME=`cd $DIR_NAME; cd ..; pwd`


$DIR_HOME/bin/kibana> /dev/null 2>&1 & KIBANA_PID=$!

echo $KIBANA_PID > $DIR_HOME/bin/kibana.pid



[stop.sh]


#!/bin/bash


DIR_NAME=`dirname "$0"`

DIR_HOME=`cd $DIR_NAME; cd ..; pwd`


KIBANA_PID=`cat $DIR_HOME/bin/kibana.pid`

kill -9 $KIBANA_PID

echo "Kibana Daemon($KIBANA_PID) is killed"

rm -f $DIR_HOME/bin/kibana.pid


: