#状态 #bash #基础设施 #页面 #首页 #脚本 #样式表

app stylus

Stylus (样式 + 状态) 是一个轻量级的家庭基础设施状态页面

7 个版本

0.10.0 2023年3月4日
0.9.14 2020年6月28日
0.9.12 2020年5月22日

928网络编程

MIT 许可证

1MB
1.5K SLoC

stylus CI crates.io

Stylus (样式 + 状态) 是一个轻量级的家庭基础设施状态页面。配置一组 bash 脚本以测试您基础设施的各个部分,设置 HTML/SVG 网络图,Stylus 将为您生成一个动态样式表,以提供当前状态的视觉概述。

请注意,此项目最初是用 deno 编写的,但被重写为 Rust 以支持 Raspberry Pi。原始的 deno 源代码位于 deno 分支中。

运行

请在此处查看运行 Stylus 的 wiki 页面.

工作原理

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

高级技术

可以使用 jqsedawk 等工具进行更高级的测试(例如:API)。如果需要,可以使用 ssh 连接到主机并执行远程测试。也可以使用 snmpwalksnmpget 为讲 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,其性能主要受您的测试脚本重量级限制。

屏幕截图

包含的示例

Screenshot

我的个人网络

Screenshot

依赖项

~19–33MB
~487K SLoC