처음으로 서버 상태 데이터 수집 기능은 주로 Django 백엔드에서 작성했다.
차근차근 작성한 코드와 기능을 설명하겠따
처음으로 모델을 작성했다.
1) models.py
from django.db import models
class ServerStatus(models.Model):
server_name = models.CharField(max_length=255) # 서버 이름
cpu_usage = models.FloatField() # CPU 사용률
memory_usage = models.FloatField() # 메모리 사용량
disk_usage = models.FloatField() # 디스크 사용량
network_traffic = models.FloatField() # 네트워크 트래픽
timestamp = models.DateTimeField(auto_now_add=True) # 데이터 수집 시간
def __str__(self):
return f"CPU: {self.cpu_usage}%, Memory: {self.memory_percentage}%"
serverStatus 모델은 서버의 cpu 사용량, 메모리 총량, 사용된 메모리, 메모리 사용 비율을 저장한다.
timestamp 필드는 데이터가 저장되는 시간을 기록한다.
이모델을 통해 수집된 서버 상태 데이터를 데이터베이스에 저장하게 되는 것이다.
추후에 디스크 사용량과 네트워크 트래픽, 로그 기록들을 추가로 작성할것이다.
2) serializers.py
from rest_framework import serializers
from .models import ServerStatus
class ServerStatusSerializer(serializers.ModelSerializer):
class Meta:
model = ServerStatus
fields = '__all__'
ServerStatusSerializer 은 ServerStatus 모델의 데이터를 JSON 형식으로 변환 하거나 JSON 데이터를 ServerStatus 모델로 변환할때 사용된다.
fields = 'all'을 통해 모든 필드를 포함 하도록 지정했다.
이를 통해 API 가 데이터베이스 모델과 통신 할수 있게된다.
3) views.py
from django.shortcuts import render
from rest_framework import generics
from .models import ServerStatus
from .serializers import ServerStatusSerializer
import psutil
from django.http import JsonResponse
class ServerStatusListCreate(generics.ListCreateAPIView):
queryset = ServerStatus.objects.all()
serializer_class = ServerStatusSerializer
def server_status(request):
cpu_usage = psutil.cpu_percent()
memory_info = psutil.virtual_memory()
response_data = {
'cpu_usage': cpu_usage,
'memory_total': memory_info.total,
'memory_used': memory_info.used,
'memory_percentage': memory_info.percent,
}
return JsonResponse(response_data)
# Create your views here.
뷰 파일은 클라이언트의 요청을 처리하고 응답을 반환하는 로직을 담고 있는 파일이다.
ServerStatusListCreate함수는 generics.ListCreateAPIView를 사용하여 GET 요청 시 서버 상태 데이터를 리스트로 반환하고, POST 요청 시 새로운 서버 상태 데이터를 생성할 수 있습니다.
server_status: psutil 라이브러리를 사용하여 현재 서버의 CPU 사용량과 메모리 상태를 실시간으로 수집합니다. 이 수집된 데이터를 JSON 형태로 반환합니다.
4) url.py
from django.urls import path
from .views import ServerStatusListCreate, server_status
urlpatterns = [
path('api/server-status/', ServerStatusListCreate.as_view(), name='server-status-list-create'),
path('api/server-status/metrics/', server_status, name='server-status-metrics'),
]
URL 패턴과 뷰를 연결하는 역할을 해주는 파일로써
api/server-status/ 경로는 ServerStatusListCreate 뷰와 연결되어 있어, 이 URL로 접근하면 서버 상태 데이터를 수집하거나 조회할 수 있습니다.
api/server-status/metrics/ 경로는 server_status 뷰와 연결되어, 이 URL로 접근하면 실시간 서버 상태 데이터를 JSON으로 받아볼 수 있습니다.
다 작성하였다면 Django 설정 파일인 settings.py 파일 수정을 통해 작성한 벡엔드 API 설정을 완료하도록 해야한다.
5) settings.py
5-1) INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # Django REST Framework
'monitoring', # 서버 모니터링을 위한 커스텀 앱
'django_prometheus', # Prometheus와의 통합을 위한 Django 앱
'corsheaders', # CORS를 처리하기 위한 앱
]
Django 프로젝트에서 사용되는 모든 애플리케이션과 서드파티 패키지를 나열하는 리스트이다. 여기에 추가된 앱들은 django 프로젝트에서 사용할수 있고 인식하고 관리할수 있도록 해주는 리스트이다.
Django REST Framework (rest_framework): Django에서 API를 구축할 수 있는 강력한 프레임워크입니다. INSTALLED_APPS에 추가하여 프로젝트에서 RESTful API를 쉽게 구축할 수 있도록 합니다.
Prometheus 통합 (django_prometheus): Prometheus와의 통합을 위한 앱으로, Django 애플리케이션의 메트릭을 수집하고 노출할 수 있도록 도와줍니다.
CORS Headers (corsheaders): 다른 도메인에서 온 요청을 처리할 수 있게 해주는 미들웨어로, 외부 클라이언트(예: React 프론트엔드)가 Django 백엔드 API를 호출할 수 있게 해줍니다.
5-2) MIDDLEWARE
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_prometheus.middleware.PrometheusBeforeMiddleware', # Prometheus용 미들웨어 (요청 처리 전)
'django_prometheus.middleware.PrometheusAfterMiddleware', # Prometheus용 미들웨어 (요청 처리 후)
'corsheaders.middleware.CorsMiddleware', # CORS 처리 미들웨어
]
Django 요청/응답 처리 과정에서 실행되는 미들웨어 리스트이다. 미들웨어는 요청이 뷰로 가기전에, 그리고 응답이 클라이언트로 가기전에 중간에서 다양한 작업들을 수행해준다.
5-3) DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # MySQL 백엔드 엔진 사용
'NAME': 'monitoring_db', # 데이터베이스 이름
'USER': '@@@', # 데이터베이스 사용자 이름
'PASSWORD': '****', # 데이터베이스 사용자 비밀번호
'HOST': '@@@.@@@.@@@.@@@', # MySQL 서버 호스트 (외부 서버 IP)
'PORT': '3306', # MySQL 서버 포트
}
}
Django 프로젝트에서 사용할 데이터베이스 설정을 정의하는 부분입니다. MySQL을 사용하며, 해당 프로젝트의 데이터베이스 연결 정보를 설정합니다.
이 코드들로 서버의 상태를 실시간으로 수집할수 있게 되었다. 다음은 프론트 작업을 해보도록 하겠다.