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 파일을 적용시키는 방법은 아래 링크를 참조해주길 바란다.
'공부 > EFK' 카테고리의 다른 글
Fluentd Index Template 생성 및 ILM 자동 적용 (0) | 2021.06.25 |
---|---|
Opendistro와 OIDC(Keycloak) 연동 on Kubernetes (0) | 2021.04.16 |
curl을 이용한 Kibana index 패턴 생성 (0) | 2021.03.11 |
Kibana basePath 설정 (Configuration 설정) (0) | 2021.03.11 |