공부/EFK

Kibana [index_not_found_exception] no such index [.kibana] 에러 해결

토고미 2021. 3. 11. 15:45

Kibana를 다루던 도중, 아래와 같은 에러가 났다.

{"type":"error","@timestamp":"2021-03-11T01:24:23Z","tags":["warning","stats-collection"],
"pid":1,"level":"error","error":{"message":"[index_not_found_exception] no such index [.kibana],
with { resource.type=\"index_or_alias\" & resource.id=\".kibana\" & index_uuid=\"_na_\" & 
index=\".kibana\" }","name":"Error","stack":"[index_not_found_exception] no such index [.kibana],
with { resource.type=\"index_or_alias\" & resource.id=\".kibana\" & index_uuid=\"_na_\" & 
index=\".kibana\" } :: {\"path\":\"/.kibana/_search\",\"query\":{},\"body\":\"
{\\\"track_total_hits\\\":true,\\\"query\\\":{\\\"term\\\":{\\\"type\\\":{\\\"value\\\":\\\
"space\\\"}}},\\\"aggs\\\":{\\\"disabledFeatures\\\":{\\\"terms\\\":{\\\"field\\\":\\\
"space.disabledFeatures\\\",\\\"include\\\":[\\\"discover\\\",\\\"visualize\\\",\\\
"dashboard\\\",\\\"dev_tools\\\",\\\"advancedSettings\\\",\\\"indexPatterns\\\",\\\
"savedObjectsManagement\\\",\\\"timelion\\\",\\\"graph\\\",\\\"monitoring\\\",\\\"ml\\\",\\\
"apm\\\",\\\"maps\\\",\\\"canvas\\\",\\\"infrastructure\\\",\\\"logs\\\",\\\"siem\\\",\\\
"uptime\\\"],\\\"size\\\":18}}},\\\"size\\\":0}\",\"statusCode\":404,\"response\":\"{\\\
"error\\\":{\\\"root_cause\\\":[{\\\"type\\\":\\\"index_not_found_exception\\\",\\\"reason\\\
":\\\"no such index [.kibana]\\\",\\\"resource.type\\\":\\\"index_or_alias\\\",\\\
"resource.id\\\":\\\".kibana\\\",\\\"index_uuid\\\":\\\"_na_\\\",\\\"index\\\":\\\".kibana\\\"}]
,\\\"type\\\":\\\"index_not_found_exception\\\",\\\"reason\\\":\\\"no such index [.kibana]\\\",
\\\"resource.type\\\":\\\"index_or_alias\\\",\\\"resource.id\\\":\\\".kibana\\\",\\\
"index_uuid\\\":\\\"_na_\\\",\\\"index\\\":\\\".kibana\\\"},\\\"status\\\":404}\"}\n
at respond (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:315:15)\n
at checkRespForFailure (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:274:7)
\n    at HttpConnector.<anonymous> (/usr/share/kibana/node_modules/elasticsearch/src/lib/
connectors/http.js:166:7)\n    at IncomingMessage.wrapper (/usr/share/kibana/node_modules/
elasticsearch/node_modules/lodash/lodash.js:4935:19)\n    at IncomingMessage.emit 
(events.js:194:15)\n    at endReadableNT (_stream_readable.js:1103:12)\n
at process._tickCallback (internal/process/next_tick.js:63:19)"},"message":
"[index_not_found_exception] no such index [.kibana], with { resource.type=\"index_or_alias\"
& resource.id=\".kibana\" & index_uuid=\"_na_\" & index=\".kibana\" }"}

굉장히 난잡하지만 에러는 [index_not_found_exception] no such index [.kibana] 라고 나와있다.

 

거두절미하고 해결책은 간단하다.

방법은 두 가지다.

2번 방법은 기존의 데이터를 날리므로, 1번 방법을 추천한다.

 

1. alias 직접 하기

 

먼저 es에 curl을 날려서 존재하는 index를 조회 해보자.

나는 es 컨테이너에 직접 들어가서 localhost로 콜을 날렸다.

$ curl -XGET localhost:9200/_cat/indices/
green  open .kibana_1            Y4LugZMHTqSfoXGTqLOM9w 1 0      4 4  70.6kb  70.6kb
yellow open logstash-2021.03.11  A5AEoDdfSWeX9l_usOCYDA 1 1 545768 0 291.7mb 291.7mb
green  open .kibana_task_manager z4OYF_3_TVqHSn9hz4zBmg 1 0      2 0  45.5kb  45.5kb

조회 결과 가장 상단 위에 있는 .kibana_1을 .kibana에 alias를 만들어 줘야 한다.

$ curl -XPUT http://localhost:9200/.kibana_1/_alias/.kibana

그 후, kibana를 다시 재기동하면 정상 동작한다.

 

 

2. .kibana 인덱스 삭제 후 다시 생성

 

1번 방법과 똑같이 es의 인덱스를 조회한다.

$ curl -XGET localhost:9200/_cat/indices/
green  open .kibana_1            Y4LugZMHTqSfoXGTqLOM9w 1 0      4 4  70.6kb  70.6kb
yellow open logstash-2021.03.11  A5AEoDdfSWeX9l_usOCYDA 1 1 545768 0 291.7mb 291.7mb
green  open .kibana_task_manager z4OYF_3_TVqHSn9hz4zBmg 1 0      2 0  45.5kb  45.5kb

조회 결과 가장 상단 위에 있는 .kibana_1을 지워줘야 한다.

$ curl -XDELETE http://localhost:9200/.kibana_1

그 후, kibana를 다시 재기동하면 정상 동작한다.

 

 

===== 

 

에러의 원인을 설명하기에 앞서,

정상 동작할때의 시나리오를 먼저 알아야 이해가 쉽다.

그 시나리오는 다음과 같다.

 

1. kibana는 최초 실행시 es에 .kibana 인덱스를 만들도록 요청을 한다.

2. es가 이 요청을 수행한 뒤, 완료했다고 kibana에게 응답한다.

3. kibana는 만들어진 index와 .kibana를 alias하도록 다시 요청 한다.

위를 예시로 들자면 .kibana_1을 .kibana에 alias 하는 요청을 보내는 것이다.

4. es가 이 요청도 성공적으로 수행 후, 응답을 한다.

5. kibana가 .kibana 인덱스를 조회한다.

.kibana_1 인덱스가 아니라 .kibana 인덱스를 조회한다.

따라서 반드시 alias가 돼있어야 한다.

 

 

내 환경에서 에러가 난 원인은 위의 시나리오에서 alias 문제였다.

 

kibana는 30초가 지나도 응답이 오지 않자, 에러로 판단해 컨테이너를 재기동했지만

es는 30초후에 인덱스를 만들어 줬던 것이다.

(kibana의 request timeout 디폴트 값은 30000ms=30초이다.)

 

es는 alias요청을 기대하고 기다리고 있었지만, 그런 요청은 오지 않았다.

 

kibana입장에서 봤을때는 이러한 상황이 된 거다.

es가 .kibana 인덱스가 이미 존재하므로 생성을 거부는 하는데,

막상 존재한다는 .kibana를 조회하려니 아무것도 없는 것이다.

.kibana는 어느것에도 alias돼있지 않기 때문이다.

 

그림으로 표현하면 이런 상황이다.

 

 

 

 

완전한 해결 방법은 아니지만 이 에러가 발생할 확률을 낮추기 위해

kibana의 configuration 파일인 kibana.yml에 requestTimeout을 100초로 설정했다.

elasticsearch.requestTimeout: "100000ms"

 

kibana의 configuration 파일을 적용시키는 방법은 아래 링크를 참조해주길 바란다.

togomi.tistory.com/3