Monitoring



모니터링용 Software 설치

#--- CentOS7
yum  -y  install  sysstat 

#--- NodeJS
npm  install  node-os-utils

#--- OS 버전 확인
cat  /etc/*-release  |  uniq

CPU 모니터링

#--- CPU 갯수
cat  /proc/cpuinfo  |  grep  processor

#--- CPU 평균 사용시간
sar  1  100                   #--- 1초 단위로 100번 검사후 평균 표시

#--- 기타 확인 방법
top
pidstat  1

sar  1  3
sar  -r

#--- CPU별 CPU 사용시간 표시
mpstat  -P  ALL  1

Momory 모니터링

#--- 전체 메모리 용량
cat  /proc/meminfo  |  grep MemTotal

#--- 메모리 상태 확인
vmstat  1                               #--- 1초마다 정보 표시
#--- r : 동작중인 프로세스의 수             #--- 값이 크면 cpu 부족
#--- free : Free memory (KB)
#--- si : swap-In                       #--- 0이 아니면 메모리 부족
#--- so : Swap-Out                      #--- 0이 아니면 메모리 부족
#--- us, sy, id, wa, st : CPU 사용율
#---     us. User time, sy. System time, id. Idle, wa. Wait I/O, st. Stolen time

#--- 메모리 사용 평균 확인
free  -m
#--- Free 메모리 확인
#--- buff/cache : I/O Buffer 캐시 사용량, 0에 가까우면 높은 Disk I/O 발생
#--- available

Storage 모니터링

yum  install  dstat

#--- 로그 정리
pm2  flush
cd  /root/.pm2/logs
#---     수작업으로 로그 정리

#--- 디스크 사용량 조회
df  -h  |  egrep  'Avail|mapper'

iostat  -xz  1
#--- r/s : Read 요청
#--- w/s : Write 요청
#--- rkB/s : Read KB/s 
#--- wkB/s : Write KB/s
#--- await : I/O 처리 평균 시간 (밀리세컨드)

dstat

Network 모니터링

sar  -n  DEV  1
#--- rxpck/s
#--- txpck/s
#--- rxkB/s : 초당 네트워크 수신량
#--- txkB/s : 초당 네트워크 송신량

#--- TCP 통신량 요약
sar  -n  TCP,ETCP  1
#--- active/s : 로컬에서 요청한 초당 tcp connection 수 (connect())
#--- passive/s : 요청된 초당 tcp 커넥션 수 (accept())
#--- retrans/s : 초당 tcp 재연결 수

Process 모니터링

#--- CPU 사용량 top 10
#---     USER : 사용자 ID
#---     PID : Process ID
#---     PPID : Parent Process ID
#---     RSS : Non swapped Physical memory (KB)
#---     SIZE : SWAP 공간
#---     VSZ : 프로세스의 가상 메모리 (KB)
ps  -eo  user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm  --sort  -pcpu  |  head  -21


#--- Memory 사용량 top 10
#---     USER : 사용자 ID
#---     PID : Process ID
#---     PPID : Parent Process ID
#---     RSS : Non swapped Physical memory (KB)
#---     SIZE : SWAP 공간
#---     VSZ : 프로세스의 가상 메모리 (KB)
ps  -eo  user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm  --sort  -pcpu  |  head  -11

#--- 프로세스 정보
#---     /proc/${PID}/
cat  /proc/${PID}/status

MariaDB 모니터링

-- scadadb 데이터베이스의 크기(MB)
SELECT table_schema, sum(round(((data_length + index_length) / 1024 / 1024), 2)) "MB"
  FROM information_schema.TABLES
 WHERE table_schema = "scadadb"
 GROUP BY table_schema;

-- scadadb 데이터베이스에 포함된 테이블별 크기
SELECT TABLE_NAME, round(((data_length + index_length) / 1024 / 1024), 2) "MB"
  FROM information_schema.TABLES
 WHERE table_schema = "scadadb"
 ORDER BY (data_length + index_length) DESC;

-- Table별 레코드 수
SELECT TABLE_NAME, TABLE_ROWS
  FROM information_schema.TABLES
 WHERE table_schema = "scadadb"
 ORDER BY TABLE_ROWS DESC;



-- obcondb 데이터베이스의 크기(MB)
SELECT table_schema, sum(round(((data_length + index_length) / 1024 / 1024), 2)) "MB"
  FROM information_schema.TABLES
 WHERE table_schema = "obcondb"
 GROUP BY table_schema;

-- obcondb 데이터베이스에 포함된 테이블별 크기
SELECT TABLE_NAME, round(((data_length + index_length) / 1024 / 1024), 2) "MB"
  FROM information_schema.TABLES
 WHERE table_schema = "obcondb"
 ORDER BY (data_length + index_length) DESC;

-- Table별 레코드 수
SELECT TABLE_NAME, TABLE_ROWS
  FROM information_schema.TABLES
 WHERE table_schema = "obcondb"
 ORDER BY TABLE_ROWS DESC;



-- 테이블에 포함된 partition 정보 표시
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
  FROM INFORMATION_SCHEMA.PARTITIONS
  WHERE TABLE_NAME = 'devicedata1s';

Device 모니터링

#--- Site 갯수
SELECT count(*)
  FROM sites
 WHERE deleted = 0
   AND status = 'Active';

#--- 장비 종류별 갯수
SELECT type, count(*)
  FROM devices
 WHERE deleted = 0
 GROUP BY type
 ORDER BY type ASC;

SELECT type, count(*)
  FROM devices
 WHERE deleted = 0
   AND statusUse = "Active"
 GROUP BY type
 ORDER BY type ASC;



#--- Site별 장비 종류별 갯수
SELECT site, type, count(*)
  FROM devices
 WHERE deleted = 0
   AND statusUse = "Active"
 GROUP BY site, type
 ORDER BY site ASC, type ASC;

기타 모니터링

#--- 시스템 메시지 확인
dmesg  |  tail


Partition 관리

-- Partition 조회
SELECT table_schema, table_name, partition_name, partition_method, partition_expression, table_rows, avg_row_length, data_length, index_length
  FROM information_schema.partitions
 WHERE table_name = 'devicedata1s'
 ORDER BY table_name ASC, partition_name ASC;

-- Partition 추가
-- ALTER TABLE `devicedata1s` ADD PARTITION (
--    PARTITION '~' VALUES LESS THME '~'
-- );

-- Partition 삭제
--     Partition을 삭제하면 해당 파티션에 있던 데이터도 모두 삭제 된다.
-- ALTER TABLE `devicedata1s`
--  DROP PARTITION p201901;

-- Partition의 데이터 조회
SELECT *
  FROM `devicedata1s` PARTITION (p201901);



-- Exchange Partition를 사용하여 Partition과 해당 데이터 삭제
--    sourceTable : 원본 테이블
--    targetTable : 삭제를 위한 임시 테이블
CREATE TABLE targetTable like sourceTable;
AlTER TABLE targetTable REMOVE PARTITIONING;

ALTER TABLE sourceTable 
      EXCHANGE PARTITION p201901 WITH TABLE targetTable
      WITHOUT VALIDATION;

ALTER TABLE sourceTable
      DROP PARTITION p201901;

DROP TABLE targetTable;


참고 문헌

공유하기