ipTIME 공유기에 연결된 내부(LAN) 및 외부(WAN) 링크에 대한 트래픽 사용량 정보를 수집하여 도식화 했습니다.
공유기 관리자 페이지를 크롤링하면 텍스트 형태로 정보를 가져와서 JSON 형식으로 변환하여 통계화를 해봤는데, jq 명령어를 활용하니 손쉽게 변환할 수 있었습니다.
WAN 링크의 트래픽 정보를 수집하면 아래와 같이 텍스트 형태 정보를 확보할 수 있습니다.
"Rx_Packets": "648233790"
"Rx_Bytes": "617839018055"
"Rx_Broadcast": "63695556"
"Rx_Multicast": "399605"
"Rx_Discard": "295574"
"Rx_Error": "0"
"Tx_Packets": "310319281"
"Tx_Bytes": "126893906437"
"Tx_Broadcast": "6"
"Tx_Multicast": "39569"
"Tx_Collision": "0"
주어진 텍스트 파일 내용으로 JSON을 생성하는 jq
명령어를 사용해보겠습니다. 주어진 텍스트를 파싱하고 원하는 JSON 형식으로 포맷팅하기 위해 jq
명령어를 사용할 수 있습니다.
아래의 명령어를 사용하면 됩니다.
jq -n '{
"Rx_Packets": "648233790",
"Rx_Bytes": "617839018055",
"Rx_Broadcast": "63695556",
"Rx_Multicast": "399605",
"Rx_Discard": "295574",
"Rx_Error": "0",
"Tx_Packets": "310319281",
"Tx_Bytes": "126893906437",
"Tx_Broadcast": "6",
"Tx_Multicast": "39569",
"Tx_Collision": "0"
}'
이 명령어를 실행하면 주어진 텍스트를 파싱하여 다음과 같은 JSON을 생성합니다.
{
"Rx_Packets": "648233790",
"Rx_Bytes": "617839018055",
"Rx_Broadcast": "63695556",
"Rx_Multicast": "399605",
"Rx_Discard": "295574",
"Rx_Error": "0",
"Tx_Packets": "310319281",
"Tx_Bytes": "126893906437",
"Tx_Broadcast": "6",
"Tx_Multicast": "39569",
"Tx_Collision": "0"
}
이렇게 생성된 JSON 객체를 원하는 대로 사용할 수 있습니다.
주어진 텍스트 파일에서 각 라인의 "키: 값" 쌍을 JSON 형식으로 만들어야 합니다.
아래의 명령어는 주어진 파일에서 데이터를 읽어와 원하는 형태의 JSON을 생성합니다.
awk -F ': ' '{ printf "\"%s\": \"%s\",\n", $1, $2 }' input.txt | sed '$s/,$//' | jq -Rs 'split("\n") | .[:-1] | join(", ") | "{" + . + "}"' | jq -s add
위 명령어는 다음 단계를 수행합니다.
awk
를 사용하여 각 줄을 "키: 값" 형식의 문자열로 포맷합니다.sed
를 사용하여 마지막 줄의 끝에 있는 마지막 쉼표를 제거합니다.jq
를 사용하여 줄을 배열로 분할하고 마지막 줄의 쉼표로 연결하여 JSON 객체를 생성합니다.- 다시 한 번
jq
를 사용하여 배열의 모든 객체를 병합하여 최종 JSON 객체를 만듭니다.
이렇게 하면 "Rx_Packets": "648233790"와 같이 각 항목이 실제 JSON 형식으로 들어가게 됩니다. 결과를 출력하거나 원하는 대로 활용할 수 있습니다.
jq
명령어에서 split("\n")
을 사용하면 각 줄을 분리하여 배열 요소로 처리합니다. 따라서 각 키-값 쌍이 배열의 각 요소로 나뉘게 됩니다. 이 경우, 각 요소는 아직 JSON 객체가 아닌 문자열로 처리됩니다.
원하는 결과를 얻으려면 추가 단계가 필요합니다. 아래는 더 나은 방법으로 JSON 객체를 만드는 방법입니다.
jq -Rs 'split("\n") | map( split(": ") | { (.[0]): .[1] } ) | add' input.txt
이 명령어는 다음 단계로 수행됩니다.
split("\n")
을 사용하여 각 줄을 분리합니다.map
함수를 사용하여 각 줄을split(": ")
을 통해 키-값 쌍 객체로 변환합니다.add
함수를 사용하여 모든 객체를 병합하여 최종 JSON 객체를 만듭니다.
이제 각 키-값 쌍이 올바른 JSON 객체로 처리되어 결과를 얻을 수 있습니다.
jq
에서 map()
함수는 주어진 입력 배열의 각 요소에 대해 지정된 작업을 수행하고 그 결과를 새로운 배열로 반환하는데 사용됩니다. map()
함수를 사용하면 입력 데이터를 변환하거나 처리할 수 있으며, 일반적으로 JSON 데이터를 조작하거나 필요한 형식으로 변환하는 데 유용합니다.
예를 들어, 다음은 map()
함수를 사용하여 입력 배열의 각 숫자를 제곱하는 간단한 jq
스크립트입니다.
[1, 2, 3, 4, 5] | map(. * .)
이 스크립트는 [1, 4, 9, 16, 25]
와 같이 각 숫자를 제곱하여 새로운 배열을 생성합니다. map()
함수는 입력 배열의 각 요소에 . * .
작업을 적용하고 그 결과를 반환합니다.
map()
함수를 사용하면 입력 데이터를 변환하거나 필터링하여 새로운 형식으로 구성할 수 있으며, 복잡한 JSON 데이터에서 원하는 정보를 추출하거나 형식을 변환하는 데 특히 유용합니다.
주어진 JSON 객체들을 하나의 JSON 객체로 합치려면 jq
를 사용하여 입력 데이터를 처리할 수 있습니다.
아래의 jq
명령어는 주어진 JSON 객체를 하나의 JSON 객체로 만듭니다.
jq -s 'reduce .[] as $item ({}; . + $item)' input.txt
이 명령어는 -s
플래그를 사용하여 입력 파일의 모든 JSON 객체를 배열로 묶고, 그런 다음 reduce
함수를 사용하여 배열 내의 모든 객체를 하나의 객체로 병합합니다.
실행하면 다음과 같이 하나의 JSON 객체로 합쳐진 결과를 얻을 수 있습니다.
{
"Rx_Packets": "648233790",
"Rx_Bytes": "617839018055",
"Rx_Broadcast": "63695556",
"Rx_Multicast": "399605",
"Rx_Discard": "295574",
"Rx_Error": "0",
"Tx_Packets": "310319281",
"Tx_Bytes": "126893906437",
"Tx_Broadcast": "6",
"Tx_Multicast": "39569",
"Tx_Collision": "0"
}
이제 주어진 JSON 객체들이 하나의 JSON 객체로 합쳐져 있습니다.
주어진 JSON 객체에 "a":"b" 키-값 쌍을 추가하려면 jq
를 사용하여 다음과 같이 명령어를 작성할 수 있습니다.
jq '. + {"a": "b"}' input.json
위 명령어는 주어진 JSON 객체에 { "a": "b" }
를 추가합니다. 결과로 나오는 JSON 객체에 "a":"b" 키-값 쌍이 포함됩니다. input.json
은 입력 파일의 이름으로 변경해야 합니다.
만약 기존 JSON 객체를 변경하지 않고 새로운 JSON 객체를 생성하고 싶다면 다음과 같이 명령어를 작성할 수 있습니다.
echo '{"a": "b"}' | jq --argjson input "$(cat input.json)" '. + $input'
이 명령어는 기존 JSON 객체와 새로운 JSON 객체를 합쳐서 새로운 JSON 객체를 생성하며, 기존 JSON 객체는 변경되지 않습니다.
구글 시트에 JSON 트래픽 값을 주기적으로 추가하기 위해서는 Python과 Google Sheets API를 사용할 수 있습니다. 아래는 이를 수행하기 위한 코드 예제입니다. 코드를 실행하려면 먼저 Google Sheets API를 활성화하고 필요한 라이브러리를 설치해야 합니다.
- Google API Console에서 프로젝트를 생성하고 Google Sheets API를 활성화합니다.
credentials.json
파일을 다운로드하고 프로젝트 디렉토리에 저장합니다.- 필요한 Python 라이브러리를 설치합니다:
pip install gspread oauth2client
- 다음은 JSON 데이터를 수집하고 Google Sheets에 추가하는 Python 코드입니다.
credentials.json
파일은 Google API Console에서 다운로드한 파일입니다. 그리고SHEET_ID
는 대상 Google 시트의 ID로 바꿔야 합니다.
import json
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# Google Sheets API 정보 설정
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
client = gspread.authorize(creds)
# 대상 Google 시트 열기 (SHEET_ID는 대상 시트의 ID로 바꿔야 함)
SHEET_ID = 'your_spreadsheet_id'
sheet = client.open_by_key(SHEET_ID).sheet1
# JSON 데이터
data = {
"Rx_Packets": "648233790",
"Rx_Bytes": "617839018055",
"Rx_Broadcast": "63695556",
"Rx_Multicast": "399605",
"Rx_Discard": "295574",
"Rx_Error": "0",
"Tx_Packets": "310319281",
"Tx_Bytes": "126893906437",
"Tx_Broadcast": "6",
"Tx_Multicast": "39569",
"Tx_Collision": "0"
}
# JSON 데이터를 Google 시트에 추가
row_to_insert = [data['Rx_Packets'], data['Rx_Bytes'], data['Rx_Broadcast'], data['Rx_Multicast'],
data['Rx_Discard'], data['Rx_Error'], data['Tx_Packets'], data['Tx_Bytes'],
data['Tx_Broadcast'], data['Tx_Multicast'], data['Tx_Collision']]
sheet.append_row(row_to_insert)
print("데이터가 Google Sheets에 추가되었습니다.")
이 코드를 실행하면 JSON 데이터가 Google Sheets에 추가됩니다. 필요에 따라 주기적으로 실행되도록 스케줄러를 설정하실 수 있습니다.
Google Sheets에서 데이터를 사용하여 통계 그래프를 생성하는 방법은 다음과 같은 단계로 수행할 수 있습니다.
- 데이터 정리: 먼저 Google Sheets에서 데이터를 정리합니다. 이미 데이터가 시트에 추가되어 있다고 가정하겠습니다. 데이터가 다음과 같은 형태로 정리되어 있는 것으로 가정합니다.
여기서 "Date" 열은 날짜를 나타내며, "Rx_Packets", "Rx_Bytes", "Tx_Packets" 등의 열은 그래프를 그릴 데이터를 나타냅니다.| A | B | C | D | |-------|-----------|-----------|------------| | Date | Rx_Packets| Rx_Bytes | Tx_Packets | |-------|-----------|-----------|------------| | Date1 | Value1 | Value2 | Value3 | | Date2 | Value4 | Value5 | Value6 | | Date3 | Value7 | Value8 | Value9 | | ... | ... | ... | ... |
- 데이터 선택: 그래프를 그릴 범위를 선택합니다. 예를 들어, "Date" 열을 x-축으로 사용하고 "Rx_Packets" 열을 y-축으로 사용하여 그래프를 그리려면 "Date" 열과 "Rx_Packets" 열을 선택합니다.
- 그래프 생성: 선택한 데이터를 기반으로 그래프를 생성합니다.
- "삽입" 메뉴에서 "차트" 옵션을 선택합니다.
- "차트 편집기" 팝업 창이 나타납니다. 여기서 차트 유형을 선택하고 설정합니다. 예를 들어, "선 그래프"를 선택하고 필요한 설정(색상, 라벨 등)을 구성합니다.
- 그래프 제목과 레이블 설정: 그래프에 제목과 레이블을 추가합니다.
- "차트 제목"을 설정하여 그래프에 제목을 추가합니다.
- 축 레이블과 범례 레이블을 추가하여 그래프를 이해하기 쉽게 만듭니다.
- 차트 위치 설정: 그래프를 시트에 삽입하고 위치를 조정합니다. 그래프를 삽입하려는 위치를 선택하고 "삽입" 버튼을 클릭합니다.
- 그래프 형태 수정: 그래프의 형태와 스타일을 필요에 따라 수정합니다. 그래프를 선택하고 "편집" 옵션을 사용하여 변경할 수 있습니다.
- 통계 그래프 업데이트: 데이터가 주기적으로 업데이트되는 경우, 그래프를 업데이트하려면 시트에 새로운 데이터를 추가하고 그래프가 자동으로 업데이트되도록 설정합니다.
이제 이러한 단계를 따라 Google Sheets에서 통계 그래프를 만들 수 있어야 합니다. 그래프를 그릴 데이터와 원하는 그래프 유형에 따라 단계를 조정하실 수 있습니다.
댓글