背景
当我们想查看服务器上硬盘状况时,是不是首先想到的就是S.M.A.R.T
?但是S.M.A.R.T
信息太多太杂,看起来好费力,而且服务器上又是使用命令行,记住各种命令和参数也费脑子。
那有没有一个可以快速而直观的查看硬盘状态的工具呢?
今天我们就介绍一个基于web端的硬盘监控工具。
安装
首先,查看硬盘状态必须离不开S.M.A.R.T
,因此我们必须先安装smartmontools
:
1
2
| sudo apt install smartmontools
sudo systemctl enable smartmontools --now
|
然后,就是安装scrutiny。scrutiny
是个开源且免费的硬盘S.M.A.R.T
状态监控软件,其核心特性包括:
- 简洁而直观的 Web 端仪表板;
- 与
smartmontools
集成; - 自动检测所有连接的硬盘;
S.M.A.R.T
指标跟踪;- 温度跟踪;
- 硬盘警报与通知;
- ……
为了方便,我们直接使用Docker
来安装scrutiny
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 默认配置文件
curl https://raw.githubusercontent.com/AnalogJ/scrutiny/master/example.scrutiny.yaml -o scrutiny.yaml
curl https://raw.githubusercontent.com/AnalogJ/scrutiny/master/example.collector.yaml -o collector.yaml
# 容器
docker run -itd --rm \
-p 8080:8080 -p 8086:8086 \
-v /run/udev:/run/udev:ro \
--cap-add SYS_RAWIO \
--cap-add SYS_ADMIN \
--device=/dev/sda \
--device=/dev/sdb \
--device=/dev/sdc \
--device=/dev/sdd \
--device=/dev/nvme0 \
--device=/dev/nvme1 \
--name scrutiny \
-v scrutiny.yaml:/opt/scrutiny/config/scrutiny.yaml \
-v collector.yaml:/opt/scrutiny/config/collector.yaml \
ghcr.io/analogj/scrutiny:master-omnibus
|
安装过程没什么可讲的,这里只需要把所有需要监控的硬盘添加到容器中即可。安装完成之后,就可以通过http://<ip>:8080
查看所有硬盘的状态了。
是不是很直观?点击还可以查看硬盘的详细信息。
反向代理与访问控制
为了访问方便,接下来就是设置Nginx
反向代理。由于scrutiny
没有账号密码,所以在配置反向代理时,需要做好访问控制。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| server {
listen 443 ssl;
listen [::]:443 ssl;
server_name <your domain>;
# ssl设置
...
# 访问控制
allow 192.168.0.0/24;
deny all;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
|
通知设置
在硬盘出现错误时,scrutiny
支持多种方式来通知用户,这些可以通过修改配置文件/opt/scrutiny/config/scrutiny.yaml
来实现。这里值得一说的是,scrutiny
这么大个工程都完成了,配置方向却舍不得做个界面,还要去手动修改,真麻烦。这里就以gmail
为例设置scrutiny
通知。
首先,我们需要生成一个应用专用密码,后面需要用到。
其次,scrutiny
默认是没有配置文件的,我们需要从官网下载一个(这一步我们在之前的安装步骤中完成了)。
然后,修改scrutiny.yaml
中notify.urls
字段的内容:
1
| - "smtp://username:password@smtp.gmail.com:587/?fromAddress=<your gmail>&toAddresses=recipient1[,recipient2,...]"
|
这里的password
就是我们之前生成的应用专用密码,不要将自己邮箱的密码写在这里,写了也通不过,现在的主密码都被 2FA 保护着,程序通不过验证。
这个notify.urls
比较让人抓狂,其中用户名密码部分特殊字符需要转义(请参考官方文档),所以一定要测试好。
但是好在scrutiny
使用的是Shoutrrr
这个通知库,官方亦提供了一个很方便的命令行工具,可以快捷的测试各种通知 url:
1
2
3
| go install github.com/containrrr/shoutrrr/shoutrrr@latest
shoutrrr send "smtp://username:password@smtp.gmail.com:587/?fromAddress=<your gmail>&toAddresses=recipient1[,recipient2,...]" "Test with shoutrrr"
|
最后,重启scrutiny
:
1
| docker restart scrutiny
|
当然,我们也可以使用Portainer
(好物推荐 - Portainer)来完成重启等操作。
scrutiny/Shoutrrr
支持的通知方式很多,大家可以根据自己的实际需求进行配置。
结束语
数据安全一直是大家关心的问题,有了scrutiny
的帮助,我们可以7x24的关注硬盘健康状况,而不需要我们在其上花费太多的时间。