본문 바로가기
네트워크 (LAN,WAN)

네트워크 장비 설정을 구글 시트로 자동수집 모니터링 관리

by 날으는물고기 2023. 9. 24.

네트워크 장비 설정을 구글 시트로 자동수집 모니터링 관리

네트워크 장비 설정 등 상태정보를 모니터링하고 자동화하기 위해서는 다양한 도구와 라이브러리를 사용할 수 있습니다. Python은 네트워크 모니터링 및 자동화를 위한 매우 강력한 도구 중 하나입니다. 아래는 Python을 사용하여 네트워크 장비 설정 상태를 모니터링하는 간단한 코드 예제입니다. 이 코드는 Telnet을 사용하여 장비에 연결하고 명령을 실행하며, 특정 설정이나 상태를 검사하는 데 사용될 수 있습니다. 하지만 실제 환경에 따라 다양한 프로토콜 및 라이브러리를 사용해야 할 수 있습니다.

 

먼저, telnetlib 라이브러리를 사용하여 Telnet을 통해 장비에 연결하고 명령을 실행하는 코드를 제공합니다. 이 코드는 Telnet을 통해 Cisco 장비에 연결하고 show running-config 명령을 실행하여 현재 설정을 가져옵니다.

import telnetlib

# 장비 정보 설정
hostname = '장비_IP_주소'
username = '사용자명'
password = '비밀번호'

# Telnet 연결 함수
def telnet_connect(hostname, username, password):
    try:
        tn = telnetlib.Telnet(hostname)
        tn.read_until(b"Username: ")
        tn.write(username.encode('ascii') + b"\n")
        tn.read_until(b"Password: ")
        tn.write(password.encode('ascii') + b"\n")
        return tn
    except Exception as e:
        print(f"Telnet 연결 오류: {str(e)}")
        return None

# Telnet 연결 설정
tn = telnet_connect(hostname, username, password)

if tn:
    # 설정 상태 확인
    tn.write(b"show running-config\n")
    config_data = tn.read_until(b"end")
    print(config_data.decode('utf-8'))
    tn.close()
else:
    print("Telnet 연결 실패")

이 코드는 Telnet을 사용하여 장비에 연결하고 설정 상태를 가져오는 간단한 예제입니다. 실제 환경에서는 SSH 또는 다른 프로토콜을 사용하거나, 다양한 라이브러리와 모듈을 사용하여 자동화 및 모니터링을 보다 효과적으로 구현할 수 있습니다. 또한 설정 변경을 자동화하기 위해 이 코드를 확장하고 예외 처리를 추가하여 안정성을 높일 수 있습니다.

 

SSH를 사용하여 장비에 연결하고 설정 상태를 모니터링하기 위해 paramiko 라이브러리를 사용할 수 있습니다. paramiko는 Python에서 SSH 연결을 설정하고 명령을 실행하는데 사용되는 라이브러리입니다. 아래는 paramiko를 사용하여 SSH로 장비에 연결하고 설정 상태를 가져오는 코드 예제입니다.

 

먼저, paramiko 라이브러리를 설치해야 합니다. 아래와 같이 명령어를 사용하여 설치할 수 있습니다.

pip install paramiko

다음은 SSH를 사용하여 장비에 연결하고 설정 상태를 가져오는 Python 코드입니다.

import paramiko

# 장비 정보 설정
hostname = '장비_IP_주소'
username = '사용자명'
password = '비밀번호'

# SSH 연결 함수
def ssh_connect(hostname, username, password):
    try:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname, username=username, password=password)
        return client
    except Exception as e:
        print(f"SSH 연결 오류: {str(e)}")
        return None

# SSH 연결 설정
ssh_client = ssh_connect(hostname, username, password)

if ssh_client:
    try:
        # SSH 세션 시작
        ssh_session = ssh_client.invoke_shell()

        # 설정 상태 확인 명령 실행 (예: show running-config)
        ssh_session.send("show running-config\n")
        while True:
            output = ssh_session.recv(1024).decode('utf-8')
            if not output:
                break
            print(output, end='')

        # SSH 세션 종료
        ssh_session.close()
    except Exception as e:
        print(f"명령 실행 오류: {str(e)}")
    finally:
        # SSH 클라이언트 연결 종료
        ssh_client.close()
else:
    print("SSH 연결 실패")

위의 코드는 paramiko를 사용하여 SSH로 장비에 연결하고 설정 상태를 가져오는 예제입니다. 설정 변경을 자동화하려면 SSH 세션을 통해 설정 변경 명령을 전송할 수 있습니다. 이 코드를 확장하여 자동화 작업을 추가하거나 예외 처리를 개선할 수 있습니다.

 

네트워크 장비의 현재 설정을 명령어를 통해 가져와서 그 내용을 파싱하여 JSON 형태로 변환하는 Python 코드를 만들어보겠습니다. 이 코드는 SSH를 사용하여 장비에 연결하고 설정을 가져옵니다. 그런 다음, 설정 내용을 파싱하여 JSON 형식으로 변환합니다. JSON 형식으로 저장하면 데이터를 쉽게 분석하고 활용할 수 있습니다.

import paramiko
import json

# 장비 정보 설정
hostname = '장비_IP_주소'
username = '사용자명'
password = '비밀번호'

# SSH 연결 함수
def ssh_connect(hostname, username, password):
    try:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname, username=username, password=password)
        return client
    except Exception as e:
        print(f"SSH 연결 오류: {str(e)}")
        return None

# SSH 연결 설정
ssh_client = ssh_connect(hostname, username, password)

if ssh_client:
    try:
        # SSH 세션 시작
        ssh_session = ssh_client.invoke_shell()

        # 설정 상태 가져오기 명령 실행 (예: show running-config)
        ssh_session.send("show running-config\n")
        output = ""
        while True:
            data = ssh_session.recv(1024).decode('utf-8')
            output += data
            if not data:
                break

        # SSH 세션 종료
        ssh_session.close()

        # 설정 내용을 JSON으로 파싱
        config_dict = {}
        current_section = None
        for line in output.split('\n'):
            line = line.strip()
            if line.startswith("!"):
                continue
            if line.startswith(" "):
                if current_section:
                    config_dict[current_section].append(line)
            else:
                current_section = line
                config_dict[current_section] = []

        # JSON 형태로 저장
        json_config = json.dumps(config_dict, indent=4)

        # JSON 파일로 저장 (선택적)
        with open('config.json', 'w') as json_file:
            json_file.write(json_config)

        # JSON 출력
        print(json_config)

    except Exception as e:
        print(f"명령 실행 오류: {str(e)}")
    finally:
        # SSH 클라이언트 연결 종료
        ssh_client.close()
else:
    print("SSH 연결 실패")

위 코드에서, config_dict 딕셔너리를 사용하여 설정 정보를 저장하고, json.dumps 함수를 사용하여 이 딕셔너리를 JSON 형식으로 변환합니다. 설정 정보는 JSON 형식으로 출력되며, 필요한 경우 JSON 파일로 저장할 수 있습니다.

 

JSON 형식은 설정 정보를 구조화하고 분석하기 쉽게 만들어주므로 네트워크 장비 설정을 모니터링하거나 자동화 작업을 수행하는 데 유용합니다.

 

수집된 JSON 데이터를 Google 드라이브에 업로드하는 작업은 Google Drive API를 사용하여 수행할 수 있습니다. 이 작업을 수행하기 위해 다음 단계를 따라야 합니다.

  1. Google Cloud Console에서 프로젝트 생성 및 API 활성화:
    • Google Cloud Console (https://console.cloud.google.com/)에 로그인하고 새 프로젝트를 만듭니다.
    • "라이브러리" 섹션에서 "Google Drive API"를 검색하여 활성화합니다.
    • "사용자 인증 정보" 섹션에서 "사용자 인증 정보 만들기"를 선택하여 OAuth 2.0 클라이언트 ID를 생성합니다. 이때, "응용 프로그램 유형"을 "데스크톱 앱"으로 설정하세요. JSON 형식의 클라이언트 비밀번호 파일을 다운로드하십시오.
  2. 필요한 Python 라이브러리 설치:
    • Google API 클라이언트 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 설치하세요.
    • pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  3. JSON 데이터를 Google 드라이브에 업로드하는 코드를 작성합니다. 아래는 코드와 함께 설명입니다.
import os
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google 드라이브 API 사용을 위한 인증 정보 로드
creds = None
SCOPES = ['https://www.googleapis.com/auth/drive.file']

# 서비스 계정 키 파일의 경로를 지정합니다.
SERVICE_ACCOUNT_FILE = '서비스_계정_키.json'  # 다운로드한 클라이언트 비밀번호 파일

if os.path.exists(SERVICE_ACCOUNT_FILE):
    creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES
    )

# Google 드라이브 서비스 빌드
drive_service = build('drive', 'v3', credentials=creds)

# JSON 데이터 파일 경로 (업로드할 파일 경로)
json_file_path = 'config.json'

# Google 드라이브에 업로드할 파일 이름 설정
drive_file_name = 'config.json'  # 업로드 후 Google 드라이브에서 보일 파일 이름

# 파일 업로드
file_metadata = {'name': drive_file_name}
media = MediaFileUpload(json_file_path, mimetype='application/json')

file = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(f'File ID: {file.get("id")} - 업로드가 완료되었습니다.')

위 코드에서는 Google 드라이브 API를 사용하여 JSON 파일을 Google 드라이브에 업로드합니다. 코드 내에서 SERVICE_ACCOUNT_FILE 변수에 서비스 계정 키 파일의 경로를 지정해야 합니다. 또한 json_file_path 변수에 업로드할 JSON 파일의 경로를 지정합니다.

 

업로드가 성공하면 업로드된 파일의 ID가 출력됩니다. 이제 Google 드라이브에서 해당 파일을 확인할 수 있어야 합니다.

이 코드를 실행하기 전에 필요한 라이브러리를 설치하고, Google Cloud Console에서 프로젝트 및 OAuth 2.0 클라이언트 ID를 설정해야 합니다. 또한 Google 드라이브 API에 대한 권한을 부여해야 합니다.

JSON 데이터를 Google Sheets에 추가하려면 gspread 라이브러리를 사용하여 Google Sheets API와 상호 작용해야 합니다. 먼저, gspread를 설치해야 합니다.

pip install gspread

그런 다음, Google Sheets에 JSON 데이터를 추가하는 코드를 작성해보겠습니다. 아래 코드는 gspread를 사용하여 Google Sheets에 접속하고 JSON 데이터를 시트에 추가하는 예제입니다.

  1. Google Sheets API 및 서비스 계정 키 설정:
    • Google Cloud Console에서 새 프로젝트를 만들고 Google Sheets API를 활성화합니다.
    • 서비스 계정 키를 생성하고 JSON 형식으로 다운로드합니다.
  2. 시트 준비:
    • Google Sheets에서 데이터를 저장할 새 시트를 만들어주세요. 이 시트에는 JSON 데이터를 저장할 열을 미리 준비해야 합니다.
  3. 아래 코드를 사용하여 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('서비스_계정_키.json', scope)

# Google Sheets에 연결
client = gspread.authorize(creds)

# 시트 이름 지정 (시트가 없으면 새로 생성됩니다)
sheet_name = '시트_이름'  # 시트의 이름을 여기에 입력하세요

try:
    # 시트 열기 또는 생성
    sheet = client.open(sheet_name).sheet1
except gspread.SpreadsheetNotFound:
    # 시트가 없는 경우 새 시트 생성
    client.create(sheet_name)
    sheet = client.open(sheet_name).sheet1

# JSON 데이터 (예시)
json_data = {
    "Name": "John",
    "Age": 30,
    "City": "New York"
}

# JSON 데이터를 시트에 추가
sheet.append_table(list(json_data.values()))
print("JSON 데이터가 시트에 추가되었습니다.")

이 코드는 gspread를 사용하여 Google Sheets에 연결하고, 지정된 시트에 JSON 데이터를 추가합니다. json_data 변수에는 추가할 JSON 데이터가 포함되어 있으며, 각 항목을 시트의 열에 추가합니다.

 

위 코드에서 서비스_계정_키.json 파일에는 Google Cloud Console에서 다운로드한 서비스 계정 키의 경로를 지정해야 합니다. 또한 sheet_name 변수에는 데이터를 추가하려는 Google Sheets 시트의 이름을 지정해야 합니다.

 

코드를 실행하면 JSON 데이터가 시트에 추가됩니다. 이 코드를 사용하면 Python에서 Google Sheets를 사용하여 데이터를 쉽게 관리할 수 있습니다.

Google Apps Script를 사용하여 Google Sheets의 정보 변경 발생 시 SNS나 다른 클라우드 서비스로 알림을 보내는 방법은 다음과 같은 단계로 이루어집니다. 이 예제에서는 Slack 워크스페이스에 메시지를 보내는 방법을 설명하겠습니다.

  1. Google Sheets에 Apps Script 추가하기:
    • Google Sheets 파일을 열고 상단 메뉴에서 "확장 도구" > "Apps Script"를 선택하여 Apps Script 편집기를 엽니다.
  2. Apps Script 함수 작성:
    • Apps Script 편집기에서 onEdit 함수를 작성합니다. 이 함수는 Google Sheets에서 셀을 편집할 때마다 실행됩니다.
function onEdit(e) {
  // 이벤트 객체에서 편집된 범위와 값 가져오기
  var range = e.range;
  var editedValue = range.getValue();

  // 이벤트 발생 시간 가져오기
  var eventTimestamp = e.timestamp;

  // Slack Webhook URL 설정
  var slackWebhookUrl = 'YOUR_SLACK_WEBHOOK_URL_HERE';

  // Slack 메시지 작성
  var slackMessage = {
    text: 'Google Sheets에 변경 사항이 있습니다:',
    attachments: [
      {
        color: '#36a64f',
        title: '편집 내용:',
        text: editedValue,
      },
      {
        color: '#ff0000',
        title: '편집 시간:',
        text: eventTimestamp,
      },
    ],
  };

  // Slack에 메시지 보내기
  sendToSlack(slackWebhookUrl, slackMessage);
}

// Slack에 메시지를 보내는 함수
function sendToSlack(webhookUrl, message) {
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(message),
  };

  UrlFetchApp.fetch(webhookUrl, options);
}
  1. Slack Webhook URL 설정:
    • 위의 코드에서 'YOUR_SLACK_WEBHOOK_URL_HERE' 부분을 실제 Slack 워크스페이스의 Incoming Webhook URL로 대체합니다. Slack 웹훅을 설정하려면 Slack에서 Incoming Webhook 앱을 설치하고 웹훅 URL을 생성해야 합니다.
  2. Apps Script 프로젝트 저장 및 배포:
    • Apps Script 편집기에서 "파일" > "프로젝트 설정"으로 이동하여 프로젝트 설정을 열고, "배포" 탭에서 새로운 버전을 만듭니다. 그런 다음, 웹 앱으로 배포합니다.
  3. 권한 설정:
    • Apps Script는 Google Sheets에 대한 접근 권한을 필요로 합니다. Apps Script 편집기에서 "리소스" > "고급 Google 서비스"로 이동하여 "Google Sheets API"를 활성화하고 스크립트에 권한을 부여합니다.
  4. Apps Script 트리거 설정:
    • Apps Script 편집기에서 "프로젝트 트리거"로 이동하여 "onEdit" 함수를 "스프레드시트 편집 시"로 실행되도록 트리거를 설정합니다.

이제 Google Sheets에서 정보가 편집되면 Apps Script가 실행되고, 해당 정보를 Slack 워크스페이스에 전송합니다. 이와 유사한 방법으로 다른 클라우드 서비스에 알림을 보낼 수 있습니다. 단, 해당 서비스의 API 또는 웹훅을 사용하여 연동합니다.

 

위의 단계를 따라 하면 Google Sheets의 변경 사항을 모니터링하고 원하는 클라우드 서비스로 알림을 보낼 수 있습니다.

Network Graphs in Google Sheets - How to visualize organizational networks using only the Google Apps Script environment - https://medium.com/mlearning-ai/network-graphs-in-google-sheets-feda6891f18d

728x90

댓글