모든 코어를 합쳐 쉰 시간을 뺀 비율이다. 2코어뿐이라 한 가지 일이 코어 하나를 다 써도 50% 로 보인다. 아래 숫자 셋은 1·5·15분 평균 부하로, 코어 수(2)보다 크면 일이 밀리고 있다는 뜻이다.
메모리
캐시처럼 도로 내줄 수 있는 몫을 뺀 실제 사용률이다. 리눅스는 남는 메모리를 캐시로 채워 두므로 그냥 남은 양만 보면 늘 모자라 보인다. 스왑(디스크를 메모리 대신 쓰는 자리)을 건드리고 있으면 옆에 같이 뜬다 — 그게 보이면 메모리가 진짜 모자란 것이다.
트래픽
바깥과 이어진 랜(eno1)이 주고받은 누적 바이트의 차로 낸 속도다. ↓ 는 받기, ↑ 는 보내기. 비교할 직전 값이 없는 첫 표본은 비어 있고, 서버가 다시 켜져 누적값이 거꾸로 줄면 그 구간은 버린다.
온도
CPU 는 커널 센서를 5초마다 직접, SSD 는 수집기가 1분마다 잰 값이라 갱신 간격이 다르다. CPU 80°C · SSD 60°C 부터 주의, CPU 90°C · SSD 70°C 부터 위험으로 칸 색이 바뀐다(둘 중 나쁜 쪽을 따른다).
TCP 연결
지금 맺어져 있는 연결 수다. 웹 접속만이 아니라 SSH·DB 연결도 들어가므로 접속자 수와 같지 않다.
그래프 왼쪽
위의 CPU·메모리를 최근 10분(5초 × 120칸) 쌓은 것이다. 세로 기준은 100% 고정이다.
그래프 오른쪽
받기·보내기 속도다. 세로 기준은 고정이 아니라 그동안의 최대값이고 그 값은 오른쪽 위에 적힌다 — 모양만 보고 다른 때와 견주면 안 된다.
공통
왼쪽이 과거, 오른쪽 끝이 지금이다. 처음 열면 오른쪽부터 차오른다. 이 기록은 화면 메모리에만 있어 새로 고치면 사라진다.
CPU메모리%받기보내기
사양 · 프로그램
기기 · CPU · 메모리
이 서버가 어떤 기계인지다. 바뀔 일이 없는 값이라 참고용이다.
OS · 커널
깔려 있는 운영체제와 그 핵심 버전이다. 커널이 올라가면 재부팅해야 적용된다.
가동
마지막 부팅 이후 흐른 시간이다. 매일 새벽에 다시 켜지므로 보통 하루를 넘지 않는다 — 넘었다면 그 재기동이 돌지 않은 것이다.
서비스
active 가 정상이고 그 밖의 값이면 빨갛게 뜬다. nginx 는 웹 서버, PHP-FPM 은 PHP 실행, MariaDB 는 DB, fail2ban 은 차단 문지기, SSH 는 원격 접속이다. 하나라도 꺼지면 그 기능만 멈춘다.
설치 패키지
홈페이지가 기대고 있는 프로그램의 버전이다. 명령을 돌리지 않고 패키지 관리자 기록에서 읽는다.
업데이트 가능 개수
올릴 수 있는 패키지가 몇 개인지다. 수집기가 1시간에 한 번만 세고, 올리는 일은 사람이 한다.
직접 설치 패키지 OS 기본 제외
무엇인가
이 서버에 일부러 들인 프로그램이다. 웹하드 미리보기의 ffmpeg·poppler-utils, 압축의 zip·7z, PHP 확장, 관리 도구 등이 여기 나온다.
무엇을 뺐나
설치할 때 딸려 들어온 패키지(약 900개)와 OS 가 원래 갖고 오는 것 — bash·grep 같은 필수, ubuntu-server 같은 묶음, 커널, OS 설치 프로그램이 넣은 부팅·네트워크·SSH — 은 뺐다.
안 나오는 것
패키지 관리자(APT)를 거치지 않고 실행 파일을 직접 놓은 프로그램(filebrowser·claude)은 기록이 없어 여기 나오지 않는다.
왼쪽 설치 패키지와 차이
왼쪽은 홈페이지가 기대는 핵심 몇 개를 이름으로 골라 둔 것이고, 이쪽은 패키지 관리자 기록에서 저절로 뽑은 목록이다. 새로 설치하면 다시 재기 때 바로 나타난다.
읽는 방법
명령을 돌리지 않고 apt·dpkg 기록 파일을 읽는다. 이름 아래는 버전이고, 이름에 마우스를 올리거나 누르면 패키지 개발자가 적어 둔 영문 한 줄 설명이 뜬다. 옆의 복사 로 그 문장을 그대로 가져가 번역기에 넣으면 된다. PC 크롬·엣지에서는 팝업이 열릴 때 한글 번역이 아래에 저절로 붙는다 — 브라우저에 든 번역기가 PC 안에서 옮기므로 바깥으로 나가는 요청이 없다. 언어 팩이 아직 없으면 처음 한 번만 이름을 눌러야 받아진다. 복사는 늘 영문 원문만 가져간다.
SSD 건강 수집기 · 1분
어디서 온 값인가
디스크가 스스로 적어 두는 기록(SMART)이다. root 수집기가 1분마다 읽는다.
SMART 판정
디스크가 내린 종합 판정이다. 실패로 바뀌면 그때는 이미 늦은 편이라 곧바로 교체를 준비한다.
사용 시간 · 전원 켜짐
얼마나 오래 돌았는지다. 보증 기간과 견주는 값이다.
재할당 섹터 · 늘어난 불량 블록
망가져서 예비 자리로 돌린 칸이다. 0 이 정상이고, 늘기 시작하면 교체를 준비할 신호다 — 지금 고장이라는 뜻은 아니다.
정정 불가 오류
읽다가 끝내 살리지 못한 자리다. 0 이 정상이고, 0 보다 크면 그만큼 자료가 상했다는 뜻이다.
전송(CRC) 오류
디스크와 메인보드 사이에서 깨진 신호다. 0 이 정상이고, 늘어난다면 디스크보다 케이블·접점 쪽을 먼저 본다.
예비 공간
망가진 칸을 대신할 여유다. 100% 에서 줄어들고 기준선에 닿으면 위험이다.
비정상 전원 차단
정상 종료를 거치지 않고 꺼진 횟수다. 전원 손실 보호가 없는 보급형 SSD 에는 갑작스러운 고장의 흔한 원인이라, 전원 켜짐 횟수와 견줘 본다.
누적 쓰기
지금까지 디스크에 쓴 총량이다. 제조사가 보증하는 쓰기량(TBW)과 견주면 마모가 얼마나 진행됐는지 알 수 있다.
지금까지 최고
이 디스크가 겪은 최고 온도 기록이다. 지금 온도가 아니라 과거를 통틀어 가장 높았던 값이다.
디스크
맨 위 비율
서버 SSD 전체(/)의 사용률이다. 80% 를 넘으면 주의, 90% 를 넘으면 위험 — 가득 차면 DB 와 로그 쓰기부터 실패한다.
/var/lib/mysql
DB 파일 전체다. 홈페이지가 쌓는 글·기록이 여기로 간다.
/var/log
시스템과 웹 서버가 남긴 로그다. 저절로 회전·삭제되지만, 어딘가 고장 나 같은 오류를 쏟아내면 이 줄이 눈에 띄게 커진다.
/home/kwonmo/git
로컬에서 push 를 받는 저장소 원본이다. 작업물 자체가 아니라 변경 이력이 쌓인다.
/srv/webhard
웹하드(kwonmo.net) 파일 전체다. 웹 서버(www-data)와 분리한 전용 계정 소유라 웹 폴더 칸에는 나오지 않는다.
/var/www
홈페이지가 놓인 자리 전체다. 안쪽 내역은 아래 웹 폴더 칸에서 본다.
막대
가장 큰 폴더 대비가 아니라 지금 쓰고 있는 용량 대비다. 다섯 줄을 합쳐도 100% 가 안 되면 나머지는 OS 가 차지한 몫이다.
갱신
맨 위 비율은 열 때마다, 아래 다섯 줄 중 /var/www 를 뺀 네 줄은 수집기가 1분마다 잰다 — www-data 가 읽을 수 없는 자리라 root 가 대신 잰다.
웹 폴더
재는 범위
/var/www 바로 아래다. 파일을 하나씩 세어 재므로 머리의 다시 재기 를 눌러야 갱신된다.
data
git 이 추적하지 않는 자료다. 게임 번들(emu)과 올린 이미지(hm)가 쌓이는 자리라 한 단계 더 나눠 보인다 — 용량이 늘어난다면 대개 여기다.
html
홈페이지 소스다. 로컬에서 push 하면 여기로 반영된다.
shared · logs · run
여러 곳이 같이 쓰는 조각, 로그 자리, PHP 가 돌면서 남기는 상태다. 평소에는 작다.
개수 · 막대
개수는 그 폴더 안의 파일 수다. 막대는 가장 큰 폴더 대비라 1등은 늘 꽉 찬다 — 절대량이 아니라 서로 견주는 눈금이다.
읽을 수 없는 폴더
권한이 없어 재지 못한 폴더는 그 줄에 이유가 붙는다. 그 폴더만 빠질 뿐 나머지 값은 정상이다.
TLS 인증서
무엇인가
https 를 지탱하는 증명서다. 끝나면 브라우저가 경고를 띄우고 사이트가 사실상 막힌다.
남은 날
21일 미만이면 주의, 7일 미만이거나 접속에 실패하면 위험이다. Let's Encrypt 는 30일 남았을 때 스스로 갱신하므로, 21일 아래로 내려갔다면 그 자동 갱신이 실패하고 있다는 뜻이다.
발급자 · 만료 시각
누가 발급했고 언제 끝나는지다. 도메인 넷이 인증서 한 장을 같이 쓰므로 보통 날짜가 모두 같다.
재는 방법
인증서 파일을 열어 보는 게 아니라, 이 서버의 443 에 도메인 이름을 달아 접속해 nginx 가 실제로 내보내는 인증서를 받아 읽는다 — 파일은 갱신됐는데 nginx 가 다시 읽지 않은 경우도 이래야 잡힌다.
nginx 로그
에러 로그 오늘 분석
kwonmo.com 에러·nginx 에러의 오늘 0시부터 줄을 읽어 뜻을 붙인다. 맨 위 판정은 빨강(요청이 실패했다) → 노랑(우리 쪽 고칠 거리) → 초록(막혔거나 해 없음) 순서다. 한 주소가 수백 줄을 쏟는 스캔은 주소마다, 같은 문구의 반복은 문구마다 한 줄로 묶는다. 누르면 뜻·많이 두드린 경로·원문이 펼쳐진다.
보고서 복사 · 내려받기
오늘 분석(nginx 에러 묶음 · 그 주소들의 오늘 접속과 통과한 요청 · fail2ban 오늘 요약 · 두 쪽에 다 나온 주소)을 마크다운 문서 하나로 만든다. Claude Code 에 붙여 넣거나 파일로 주면 종합 의미·위험도·추천 대응을 받는다 — API 를 따로 쓰지 않는다.
차단 규칙(403)
.env·.git 같은 숨김 파일을 달라는 요청을 설정이 막은 것이다. 에러 로그에 찍히지만 막혔다는 기록이라 걱정할 것은 없다.
PHP 경고 · PHP 중단
우리 코드가 남긴 것이다. 경고는 화면이 돌아가도 고칠 거리이고, 중단은 그 요청이 오류로 끝났다는 뜻이다. 원문에 파일과 줄 번호가 있다.
읽는 방법
탭으로 파일을 고른다. 각 파일의 끝 200줄만, 새 줄이 위로 오게 보여 준다. 제목 옆에 파일 경로·크기·마지막 기록 시각이 뜬다.
kwonmo.com 접속
홈페이지에 들어온 요청이다. 시각, 보낸 주소, 무엇을 달라고 했는지, 응답 코드 차례다.
kwonmo.com 에러
홈페이지에서 난 오류다. 화면이 안 뜨거나 이상하게 나올 때 먼저 볼 자리다.
기본 접속(스캔)
어느 도메인에도 걸리지 않은 요청이 쌓이는 자리다. 대부분 남의 자동 탐색이라, 모르는 주소가 이상한 경로를 두드리는 모습이 그대로 보인다.
nginx 에러
웹 서버 자체의 오류다. 평소에는 비어 있는 게 정상이다.
응답 코드
200 은 정상, 301 은 다른 주소로 보냄, 404 는 그런 자리 없음, 444 는 서버가 아무 답 없이 끊은 것(스캔에 주로 붙는다).
안전
로그에 적힌 주소·브라우저 이름은 바깥 사람이 마음대로 적어 넣을 수 있는 글자라, 여기서는 글자 그대로만 그린다.
fail2ban
무엇인가
접속을 거듭 실패한 주소를 한동안 막아 주는 문지기다.
오늘 분석
오늘 0시부터의 fail2ban.log 를 한 줄씩 읽어 뜻을 붙인다. 맨 위 판정은 볼 일이 있는 것(노란 줄)부터 나온다. 주소 표는 오늘 걸린 주소별 감지·차단 횟수, 아래 줄 목록은 누르면 뜻과 원문이 펼쳐진다. 새벽 재기동 때 찍히는 수십 줄은 한 줄로 묶는다.
느린 시도
같은 주소가 여러 번 실패했는데 막히지 않은 경우다. 기준 시간 창보다 띄엄띄엄 오면 실패가 쌓이지 않아 차단에 안 걸린다 — 일부러 기준을 피해 오는 자동 공격의 흔한 모습이다.
미분류
설명 사전에 없는 줄이다. 원문이 그대로 보이고, 자주 나오면 사전에 넣어 달라고 하면 된다.
감시 대상(jail)
문지기가 지켜보는 자리다. 지금은 sshd 하나뿐이라, 웹으로 들어오는 자동 탐색은 이 문지기가 막지 않는다 — 아래 nginx 로그에 보이는 스캔은 차단 대상이 아니다.
실패 지금 / 누적
앞의 숫자는 아직 차단 기준에 못 미친 진행 중인 실패, 뒤는 그동안 쌓인 횟수다.
차단 지금 / 누적
앞은 지금 막혀 있는 주소 수, 뒤는 그동안 막았던 횟수다. 막혀 있는 주소가 있으면 그 아래 줄에 나열된다.
카운터 기준
fail2ban 이 켜진 뒤의 값이라 매일 새벽 재기동 때 0 으로 돌아간다. 그러니 0 이라고 평소에도 조용했다는 뜻은 아니다.
날짜별
며칠 단위 흐름은 이쪽을 본다. 카운터와 달리 로그를 직접 세므로 재기동과 무관하고, 로그가 보관된 기간만큼만 나온다.