7 个版本
0.10.0 | 2023年3月4日 |
---|---|
0.9.14 | 2020年6月28日 |
0.9.12 | 2020年5月22日 |
928 在 网络编程
1MB
1.5K SLoC
stylus

Stylus (样式 + 状态) 是一个轻量级的家庭基础设施状态页面。配置一组 bash 脚本以测试您基础设施的各个部分,设置 HTML/SVG 网络图,Stylus 将为您生成一个动态样式表,以提供当前状态的视觉概述。
请注意,此项目最初是用 deno 编写的,但被重写为 Rust 以支持 Raspberry Pi。原始的 deno 源代码位于 deno
分支中。
运行
工作原理
Stylus 作为具有特殊端点和状态监控工具的 web 服务器。
状态监控部分基于脚本,可以使用您喜欢的任何 shell 脚本语言编写。每个脚本都会定时运行,如果脚本返回 0
,则表示特定服务的“正常运行”。如果服务超时或返回非零错误,则被视为软错误(“黄色”)或硬错误(“红色”)。
web 服务器上可用的特殊端点如下
/style.css
:基于当前动态生成的 CSS 文件/status.json
:当前状态的 JSON 表示
您可以将 style.css
端点链接到从配置的 static
目录中提供的 HTML 或 SVG 文件。如果需要,可以使用 JavaScript 定期刷新 HTML 页面的 CSS。请参阅所包含的示例以获取如何实现的示例。
入门
要开始,请将示例复制到您希望运行状态监控脚本的位置。对于您要监控的每个服务器,在 monitor.d
下的子目录中创建一个新的子目录,其名称与该服务器相同。
使用类似 diagrams.net 的工具,创建您网络的 SVG 图形。将 SVG DOM 属性附加到您想要根据状态更改进行样式设计的元素上。如果您使用的是 diagrams.net,则可以使用 svgdata
插件完成此操作。或者,您也可以使用 SVG 编辑器生成的自动标识符作为您的监控标识符。
从您生成的 SVG 中,创建 CSS 选择器和规则,当状态改变时应用于适当的元素。SVG 的 fill
属性是一个很好的更改候选,但请确保您在所有规则中使用 !important
以覆盖由 SVG 编辑器创建的填充颜色。
配置
为 Stylus 安装提供的示例 config.yaml
。此配置将元数据附加到各种状态,并具有适用于 HTML(用于状态表)和 CSS(用于状态 SVG 图像)的选取器。
version: 1
server:
port: 8000
static: static/
monitor:
dir: monitor.d/
css:
# Arbitrary metadata can be associated with the four states
metadata:
blank:
color: "white"
red:
color: "#fa897b"
yellow:
color: "#ffdd94"
green:
color: "#d0e6a5"
rules:
# Multiple CSS rules with handlebars replacements are supported
- selectors: "#{{monitor.id}}"
declarations: "
background-color: {{monitor.status.css.metadata.color}} !important;
"
通过在监控目录(默认 monitor.d/
)中创建子目录并将 config.yaml
放在该监控子目录中,来配置监控器。
# ID is optional and will be inferred from the directory
id: router-1
test:
interval: 60s
timeout: 30s
command: test.sh
测试脚本
测试脚本通常非常简单。请注意,docker 容器包含许多有用的实用工具,但您可以考虑手动安装额外的包(要么创建一个额外的 docker 容器,要么在容器内部手动运行 alpine 的 apk
工具)来处理您特定的案例。
Ping
除非您有特别差的连接,否则一个 ping 就足以测试主机是否运行。
#!/bin/bash
set -xeuf -o pipefail
ping -c 1 8.8.8.8
cURL
对于可能有服务运行或不运行的主机,您可能想使用 cURL 来测试该服务本身是否可到达。
#!/bin/bash
set -xeuf -o pipefail
curl --retry 2 --max-time 5 --connect-timeout 5 http://192.168.1.1:9000
高级技术
可以使用 jq
、sed
或 awk
等工具进行更高级的测试(例如:API)。如果需要,可以使用 ssh 连接到主机并执行远程测试。也可以使用 snmpwalk
和 snmpget
为讲 SNMP 的设备构建测试。
性能
Stylus 非常轻量,无论是从处理还是内存的角度来看。
在 Raspberry Pi 1B 上,Stylus 在以 1/s 的速率刷新 CSS 时,CPU 使用率不到 1%。在 2015 年的 MacBook Pro 上,当 Stylus 正在刷新时,它大约使用了 0.1% 的单核。
Stylus 在 Raspberry Pi 上监控 15 个服务时,大约使用 2MB(根据 ps_mem)。
当不是积极监控时,Stylus 使用几乎可以忽略不计的 CPU,其性能主要受您的测试脚本重量级限制。
屏幕截图
包含的示例
我的个人网络
依赖项
~19–33MB
~487K SLoC