본문 바로가기
프로그램 (PHP,Python)

Kibana Saved Object 기본 개념 및 자동화(n8n) 백업 가이드

by 날으는물고기 2025. 1. 23.

Kibana Saved Object 기본 개념 및 자동화(n8n) 백업 가이드

1. Kibana Saved Object 기본 개념 및 사용법

Saved Object란?

Kibana의 Saved Object는 대시보드, 시각화, 검색, 인덱스 패턴 등 사용자가 생성한 설정 정보를 저장하는 데이터입니다. Saved Object는 Kibana UI를 통해 관리하거나, API를 통해 내보내기(export) 및 가져오기(import)할 수 있습니다. 이를 통해 중요한 설정 정보를 효율적으로 관리할 수 있습니다.

Saved Object 주요 유형

  • Dashboard: 대시보드 레이아웃 정보를 저장.
  • Visualization: 데이터 시각화 설정.
  • Search: 특정 필터와 정렬 조건을 저장한 검색.
  • Index Pattern: Elasticsearch의 인덱스를 참조하는 패턴.

API 사용법

Saved Object API를 활용하면 데이터를 내보내고(import) 백업할 수 있습니다.

 

내보내기 (Export)

  • Endpoint: /api/saved_objects/_export
  • Method: POST
  • Headers:
    {
      "kbn-xsrf": "true",
      "Content-Type": "application/json"
    }
  • Body:
    {
      "type": ["search", "index-pattern", "visualization", "dashboard"],
      "includeReferencesDeep": true
    }

 

가져오기 (Import)

  • Endpoint: /api/saved_objects/_import
  • Method: POST
  • Headers:
    {
      "kbn-xsrf": "true"
    }
  • Body: .ndjson 파일 업로드 필요.

2. Saved Object 백업 Python 코드 및 실행 방법

Saved Object는 Kibana의 중요한 구성 요소를 포함하고 있어, 별도로 백업하지 않으면 유실될 위험이 있습니다. 이러한 백업을 통해 데이터 복구 및 변경 이력을 관리할 수 있으며, 이는 다음과 같은 이유로 중요합니다:

  • 데이터 손실 방지: 예상치 못한 오류나 삭제로 인한 데이터 유실 방지.
  • 변경 이력 관리: 시간별로 백업을 유지하여 이전 상태로 복구 가능.
  • 규정 준수: 데이터 관리 규정에 따라 주기적으로 데이터를 보관.

Python 코드 예제

import requests
from requests.auth import HTTPBasicAuth
from datetime import datetime

def main():
    now = datetime.now()
    datapath = '/path/to/kibana-backup/data'
    targets = [
        {
            "name": "kibana-instance-1",
            "url": "https://kibana1.example.com:5601/api/saved_objects/_export",
            "username": "example_user1",
            "password": "example_password1",
            "payload": {
                "type": ["search", "index-pattern", "visualization", "dashboard"],
                "includeReferencesDeep": True
            },
            "headers": {
                "kbn-xsrf": "true",
                "Content-Type": "application/json"
            }
        }
    ]

    for target in targets:
        try:
            response = requests.post(
                target['url'],
                auth=HTTPBasicAuth(target['username'], target['password']),
                headers=target['headers'],
                json=target['payload']
            )

            if response.status_code == 200:
                filename = f"{datapath}/{target['name']}_{now:%Y-%m-%d}.ndjson"
                with open(filename, 'wb') as f:
                    f.write(response.content)
                print(f"Backup saved: {filename}")
            else:
                print(f"Failed to export: {response.status_code} {response.text}")

        except Exception as e:
            print(f"Error: {e}")

if __name__ == "__main__":
    main()

실행 방법

  1. Python 환경 설정
    pip install requests
  2. 디렉토리 생성
    mkdir -p /path/to/kibana-backup/data
  3. 코드 실행
    python kibana_backup.py

3. Saved Object 백업 Python 코드를 n8n으로 전환하는 방법

기본 배경 및 필요성

Python 기반 백업 방식은 간단하고 유연하지만, 작업 자동화 및 유지보수를 위해 n8n을 활용하는 것이 효율적입니다. n8n은 비주얼 워크플로 기반 자동화 도구로, 추가적인 통합(예: Slack 알림, 이메일 알림)을 쉽게 구현할 수 있습니다.

전환 작업

n8n의 HTTP Request 노드Write Binary File 노드를 활용하여 Python 코드를 워크플로로 구현합니다.

 

주요 노드 구성

  1. HTTP Request 노드
    • 역할: Kibana API 호출.
    • 설정
      • Method: POST
      • URL: https://kibana1.example.com:5601/api/saved_objects/_export
      • Authentication: Basic Auth
      • Headers:
        {
          "kbn-xsrf": "true",
          "Content-Type": "application/json"
        }
      • Body:
        {
          "type": ["search", "index-pattern", "visualization", "dashboard"],
          "includeReferencesDeep": true
        }
      • Output Format: Binary Data
  2. Write Binary File 노드
    • 역할: API에서 반환된 데이터를 .ndjson 파일로 저장.
    • 설정
      • Binary Property: data
      • File Name: /path/to/kibana-backup/kibana-instance-1_{{ new Date().toISOString().slice(0, 10) }}.ndjson
  3. Slack 알림 노드
    • 역할: 작업 완료 상태를 Slack에 알림.
    • 설정
      • Channel: #backup_notifications
      • 성공 메시지: Backup for Kibana instance "kibana-instance-1" completed successfully.
      • 실패 메시지: Backup for Kibana instance "kibana-instance-1" failed. Error: {{$json["error"] || "Unknown error"}}.
  4. 이메일 알림 노드
    • 역할: 작업 결과 이메일로 전송.

4. n8n을 통한 Saved Object 정기 백업 운영 구성

전체 워크플로

  1. Cron 노드: 매일 정해진 시간에 워크플로 실행.
  2. Set 노드: 대상 Kibana 인스턴스 정보를 정의.
  3. HTTP Request 노드: Kibana API 호출.
  4. Write Binary File 노드: 데이터를 파일로 저장.
  5. Slack 노드: 알림 전송.
  6. 이메일 알림 노드: 작업 결과 보고.

n8n JSON 구성 예제

{
  "nodes": [
    {
      "id": "1",
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "mode": "everyDay",
              "hour": 2,
              "minute": 0
            }
          ]
        }
      }
    },
    {
      "id": "2",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://kibana1.example.com:5601/api/saved_objects/_export",
        "method": "POST",
        "authentication": "basicAuth",
        "headerParametersUi": {
          "parameter": [
            { "name": "kbn-xsrf", "value": "true" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "jsonParameters": true,
        "bodyParametersJson": {
          "type": ["search", "index-pattern", "visualization", "dashboard"],
          "includeReferencesDeep": true
        },
        "basicAuth": {
          "user": "example_user1",
          "password": "example_password1"
        }
      }
    },
    {
      "id": "3",
      "name": "Write File",
      "type": "n8n-nodes-base.writeBinaryFile",
      "parameters": {
        "fileName": "/path/to/kibana-backup/kibana-instance-1_{{ new Date().toISOString().slice(0, 10) }}.ndjson",
        "binaryPropertyName": "data"
      }
    }
  ]
}

수행 이력 및 모니터링

n8n을 활용하여 백업 수행 이력을 기록하고 Slack 알림을 통해 실시간 모니터링이 가능합니다. 이를 통해 작업 상태를 지속적으로 확인하고, 이상 상황 발생 시 신속히 대응할 수 있습니다.

 

Slack 알림 설정

  • 성공 시
    Backup for Kibana instance "kibana-instance-1" completed successfully.
  • 실패 시
    Backup for Kibana instance "kibana-instance-1" failed. Error: {{$json["error"] || "Unknown error"}}.

 

모니터링 이점

  • 실시간 알림: 백업 작업의 성공 또는 실패 상태를 즉시 확인 가능.
  • 투명한 관리: Slack 알림을 통해 팀 내 작업 상태를 공유.
  • 신속한 대응: 실패 시 즉각적인 알림으로 빠른 조치 가능.

실행 및 운영

  1. n8n 설치 및 설정
    docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
  2. 워크플로 활성화
    n8n UI에서 워크플로를 가져오고 활성화.
  3. 정기 실행 확인
    Cron 설정에 따라 백업 작업이 자동으로 실행되는지 확인.
  4. 파일 및 알림 확인
    • 백업 파일이 지정한 경로에 저장되는지 확인.
    • Slack 및 이메일 알림 확인.

 

이 구성을 통해 Kibana Saved Object 백업 작업을 자동화하고 효율적으로 운영할 수 있습니다.

728x90

댓글