행위

Streamlit os cpu disk io network 사용률 모니터링

DB CAFE

thumb_up 추천메뉴 바로가기


Streamlit os cpu disk io network 사용률 모니터링[편집]

import streamlit as st
import psutil
import time
import pandas as pd
import plotly.express as px

import streamlit as st
import psutil
import time
import pandas as pd

# Streamlit 애플리케이션 타이틀 설정
st.title("System Monitoring Dashboard")

# 그래프 초기화
if 'cpu_data' not in st.session_state:
    st.session_state.cpu_data = []
    st.session_state.disk_io_data = []
    st.session_state.net_io_data = []

# 그래프 업데이트 주기 설정 (초)
refresh_rate = 1  # 1초마다 업데이트

# 시스템 사용률을 계속 모니터링하여 실시간으로 표시하는 함수
def update_data():
    # CPU 사용율
    cpu_percent = psutil.cpu_percent(interval=0.5)
    st.session_state.cpu_data.append(cpu_percent)
    
    # Disk I/O
    disk_io = psutil.disk_io_counters()
    read_bytes = disk_io.read_bytes / (1024 * 1024)  # MB 단위
    write_bytes = disk_io.write_bytes / (1024 * 1024)  # MB 단위
    st.session_state.disk_io_data.append((read_bytes, write_bytes))

    # Network I/O
    net_io = psutil.net_io_counters()
    bytes_sent = net_io.bytes_sent / (1024 * 1024)  # MB 단위
    bytes_recv = net_io.bytes_recv / (1024 * 1024)  # MB 단위
    st.session_state.net_io_data.append((bytes_sent, bytes_recv))
    
    # 최근 60개의 데이터만 유지
    if len(st.session_state.cpu_data) > 60:
        st.session_state.cpu_data.pop(0)
        st.session_state.disk_io_data.pop(0)
        st.session_state.net_io_data.pop(0)

# 실시간으로 차트를 업데이트하는 함수
def plot_charts():
    # CPU 사용률 차트
    st.subheader("CPU Usage (%)")
    cpu_chart = pd.DataFrame(st.session_state.cpu_data, columns=["CPU Usage"])
    st.line_chart(cpu_chart)

    # Disk I/O 차트
    st.subheader("Disk I/O (MB)")
    disk_io_chart = pd.DataFrame(st.session_state.disk_io_data, columns=["Read (MB)", "Write (MB)"])
    st.line_chart(disk_io_chart)

    # Network I/O 차트
    st.subheader("Network I/O (MB)")
    net_io_chart = pd.DataFrame(st.session_state.net_io_data, columns=["Bytes Sent (MB)", "Bytes Received (MB)"])
    st.line_chart(net_io_chart)

# Streamlit 실시간 업데이트 루프
placeholder = st.empty()  # 차트를 갱신할 공간을 미리 확보

while True:
    update_data()
    with placeholder.container():  # 같은 공간에 차트 갱신
        plot_charts()
    time.sleep(refresh_rate)