Bigdata/Splunk

Splunk - KV Store 데이터 저장 및 수정하기

올엠 2024. 8. 12. 10:11
반응형

KV Store는 Splunk에서 제공하는 기능이다.

KV Store 용도는 데이터베이스 처럼 입력 저장 수정등, 쉽게 활용할 수 있어서,

Splunk를 사용하고 있다면, 간편하게 사용하기 좋은 저장소라고 할 수 있다.

 

그럼 가장 간단하게 데이터를 저장하고 수정하는 Python 코드를 작성해보도록 하자.

여기에서는 Splunk에서 제공하는 라이브러리를 사용할 예정이며 코드는 다음과 같다.

import splunklib.client as client


# Splunk 인증 정보
host = "localhost"
port = 8089
username = "admin"
password = "your_password"


# Splunk SDK 객체 생성
service = client.connect(
    host=host,
    port=port,
    username=username,
    password=password)

# KV Store 이름 설정
collection_name = "my_collection"

# KV Store 객체 생성
collection = service.kvstore[collection_name]

# 데이터 저장
data = {
    "key1": "value",
    "key2": "value2"
}

collection.data.insert(data)

# 데이터 변경
new_data = {
    "key1": "new_value",
    "key3": "value3"
}

collection.data.update({"key1": "value"}, new_data)

위 코드는 key1, key2, key3를 생성하는데, key1에 대해서는 새로운 값으로 변경하게 된다.

KV Store어는 기존 값이 있다면 덮어쓰는 구조이기 때문에, 파일 처럼 간단하게 업데이트가 가능하다.

 

만약 데이터베이스 처럼 컬럼이 많은 데이터라면 JSON 구조를 활용하면 된다.

아래는 JSON 구조로 데이터를 저장하는 코드 예제이다.

import splunklib.client as client
import json


# Splunk 인증 정보
host = "localhost"
port = 8089
username = "admin"
password = "your_password"


# Splunk SDK 객체 생성
service = client.connect(
    host=host,
    port=port,
    username=username,
    password=password)


# KV Store 이름 설정
collection_name = "my_collection"


# KV Store 객체 생성
collection = service.kvstore[collection_name]


# 배열 데이터 저장
data = [
    {
        "key1": "value1",
        "key2": "value2"
    },
    {
        "key3": "value3",
        "key4": "value4"
    }
]


# JSON 형식으로 변환
json_data = json.dumps(data)


# KV Store에 저장
collection.data.insert(json.loads(json_data))

 

위 데이터에서 key1, key2, key3, key4를 저장하는데, key1, key2이 하나의 데이터이고 key3, key4가 하나의 데이터가 된다.

그런데 앞서 수정을 해야 한다면 어떻게 할 수 있을까?

동일하게 배열내에 동일한 key 값을 찾아 수정하는 방식으로 사용이 가능하다.

# 배열 데이터 수정

new_data = [
    {
        "key1": "new_value"
    },
    {
        "key4": "new_value",
        "key5": "new_value"
    }
]

# JSON 형식으로 변환
json_new_data = json.dumps(new_data)

# 데이터 수정
collection.data.update({"key1": "value1"}, json.loads(json_new_data))

위와 같이 데이터를 입력할 경우 key1에 새로운 값이 들어가고, key4 역시 값이 변경되어지게 된다. 

그리고 key5는 새로운 값이 들어간다.

그리고 중복되는 키 데이터를 리스트로 형태로 저장해야 할 경우에는 _key 를 이용하면 고유 키로 활용할 수 있다.

수정 시에도 활용이 가능하므로 적극적으로 활용하기를 추천한다.

# 고유한 ID를 가진 데이터 저장
data = {
    "_key": "unique_id_1",
    "key1": "value1",
    "key2": "value2"
}

 

 

 

반응형