크게 cpu,memory,network,io 네가지의 정보를 얻어올 예정이니 4개의 테이블을 만들고, 각 정보와 기타정보(uptime 등)를 취합하는 summary 테이블까지 만드는 것이 좋을 것 같습니다.
먼저 스키마 정의와 관계도를 정의해봅시다.
라즈베리파이는 4코어라서 각 정보의 필드를 4개씩, 그리고 총 cpu 사용량을 저장할 total 속성을 만들겠습니다.(total,cpu0,cpu1,cpu2,cpu3) 그리고 사용률은 %로 나타내기 위해 unsigned float을 사용하겠습니다. 또한 기본값은 0으로 하죠.
속성 이름 | type | not null | default값 | 설명 |
---|---|---|---|---|
date | timestamp | O | now() | 데이터를 기록한 시각, 기본키 |
cpu_usage | unsigned float | X | 총 cpu 사용률, 100-total_id와 같다 | |
cpu_us | unsigned float | X | 유저모드 cpu 사용률 | |
cpu_sy | unsigned float | X | 시스템모드 cpu 사용률 | |
cpu_ni | unsigned float | X | nice가 0 미만인 유저모드 cpu 사용률 | |
cpu_id | unsigned float | X | cpu가 사용되지 않는 비율 | |
cpu_wa | unsigned float | X | cpu wait 비율(주로 io) 사용률 | |
cpu_hi | unsigned float | X | hardware interrupt | |
cpu_si | unsigned float | X | software interrupt | |
cpu_st | unsigned float | X | virtual cpu 사용률 | |
cpu0_usage | unsigned float | X | 총 cpu 사용률, 100-total_id와 같다 | |
cpu0_us | unsigned float | X | 유저모드 cpu 사용률 | |
cpu0_sy | unsigned float | X | 시스템모드 cpu 사용률 | |
cpu0_ni | unsigned float | X | nice가 0 미만인 유저모드 cpu 사용률 | |
cpu0_id | unsigned float | X | cpu가 사용되지 않는 비율 | |
cpu0_wa | unsigned float | X | cpu wait 비율(주로 io) 사용률 | |
cpu0_hi | unsigned float | X | hardware interrupt | |
cpu0_si | unsigned float | X | software interrupt | |
cpu0_st | unsigned float | X | virtual cpu 사용률 | |
cpu1_usage | unsigned float | X | 총 cpu 사용률, 100-total_id와 같다 | |
cpu1_us | unsigned float | X | 유저모드 cpu 사용률 | |
cpu1_sy | unsigned float | X | 시스템모드 cpu 사용률 | |
cpu1_ni | unsigned float | X | nice가 0 미만인 유저모드 cpu 사용률 | |
cpu1_id | unsigned float | X | cpu가 사용되지 않는 비율 | |
cpu1_wa | unsigned float | X | cpu wait 비율(주로 io) 사용률 | |
cpu1_hi | unsigned float | X | hardware interrupt | |
cpu1_si | unsigned float | X | software interrupt | |
cpu1_st | unsigned float | X | virtual cpu 사용률 | |
cpu2_usage | unsigned float | X | 총 cpu 사용률, 100-total_id와 같다 | |
cpu2_us | unsigned float | X | 유저모드 cpu 사용률 | |
cpu2_sy | unsigned float | X | 시스템모드 cpu 사용률 | |
cpu2_ni | unsigned float | X | nice가 0 미만인 유저모드 cpu 사용률 | |
cpu2_id | unsigned float | X | cpu가 사용되지 않는 비율 | |
cpu2_wa | unsigned float | X | cpu wait 비율(주로 io) 사용률 | |
cpu2_hi | unsigned float | X | hardware interrupt | |
cpu2_si | unsigned float | X | software interrupt | |
cpu2_st | unsigned float | X | virtual cpu 사용률 | |
cpu3_usage | unsigned float | X | 총 cpu 사용률, 100-total_id와 같다 | |
cpu3_us | unsigned float | X | 유저모드 cpu 사용률 | |
cpu3_sy | unsigned float | X | 시스템모드 cpu 사용률 | |
cpu3_ni | unsigned float | X | nice가 0 미만인 유저모드 cpu 사용률 | |
cpu3_id | unsigned float | X | cpu가 사용되지 않는 비율 | |
cpu3_wa | unsigned float | X | cpu wait 비율(주로 io) 사용률 | |
cpu3_hi | unsigned float | X | hardware interrupt | |
cpu3_si | unsigned float | X | software interrupt | |
cpu3_st | unsigned float | X | virtual cpu 사용률 |
메모리는 KB형식으로 저장합시다. 라즈베리파이 4B 4GB모델이라 렘이 4기가입니다. byte로 변환하면 4,294,967,296 Bytes인데 byte로 저장하면 데이터 타입을 int로 해야하니 kb로 저장하고 (4,194,304 KB) unsigned mediumints 타입을 쓰겠습니다.
속성 이름 | type | not null | default값 | 설명 |
---|---|---|---|---|
date | timestamp | O | now() | 데이터를 기록한 시각, 기본키 |
mem_usage | unsigned float | X | 메모리 사용률(used_memory/total_memory) | |
total_memory | unsigned mediumint | X | 총 메모리양, 사실 유동적인 값은 아닌데 없으면 섭하니까 넣었습니다. | |
free_memory | unsigned mediumint | X | 사용 가능한 메모리 | |
used_memory | unsigned mediumint | X | 사용중인 메모리 | |
buff_memory | unsigned mediumint | X | 버퍼 크기 | |
cache_memory | unsigned mediumint | X | 캐쉬 크기 | |
available_memory | unsigned mediumint | O | swapping없이 프로세스에 할당 가능한 메모리 | |
total_swap | unsigned mediumint | X | 총 swap 메모리 양 | |
free_swap | unsigned mediumint | X | 사용 가능한 swap 메모리 양 | |
used_swap | unsigned mediumint | X | 사용중인 swap 메모리 양 |
disk 장치의 읽기, 쓰기 KB/s 를 저장합니다. 현재 sata케이블로 하드디스크한대가 물려있고, 마이크로sd 위에서 os가 돌아가고 있는데, 이 둘과 총합을 기록합시다.
속성 이름 | type | not null | default값 | 설명 |
---|---|---|---|---|
date | timestamp | O | now() | 데이터를 기록한 시각, 기본키 |
disk_total_read | unsigned float | X | 총합 read KB/s | |
disk_total_write | unsigned float | X | 총합 write KB/s | |
mmcblk_read | unsigned float | X | sd카드 read KB/s | |
mmcblk_write | unsigned float | X | sd카드 write KB/s | |
sda_read | unsigned float | X | sata로 연결된 장치에 대한 read KB/s | |
sda_write | unsigned float | X | sata로 연결된 장치에 대한 write KB/s |
라즈베리파이가 공유기에 랜선으로 연결되어 있고, 다른데 연결된 곳은 없기 때문에 이더넷에 오는 트래픽만 기록하면 됩니다. 사실 라즈베리파이엔 wifi모듈이 있기때문에 wlan도 고려하는게 좋을 것 같긴한데, wifi를 사용할 일이 아마 안생길 것 같아서 뺍니다.
네트워크 트래픽 단위는 byte per sec가 아니라bit per sec를 쓰더라구요. 이유는 모르지만 Kbps로 저장해줍시다.
속성 이름 | type | not null | default값 | 설명 |
---|---|---|---|---|
date | timestamp | O | now() | 데이터를 기록한 시각, 기본키 |
net_receive | unsigned float | X | 전체 네트워크 수송 Kbps 여기선 이더넷만 고려 | |
net_transmit | unsigned float | X | 전체 네트워크 전송 Kbps 여기선 이더넷만 고려 | |
net_receive_err | unsigned float | X | 네트워크 수송 중 에러 Kbps | |
net_transmit_err | unsigned float | X | 네트워크 전송 중 에러 Kbps |
요약 + 기타정보 저장 테이블입니다. 다른 테이블을 참조해서 생성되는 테이블이며, 그 외에도 uptime 등을 저장합니다.
속성 이름 | type | not null | default값 | 설명 |
---|---|---|---|---|
date | timestamp | O | now() | 데이터를 기록한 시각, 기본키 |
uptime | unsigned int | X | 부팅 후 지난 시간 | |
cpu_thermal | unsigned float | X | cpu 온도 | |
loadavg_1m | unsigned float | X | 1분 평균 loadavg | |
loadavg_5m | unsigned float | X | 5분 평균 loadavg | |
loadavg_15m | unsigned float | X | 15분 평균 loadavg | |
cpu_usage | unsigned float | X | cpu 사용률(%), cpu_status테이블의 cpu_usage 과 같다 | |
mem_usage | unsigned float | X | mem 사용률(%), memory_status테이블의 mem_usage 과 같다 | |
disk_total_read | unsigned float | X | 디스크 read KB/s, io_status테이블의 disk_total_read 과 같다 | |
disk_total_write | unsigned float | X | 디스크 write KB/s, io_status테이블의 disk_total_write 과 같다 | |
net_receive | unsigned float | X | network read Kbps, network_status테이블의 net_receive 과 같다 | |
net_transmit | unsigned float | X | network write Kbps, network_status테이블의 net_transmit 과 같다 |
음...관계도라기에... 연결이 서로 없네요.