Featured image of post 好物推荐 - scrutiny

好物推荐 - scrutiny

一个基于web端的硬盘状态查看与监控工具

背景

当我们想查看服务器上硬盘状况时,是不是首先想到的就是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 

然后,就是安装scrutinyscrutiny是个开源且免费的硬盘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查看所有硬盘的状态了。

IMG_20231214_091205

是不是很直观?点击还可以查看硬盘的详细信息。

反向代理与访问控制

为了访问方便,接下来就是设置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.yamlnotify.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的关注硬盘健康状况,而不需要我们在其上花费太多的时间。


最后更新于 2023-12-17
小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次