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()
실행 방법
- Python 환경 설정
pip install requests
- 디렉토리 생성
mkdir -p /path/to/kibana-backup/data
- 코드 실행
python kibana_backup.py
3. Saved Object 백업 Python 코드를 n8n으로 전환하는 방법
기본 배경 및 필요성
Python 기반 백업 방식은 간단하고 유연하지만, 작업 자동화 및 유지보수를 위해 n8n을 활용하는 것이 효율적입니다. n8n은 비주얼 워크플로 기반 자동화 도구로, 추가적인 통합(예: Slack 알림, 이메일 알림)을 쉽게 구현할 수 있습니다.
전환 작업
n8n의 HTTP Request 노드와 Write Binary File 노드를 활용하여 Python 코드를 워크플로로 구현합니다.
주요 노드 구성
- 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
- Method:
- Write Binary File 노드
- 역할: API에서 반환된 데이터를
.ndjson
파일로 저장. - 설정
- Binary Property:
data
- File Name:
/path/to/kibana-backup/kibana-instance-1_{{ new Date().toISOString().slice(0, 10) }}.ndjson
- Binary Property:
- 역할: API에서 반환된 데이터를
- 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"}}.
- Channel:
- 이메일 알림 노드
- 역할: 작업 결과 이메일로 전송.
4. n8n을 통한 Saved Object 정기 백업 운영 구성
전체 워크플로
- Cron 노드: 매일 정해진 시간에 워크플로 실행.
- Set 노드: 대상 Kibana 인스턴스 정보를 정의.
- HTTP Request 노드: Kibana API 호출.
- Write Binary File 노드: 데이터를 파일로 저장.
- Slack 노드: 알림 전송.
- 이메일 알림 노드: 작업 결과 보고.
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 알림을 통해 팀 내 작업 상태를 공유.
- 신속한 대응: 실패 시 즉각적인 알림으로 빠른 조치 가능.
실행 및 운영
- n8n 설치 및 설정
docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
- 워크플로 활성화
n8n UI에서 워크플로를 가져오고 활성화. - 정기 실행 확인
Cron 설정에 따라 백업 작업이 자동으로 실행되는지 확인. - 파일 및 알림 확인
- 백업 파일이 지정한 경로에 저장되는지 확인.
- Slack 및 이메일 알림 확인.
이 구성을 통해 Kibana Saved Object 백업 작업을 자동화하고 효율적으로 운영할 수 있습니다.
댓글