메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

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

데브카페

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)

Comments