리눅스 서버 관리에서 가장 중요한 측면 중 하나는 용량 관리입니다. 서버의 디스크 용량이 부족하면 서비스 중단이 발생하고, 시스템 성능이 저하될 수 있습니다. 따라서 용량 관리에 대한 자동화는 매우 중요합니다.
이 블로그 포스트에서는 파이썬을 사용하여 리눅스 서버의 용량 관리를 자동화하는 방법에 대해 알아보겠습니다.
필요한 패키지 설치
먼저, 파이썬에서 SSH 연결을 할 수 있는 패키지인 paramiko
를 설치해야 합니다. 파이썬 패키지 관리자인 pip
를 사용하여 설치할 수 있습니다.
pip install paramiko
서버 용량 정보 가져오기
파이썬의 paramiko
패키지를 이용하여 SSH를 통해 리눅스 서버에 연결하고, df
명령어를 사용하여 서버의 디스크 용량 정보를 가져올 수 있습니다. 아래의 코드는 이를 수행하는 함수입니다.
import paramiko
def get_disk_usage(hostname, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command("df -h")
output = stdout.read().decode()
ssh.close()
return output
위의 함수는 호스트 이름, 사용자 이름 및 패스워드를 매개변수로 받고, df -h
명령어를 사용하여 리눅스 서버의 디스크 용량 정보를 가져옵니다. 이 정보는 문자열로 반환됩니다.
용량 정보 파싱하기
파싱된 용량 정보에서 용량이 부족한 디렉토리를 식별하는 것이 우리의 목표입니다. 이를 위해 re
모듈을 사용하여 출력된 문자열을 파싱할 수 있습니다. 아래의 코드는 이를 수행하는 함수입니다.
import re
def parse_disk_usage(output):
usage_pattern = r"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)%\s+(.+)"
lines = output.split("\n")
usages = []
for line in lines[1:]:
match = re.search(usage_pattern, line)
if match:
filesystem = match.group(1)
size = match.group(2)
used = match.group(3)
available = match.group(4)
percentage = match.group(6)
directory = match.group(7)
usages.append({
"filesystem": filesystem,
"size": size,
"used": used,
"available": available,
"percentage": percentage,
"directory": directory
})
return usages
위의 함수는 output
문자열을 줄 단위로 분리하고, 정규 표현식을 사용하여 각 줄에서 필요한 정보를 추출하여 딕셔너리로 반환합니다.
용량 부족 경고하기
파싱된 용량 정보에서 용량이 부족한 디렉토리를 식별하여 해당 디렉토리에 대해 경고 메시지를 출력하도록 합시다. 아래의 코드는 이를 수행하는 함수입니다.
def check_disk_usage(usages, threshold):
for usage in usages:
if int(usage["percentage"]) >= threshold:
print(f"WARNING: {usage['directory']} is running out of disk space!")
위의 함수는 usages
리스트와 용량 경계값 threshold
를 매개변수로 받습니다. 용량이 경계값을 초과하는 디렉토리가 있다면 해당 디렉토리에 대해 경고 메시지를 출력합니다.
전체 코드
아래는 위에서 정의한 함수들을 조합하여 전체 코드를 작성한 예시입니다.
import paramiko
import re
def get_disk_usage(hostname, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command("df -h")
output = stdout.read().decode()
ssh.close()
return output
def parse_disk_usage(output):
usage_pattern = r"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)%\s+(.+)"
lines = output.split("\n")
usages = []
for line in lines[1:]:
match = re.search(usage_pattern, line)
if match:
filesystem = match.group(1)
size = match.group(2)
used = match.group(3)
available = match.group(4)
percentage = match.group(6)
directory = match.group(7)
usages.append({
"filesystem": filesystem,
"size": size,
"used": used,
"available": available,
"percentage": percentage,
"directory": directory
})
return usages
def check_disk_usage(usages, threshold):
for usage in usages:
if int(usage["percentage"]) >= threshold:
print(f"WARNING: {usage['directory']} is running out of disk space!")
hostname = "your_server_hostname"
username = "your_username"
password = "your_password"
threshold = 90
output = get_disk_usage(hostname, username, password)
usages = parse_disk_usage(output)
check_disk_usage(usages, threshold)
위의 코드를 사용하면 파이썬을 통해 리눅스 서버의 용량 관리를 자동화할 수 있습니다. 서버 용량이 부족한 경우 경고 메시지를 받을 수 있으므로, 서버 관리에 큰 도움이 됩니다.