2018년 11월 15일 엔지니어링

Kibana 스페이스로 마이그레이션하는 방법

By Brandon Kobel

스페이스로 마이그레이션하기

Kibana 6.5부터 스페이스를 사용해 대시보드, 시각화, 그리고 다른 저장된 개체들을 분류하여 구성할 수 있습니다. 추가로, 보안 기능을 사용할 때 어떤 역할이 어떤 스페이스에 액세스할 수 있는지를 컨트롤할 수 있어 더 많은 사용자가 자신의 저장된 개체 하위 집합으로 동일한 Kibana 인스턴스를 사용할 수 있게 해줍니다.

스페이스를 지원하는 Kibana 버전으로 업그레이드할 때, 기존의 모든 저장된 개체들이 “기본” 스페이스 내에 나타납니다. 그러면 다음에 나오는 방법 중 하나를 사용해 스페이스 간에 개체를 이동할 수 있습니다.

스페이스 간에 저장된 개체 이동하기

한 스페이스에서 다른 스페이스로 저장된 개체를 이동하려면 Kibana의 가져오기/내보내기 UI를 사용할 수 있습니다. 가져오기/내보내기 UI를 사용해 저장된 개체를 이동할 때 해당 개체와 관련된 저장된 개체들은 자동으로 이동되지 않는다는 점에 유의하세요. 대시보드와 거기에 관련된 모든 종속성을 스페이스 간에 이동하려면 “한 스페이스에서 다른 스페이스로 대시보드 이동하기”를 참조하세요.

예를 들어, 한 스페이스에서 다른 스페이스로 인덱스 패턴을 이동하려면 관리 > 저장된 개체로 가서 이동하려는 저장된 개체를 선택합니다. 내보내기를 클릭하면 JSON을 내보내어 저장할 위치를 선택할 수 있습니다.

Export Saved ObjectI

그 다음, 스페이스 선택기를 사용해 다른 스페이스를 선택합니다.

Change Space

현재 스페이스가 변경되면 관리 > 저장된 개체로 다시 돌아갑니다. 각 스페이스의 저장된 개체는 완전히 별개로 분리되어 있으므로 방금 내보낸 인덱스 패턴은 더 이상 표시되지 않습니다. 방금 내보낸 인덱스 패턴을 가져오려면 가져오기를 클릭한 다음 이전에 JSON을 저장한 위치를 찾습니다.

Import Saved Object

이제 방금 가져오기한 인덱스 패턴이 나타나는 것을 볼 수 있습니다. 두 개의 다른 인덱스 패턴이 있지만 Elasticsearch에서는 동일한 기본 인덱스에 대한 것입니다. 각 스페이스의 저장된 개체는 완전히 별개의 것이어서 한쪽 인덱스 패턴에 대해 변경한 내용이 다른 스페이스의 인덱스 패턴에 영향을 미치지 않습니다. 원래 스페이스에 더 이상 인덱스 패턴이 필요 없다고 판단되면 삭제해도 안전합니다. 여전히 복사해 놓은 스페이스에 해당 인덱스 패턴이 존재하기 때문입니다.

여러 테넌트를 스페이스로 병합하기

Kibana 사용자들을 격리시키기 위해 각 Elasticsearch 인덱스로 Kibana의 여러 테넌트를 사용 중인 경우, 내보내기/가져오기 UI를 이용해 스페이스를 사용하는 단일 테넌트로 병합할 수 있습니다. 한 테넌트로부터 모든 저장된 개체를 내보내기하려면 관리 > 저장된 개체로 가서 모든 개체를 선택하는 헤더의 확인란을 클릭한 다음, 내보내기를 클릭합니다.

Export all Saved Objects

그러면 어디에 JSON을 저장할지를 묻는 프롬프트가 뜹니다.

아직 대상 스페이스가 존재하지 않는데 그 스페이스를 선택하는 경우, 저장된 개체를 내보내기한 후에 Kibana의 대상 인스턴스로 가서 대상 스페이스를 만듭니다. 관리 > 저장된 개체로 가서 가져오기를 선택한 다음, 방금 저장한 JSON 파일을 찾습니다. 이렇게 하면 선택된 모든 저장된 개체들을 스페이스로 가져오게 됩니다.

한 스페이스에서 다른 스페이스로 대시보드 이동하기

저장된 개체들을 개별적으로 이동 중인 경우, Kibana에서 가져오기와 내보내기 UI를 사용해도 됩니다. 그러나 대시보드와 거기에 관련된 시각화, 저장된 검색, 인덱스 패턴을 모두 이동하려면 아직 부족한 점이 많습니다. 대시보드를 다른 스페이스로 이동하려면, 대시보드 가져오기/내보내기 API를 사용하는 것이 가장 간편합니다.

대시보드 내보내기

대시보드를 내보내기하려면, 먼저 대시보드의 ID를 확인해야 합니다. 내보내기하려는 대시보드를 열고 URL을 검사해보면 /app/kibana#/dashboard/? 사이에 있는 긴 식별자가 ID입니다. 다음 URL에서 대시보드의 ID가 굵은 글씨로 표시되어 있습니다.

http://localhost:5601/s/marketing/app/kibana#/dashboard/<b>d203dd90-deac-11e8-869e-d73106bbd5ad</b>?_g=()

마찬가지로, 대시보드의 스페이스 URL 식별자를 확인하는 데에도 대시보드의 URL을 사용합니다. 스페이스 URL 식별자는 URL의 앞부분에 있는 /s//app/kibana#dashboard 사이에 포함되어 있습니다. URL에 /s/가 없다면, 기본 스페이스에 있는 것입니다. API URL을 포함해 Kibana의 모든 URL은 /s/{spaceID} 형식의 스페이스 접두사를 사용하여 스페이스 간에 구분을 합니다. 기본 스페이스인 경우에는 예외로서 아무런 접두사도 사용하지 않습니다. 다음 URL에서 스페이스 URL 식별자가 굵은 글씨로 표시되어 있습니다.

http://localhost:5601/s/<b>marketing</b>/app/kibana#/dashboard/d203dd90-deac-11e8-869e-d73106bbd5ad?_g=()

일단 대시보드의 ID를 알아내면, 다음과 비슷한 CURL 명령어를 사용해 {spacePrefix}/api/kibana/dashboards/export?dashboard={dashboardID}에 대해 ‘GET’ 요청을 실행할 수 있습니다. 이렇게 하면 ‘마케팅’ 스페이스로부터 ID가 d203dd90-deac-11e8-869e-d73106bbd5ad인 대시보드를 내보내기하여 해당 대시보드와 그 모든 종속성을 export.json 파일에 저장합니다.

curl -u elastic:changeme http://localhost:5601/s/marketing/api/kibana/dashboards/export?dashboard=d203dd90-deac-11e8-869e-d73106bbd5ad > export.json

마찬가지로, 다음 CURL 명령어는 기본 스페이스로부터 ID가 d203dd90-deac-11e8-869e-d73106bbd5ad인 대시보드를 내보내기하여 export.json 파일에 저장합니다.

curl -u elastic:changeme http://localhost:5601/api/kibana/dashboards/export?dashboard=d203dd90-deac-11e8-869e-d73106bbd5ad > export.json

대시보드 가져오기

어려운 부분은 끝났습니다. 이제 대시보드를 새 스페이스로 가져올 수 있습니다. 그렇게 하려면 대상 스페이스의 스페이스 URL 식별자를 한 번 더 확인해야 합니다. 그래야 URL에 표시되는 스페이스 접두사를 생성할 수 있습니다. 스페이스 선택기를 사용해 대시보드를 이동하려는 대상 스페이스를 선택하고, 내보내기하려는 대시보드의 스페이스를 확인할 때 했던 대로 URL을 검사합니다.

앞서 저장한 export.json으로 이제 {spacePrefix}/api/kibana/dashboards/import에 대해 <{spacePrefix}/api/kibana/dashboards/import POST 요청을 실행할 수 있습니다. 다음 CURL 명령어는 영업 스페이스로 대시보드를 가져오게 됩니다.

curl -H “Content-Type: application/json” -H “kbn-xsrf: true” -u elastic:changeme http://localhost:5601/s/sales/api/kibana/dashboards/import --data-binary @export.json

마찬가지로, 다음 CURL 명령어는 기본 스페이스로 대시보드를 가져오게 됩니다.

curl -H “Content-Type: application/json” -H “kbn-xsrf: true” -u elastic:changeme http://localhost:5601/api/kibana/dashboards/import --data-binary @export.json

일단 대시보드를 가져오면, 원래 스페이스에 더 이상 그 대시보드가 있을 필요가 없다고 생각되는 경우 마음대로 삭제해도 됩니다.

직접 해보세요

Kibana 스페이스는 대시보드와 시각화를 깔끔하게 정리하고 그룹화하는 데 아주 유용할 수 있습니다. 더 많은 사용자가 동일한 Kibana를 사용하도록 할 수 있는지 또는 워크플로를 구현하는 데 사용되는지 여부는 직접 해보세요. 그리고 스페이스를 어떻게 활용하고 계시는지 알려주세요.