특정 날짜 또는 주 동안 각 서버의 RAM CPU 메모리 사용량을 매주 알려주는 보고서를 만들고 싶습니다.
RHEL 상자나 가능한 방법에 대한 의견이 있으십니까?
답변1
sar -u -f /var/log/sa/sa15
매월 15일의 로그가 제공됩니다.
Sadf는 이 데이터를 사용하는 또 다른 유틸리티입니다. 예는 다음과 같습니다.
START_TIME=$( date +%s --date 'yesterday 8am' )
END_TIME=$( date +%s --date 'yesterday 5pm' )
sadf -p /var/log/sa/sa15 -- -n DEV -q -w -b -u -r |
awk -v start_time=$START_TIME -v end_time=$END_TIME -v get_latest=$GET_LATEST '
BEGIN {
wanted_fields="%user %idle %system %iowait ldavg-1 ldavg-5 ldavg-15 cswch/s kbmemfree kbbuffers kbcached kbswpfree kbswpused bread/s bwrtn/s rxbyt/s txbyt/s"
num_fields=split(wanted_fields, fields)
for (i in fields) {
fieldname = fields[i]
value[fieldname] = 0.0
number[fieldname] = 0
}
}
! /\t(sit0|lo)\t/ {
if ($3 > start_time && $3 <= end_time) {
if (number[$5] < 1) {
number[$5] = 0
value[$5] = 0.0
}
if (get_latest) {
value[$5] = $6
} else {
value[$5] += $6
}
number[$5] += 1
}
}
END {
"hostname" | getline hostname
printf("%d hostname=%s start=%d end=%d ", end_time, hostname, start_time, end_time)
for (i=1; i <= num_fields; i++) {
fieldname = fields[i]
printf("%s=", fieldname)
if (number[fieldname] > 0) {
if (get_latest) {
v=value[fieldname]
} else {
v=value[fieldname]/number[fieldname]
}
printf("%f ", v)
} else {
printf("- ")
}
}
}
' | tr -d '%/'