■debian bookwormにsystatをインストール、CPU温度をsyslogに書き込み
sysstatで負荷状況を、lm-sensorsでCPU温度を取得する
16コア、64GBメモリに負荷かけるだけでも大変なはずだけど、興味本位で見ておきたい
debian busterにsysstatを導入する。
https://labunix.hateblo.jp/entry/20200721/1595266993
暇だったので、CPU/MEM/DISK I/OとNetworkエラーが無いかチェックするスクリプトを書いた。
https://labunix.hateblo.jp/entry/20130429/1367241075
$ lsb_release -d
No LSB modules are available.
Description: Debian GNU/Linux 12 (bookworm)
■sysstatのインストールと初期設定
$ sudo apt-get install -y sysstat
$ systemctl list-unit-files -t service | awk 'NR==1||/sysstat/'
UNIT FILE STATE PRESET
sysstat-collect.service static -
sysstat-summary.service static -
sysstat.service disabled enabled
$ sudo systemctl status sysstat
○ sysstat.service - Resets System Activity Logs
Loaded: loaded (/lib/systemd/system/sysstat.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: man:sa1(8)
man:sadc(8)
man:sar(1)
$ sudo cp /etc/default/sysstat{,.org}
$ sudo sed -i -e 's%ENABLED="false"%ENABLED="true"%' /etc/default/sysstat
$ echo /etc/default/sysstat{,.org} | awk '{printf "%-63s %-63s\n",$1,$2}';sdiff -s /etc/default/sysstat{,.org}
/etc/default/sysstat /etc/default/sysstat.org
ENABLED="true" | ENABLED="false"
■sysstatサービスの起動
$ sudo systemctl enable sysstat
Synchronizing state of sysstat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable sysstat
Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service → /lib/systemd/system/sysstat.service.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-collect.timer → /lib/systemd/system/sysstat-collect.timer.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-summary.timer → /lib/systemd/system/sysstat-summary.timer.
■「sysstat-summary.timer」は昨日のサマリ用、「sysstat-collect.timer」が採取タイミングのファイル
$ grep "\/10" /lib/systemd/system/sysstat-collect.timer
OnCalendar=*:00/10
$ sudo systemctl start sysstat
$ sudo systemctl status sysstat | awk -v host=$(hostname -s) '{gsub(host,"target-host",$0);print $0}'
● sysstat.service - Resets System Activity Logs
Loaded: loaded (/lib/systemd/system/sysstat.service; enabled; preset: enabled)
Active: active (exited) since Wed 2023-10-25 19:56:03 JST; 14min ago
Docs: man:sa1(8)
man:sadc(8)
man:sar(1)
Main PID: 11726 (code=exited, status=0/SUCCESS)
CPU: 3ms
10月 25 19:56:03 target-host systemd[1]: Starting sysstat.service - Resets System Activity Logs...
10月 25 19:56:03 target-host systemd[1]: Finished sysstat.service - Resets System Activity Logs.
■今回はデフォルトの10分に一回のままとするが以下のcronは使われず、systemdの管理下にあるようだ
$ grep -B 1 '\/10' /etc/cron.d/sysstat
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
■システムの起動中に有効にするには、もう人手間要るようだ
$ sudo systemctl enable --now sysstat
Synchronizing state of sysstat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable sysstat
$ grep -B 1 "\/10" /usr/lib/systemd/system/sysstat-collect.timer
[Timer]
OnCalendar=*:00/10
■ファイルに書くこまれるのを待つ
※システムの再起動を行っていないので「systemctl enable --now sysstat」するまで出力されなかった
※cronの末尾5分の10分ごとではなく「sysstat-collect.timer」の10分ごとの設定が効いている
$ d=$(date '+%d');watch -d -n 10 "env LANG=C sar -u -f /var/log/sysstat/sa$d" | sed -e 's/'$(hostname -s)'/tatget-hostname/g'
Every 10.0s: env LANG=C sar -u -f /var/log/sysstat/sa25 tatget-hostname: Wed Oct 25 20:36:29 2023
Linux 6.1.0-13-amd64 (target-hostname) 10/25/23 _x86_64_ (16 CPU)
19:56:03 LINUX RESTART (16 CPU)
20:11:21 LINUX RESTART (16 CPU)
20:20:05 CPU %user %nice %system %iowait %steal %idle
20:30:01 all 0.97 0.00 0.52 0.01 0.00 98.50
Average: all 0.97 0.00 0.52 0.01 0.00 98.50
■なんの負荷もかかっていないのに87度が本当だとすると困る。。。
※過去のintel CPUで、高負荷時にhigh 83°C ~ crit 99°Cのしきい値に対し、
100°Cになるとシステムが落ちるという経験をしていたので。。。
$ env LANG=C sar -m TEMP 1 1 | sed -e 's/'$(hostname -s)'/target-hostname/g'
Linux 6.1.0-13-amd64 (target-hostname) 10/25/23 _x86_64_ (16 CPU)
20:54:40 TEMP degC %temp DEVICE
20:54:41 1 40.25 0.00 k10temp-pci-00c3
20:54:41 2 39.85 87.92 nvme-pci-0100
20:54:41 3 39.00 0.00 amdgpu-pci-0400
Average: TEMP degC %temp DEVICE
Average: 1 40.25 0.00 k10temp-pci-00c3
Average: 2 39.85 87.92 nvme-pci-0100
Average: 3 39.00 0.00 amdgpu-pci-0400
■CPUはRyzen 7 5800U
ミニPCとはいえ、平常時からそんなに温度が高いはずないし、触ってみても熱くはない
$ awk '/model name/{a[$0]+=1}END{for(n in a){print a[n],n}}' /proc/cpuinfo
16 model name : AMD Ryzen 7 5800U with Radeon Graphics
$ apt-file search bin/sensors
lm-sensors: /usr/bin/sensors
lm-sensors: /usr/bin/sensors-conf-convert
lm-sensors: /usr/sbin/sensors-detect
$ sudo apt-get install -y lm-sensors
■現在+39.9°Cで、high +82.8°C〜crit +84.8°C
$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +46.4°C
nvme-pci-0100
Adapter: PCI adapter
Composite: +39.9°C (low = -273.1°C, high = +82.8°C)
(crit = +84.8°C)
amdgpu-pci-0400
Adapter: PCI adapter
vddgfx: 643.00 mV
vddnb: 774.00 mV
edge: +40.0°C
PPT: 4.00 W
■cronを使ってjson形式で、loggorからsyslogに書き込み
$ sudo apt-get install -y jq
$ sensors -j
{
"k10temp-pci-00c3":{
"Adapter": "PCI adapter",
"Tctl":{
"temp1_input": 43.000
}
},
"nvme-pci-0100":{
"Adapter": "PCI adapter",
"Composite":{
"temp1_input": 39.850,
"temp1_max": 82.850,
"temp1_min": -273.150,
"temp1_crit": 84.850,
"temp1_alarm": 0.000
}
},
"amdgpu-pci-0400":{
"Adapter": "PCI adapter",
"vddgfx":{
"in0_input": 0.768
},
"vddnb":{
"in1_input": 0.774
},
"edge":{
"temp1_input": 40.000
},
"PPT":{
"power1_average": 4.000
}
}
}
■loggerを使って送信、syslogからjsonログを復元
$ sensors -j | jq -c | logger
$ sudo awk '/temp1_input/{gsub(".* labunix: ","",$0);print $0}' /var/log/syslog | jq -r
{
"k10temp-pci-00c3": {
"Adapter": "PCI adapter",
"Tctl": {
"temp1_input": 41.375
}
},
"nvme-pci-0100": {
"Adapter": "PCI adapter",
"Composite": {
"temp1_input": 39.85,
"temp1_max": 82.85,
"temp1_min": -273.15,
"temp1_crit": 84.85,
"temp1_alarm": 0
}
},
"amdgpu-pci-0400": {
"Adapter": "PCI adapter",
"vddgfx": {
"in0_input": 1.3
},
"vddnb": {
"in1_input": 0.774
},
"edge": {
"temp1_input": 41
},
"PPT": {
"power1_average": 21
}
}
}
■cronサービスの確認
$ sudo systemctl status cron.service
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; preset: enabled)
Active: active (running) since Mon 2023-10-23 22:40:22 JST; 1 day 22h ago
Docs: man:cron(8)
Main PID: 709 (cron)
Tasks: 1 (limit: 76349)
Memory: 436.0K
CPU: 738ms
CGroup: /system.slice/cron.service
└─709 /usr/sbin/cron -f
10月 25 20:35:01 debian-bookworm CRON[13227]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
10月 25 20:35:01 debian-bookworm CRON[13226]: pam_unix(cron:session): session closed for user root
10月 25 20:45:01 debian-bookworm CRON[13380]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
10月 25 20:45:01 debian-bookworm CRON[13381]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
10月 25 20:45:01 debian-bookworm CRON[13380]: pam_unix(cron:session): session closed for user root
10月 25 20:55:01 debian-bookworm CRON[13839]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
10月 25 20:55:01 debian-bookworm CRON[13839]: pam_unix(cron:session): session closed for user root
10月 25 21:05:01 debian-bookworm CRON[14049]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
10月 25 21:05:01 debian-bookworm CRON[14050]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
10月 25 21:05:01 debian-bookworm CRON[14049]: pam_unix(cron:session): session closed for user root
■実行ファイルのパスをチェックして
$ echo "sensors jq logger" | awk '{for(a=1;a<=NF;a++){print "whereis -b "$a}}' | sh
sensors: /usr/bin/sensors
jq: /usr/bin/jq
logger: /usr/bin/logger
■実行権限を付与したスクリプトを「/etc/cron.hourly/」に放り込めば、
crontabがhorlyを呼び出す毎時17分にloggerからsyslogに書き込まれるようになる。
$ chmod +x mycputemp
$ cat mycputemp
/usr/bin/sensors -j | /usr/bin/jq -c | /usr/bin/logger
$ sudo mv mycputemp /etc/cron.hourly/
$ grep hourly /etc/crontab
17 * * * * root cd / && run-parts --report /etc/cron.hourly
■余談:loggerからsyslogに書き込んだログは、journalにも書き込まれている
$ sudo env LANG=C journalctl -ea | awk '/temp1/&& !/TTY/{gsub(".*labunix\[[0-9]*\]: ","",$0);print $0}' | jq -r
{
"k10temp-pci-00c3": {
"Adapter": "PCI adapter",
"Tctl": {
"temp1_input": 41.375
}
},
"nvme-pci-0100": {
"Adapter": "PCI adapter",
"Composite": {
"temp1_input": 39.85,
"temp1_max": 82.85,
"temp1_min": -273.15,
"temp1_crit": 84.85,
"temp1_alarm": 0
}
},
"amdgpu-pci-0400": {
"Adapter": "PCI adapter",
"vddgfx": {
"in0_input": 1.3
},
"vddnb": {
"in1_input": 0.774
},
"edge": {
"temp1_input": 41
},
"PPT": {
"power1_average": 21
}
}
}
■cronはrootで実行されたことになっていて、HH:17のログとなっている
$ sudo awk '/temp1_input/&&$3 ~ /root/{print $1}' /var/log/syslog
2023-10-25T22:17:01.953714+09:00