#状态 #微服务 #HTTP 状态 #基础设施 #Slack #发送电子邮件 #监控

app vigil-server

微服务状态页面。监控分布式基础设施并发送警报(Slack、短信等)。

53 个稳定版本

1.26.3 2023年9月1日
1.25.1 2023年1月31日
1.24.3 2022年7月25日
1.22.5 2022年2月11日
0.0.4 2018年1月10日

#91Web 编程

MPL-2.0 和可能 LGPL-3.0

215KB
4K SLoC

Rust 3.5K SLoC // 0.1% comments Tera 192 SLoC Forge Config 156 SLoC // 0.0% comments Shell 123 SLoC // 0.2% comments JavaScript 97 SLoC

包含 (WOFF 字体,17KB) open_sans_bold.woff,(WOFF 字体,13KB) open_sans_bold.woff2,(WOFF 字体,16KB) open_sans_light.woff,(WOFF 字体,13KB) open_sans_light.woff2,(WOFF 字体,16KB) open_sans_regular.woff,(WOFF 字体,13KB) open_sans_regular.woff2更多内容

Vigil

Test and Build Build and Release dependency status Buy Me A Coffee

微服务状态页面。监控分布式基础设施并发送警报(Slack、短信等)。

Vigil 是一个开源状态页面,您可以将其托管在您的基础设施上,用于监控所有服务器和应用程序,并可供您的用户查看(在您选择的域名上,例如 status.example.com)。

在微服务环境中,它非常有用,可以同时监控应用程序和后端。如果您的基础设施中的一个节点宕机,您将在 Slack 频道、电子邮件、Twilio 短信或 XMPP 中收到状态变化通知。

在 Rust 版本 rustc 1.71.1 (eb26296b5 2023-08-03) 上进行了测试

🇭🇺 在匈牙利布达佩斯制作。

👉 在 Crisp 状态页面 上查看 Vigil 的实时演示。

📰 Vigil 项目在我个人日志的一篇帖子中宣布了

Vigil

谁在使用它?

Crisp Meilisearch miragespace Redsmin Image-Charts Pikomit 注意 Bareconnect

👋 如果您使用 Vigil 并希望被列入其中,请联系我

功能

  • 自动监控您的基础设施服务
  • 当服务出现故障或恢复正常时,通过配置的频道通知您
    • 电子邮件
    • Twilio(短信)
    • Slack
    • Zulip
    • Telegram
    • Pushover
    • Gotify
    • XMPP
    • Matrix
    • Cisco Webex
    • Webhook
  • 生成状态页面,您可以在您的域名上托管它供公众用户使用(例如 https://status.example.com
  • 允许发布公告,例如通知用户即将进行计划性维护

它是如何工作的?

Vigil 监控您所有的基础设施服务。您首先需要配置要监控的目标服务,然后 Vigil 会为您完成剩余工作。

Vigil 可以监控三种类型的服务

  • HTTP / TCP / ICMP 服务:Vigil 会频繁探测 HTTP、TCP 或 ICMP 目标并检查可达性
  • 应用程序服务:安装 Vigil Reporter 库,例如在您的 NodeJS 应用程序中,当您的应用程序崩溃或主机服务器系统过载时,您将获得报告
  • 本地服务:安装一个从属 Vigil Local 守护进程来监控 Vigil 主服务器无法访问的服务(例如,位于不同局域网上的服务)

建议配置 Vigil、Vigil Reporter 或 Vigil Local 以发送频繁的探测检查,以确保在服务崩溃时您能迅速得到通知(从而减少您服务的不预期停机时间)。

作为 Vigil 的托管替代方案

Vigil 需要托管在您的系统上,并由您维护。如果您不想再管理另一个服务,您可以使用 Crisp Status 代替。

Crisp Status 是 Vigil 在 Crisp 客户支持平台上的直接移植。

Crisp Status 在 Crisp 系统上托管您的状态页面,并且能够做到 Vigil 所能做的事情(甚至更多!)Crisp Status 与其他 Crisp 产品(例如 Crisp ChatboxCrisp Helpdesk)集成。如果您的状态页面在一段较长的时间内报告为 dead,它将通过聊天框和帮助台提醒您的用户。

作为一个运行 Crisp Status 的状态页面的例子,请查看 Enrich 状态页面

如何使用它?

安装

Vigil 是用 Rust 编写的。要安装它,您可以从 Vigil 发布页面 下载版本,使用 cargo install 或从 master 拉取源代码。

👉 每个发布二进制文件都附带一个 .asc 签名文件,可以使用 @valeriansaliou GPG 公钥进行验证: 🔑valeriansaliou.gpg.pub.asc

从软件包安装

Vigil 为基于 Debian 的系统(Debian、Ubuntu 等)提供预构建的软件包。

重要提示:目前 Vigil 只提供针对 Debian 10、11 和 12 的 64 位软件包(代号:busterbullseyebookworm)。您仍然可以在其他 Debian 版本以及 Ubuntu 上使用它们。

首先,添加 Vigil APT 仓库(例如,对于 Debian bookworm

echo "deb https://packagecloud.io/valeriansaliou/vigil/debian/ bookworm main" > /etc/apt/sources.list.d/valeriansaliou_vigil.list
curl --silent -L https://packagecloud.io/valeriansaliou/vigil/gpgkey | apt-key add -
apt-get update

然后,安装 Vigil 软件包

apt-get install vigil

然后,编辑预填充的 Vigil 配置文件

nano /etc/vigil.cfg

最后,重启 Vigil

service vigil restart

从 Cargo 安装

如果您喜欢通过 Rust 的 Cargo 管理 vigil,可以直接使用 cargo install 安装。

cargo install vigil-server

请确保您的 $PATH 已正确配置以使用 Crates 二进制文件,然后使用 vigil 命令运行 Vigil。

从源代码安装

最后一种方法是从Git中拉取源代码,并通过 cargo 编译Vigil。

cargo build --release

构建的二进制文件可以在 ./target/release 目录中找到。

在编译Vigil之前,请安装 libssl-dev(即OpenSSL头文件)和 libstrophe-dev(即XMPP库头文件;只有需要XMPP通知时才需要)。SSL依赖项对于HTTPS探测和电子邮件通知是必需的。

从Docker Hub安装

您可能会发现通过Docker运行Vigil很方便。您可以在Docker Hub上找到预先构建的Vigil镜像,地址为valeriansaliou/vigil

预构建的Docker版本可能不是可用的最新版本的Vigil。

首先,拉取 valeriansaliou/vigil 镜像

docker pull valeriansaliou/vigil:v1.26.3

然后,创建一个配置文件并运行它(将 /path/to/your/vigil/config.cfg 替换为您配置文件的路径)

docker run -p 8080:8080 -v /path/to/your/vigil/config.cfg:/etc/vigil.cfg valeriansaliou/vigil:v1.26.3

在配置文件中,确保

  • server.inet 设置为 0.0.0.0:8080(这允许从容器外部访问Vigil)
  • assets.path 设置为 ./res/assets/(这指的是容器内部路径,因为资产包含在那里)

Vigil可以通过 http://localhost:8080 访问。

配置

使用示例 config.cfg 配置文件,并将其调整到您的环境。

您还可以在配置文件中使用字符串插值的环境变量,例如 manager_token: ${VIGIL_MANAGER_TOKEN}

以下是对可用配置选项的注释,以及允许的值

[server]

  • log_level(类型:字符串,允许:debuginfowarnerror,默认:error)——日志详细程度,在生产环境中设置为 error
  • inet(类型:字符串,允许:IPv4 / IPv6 + 端口,默认:[::1]:8080)——Vigil公共状态页面应监听的宿主机和TCP端口
  • workers(类型:整数,允许:任何数字,默认:4)——Vigil公共状态页面运行的进程数
  • manager_token(类型:字符串,允许:秘密令牌,默认:无默认值)——管理器秘密令牌(即秘密密码)
  • reporter_token(类型:字符串,允许:秘密令牌,默认:无默认值)——报告者秘密令牌(即秘密密码)

[assets]

  • path(类型:字符串,允许:UNIX路径,默认:./res/assets/)——Vigil资产目录的路径

[branding]

  • page_title(类型:字符串,允许:任何字符串,默认:Status Page)——状态页面标题
  • page_url(类型:字符串,允许:URL,无默认值)——状态页面URL
  • company_name(类型:字符串,允许:任何字符串,无默认值)——公司名称(即您的公司)
  • icon_color (类型:字符串,允许:十六进制颜色代码,无默认值) — 图标颜色(即您的图标背景颜色)
  • icon_url (类型:字符串,允许:URL,无默认值) — 图标URL,图标应为您的方形标志,用作状态页面的favicon(推荐PNG格式)
  • logo_color (类型:字符串,允许:十六进制颜色代码,无默认值) — 标志颜色(即您的标志主色)
  • logo_url (类型:字符串,允许:URL,无默认值) — 标志URL,标志应为您的全宽度标志,用作状态页面的头部标志(推荐SVG格式)
  • website_url (类型:字符串,允许:URL,无默认值) — 用于状态页面头部的网站URL
  • support_url (类型:字符串,允许:URL,无默认值) — 用于状态页面头部的支持URL(即用户在有问题时可以联系您的位置)
  • custom_html (类型:字符串,允许:HTML,默认:空) — 包含在状态页面head中的自定义HTML(可选)

[指标]

  • poll_interval (类型:整数,允许:秒,默认:120) — 在poll模式中探测节点的间隔
  • poll_retry (类型:整数,允许:秒,默认:2) — 在poll模式中第二次探测节点前的间隔(仅当第一次检查失败时)
  • poll_http_status_healthy_above (类型:整数,允许:HTTP状态码,默认:200) — poll检查HTTP副本报告为healthy的HTTP状态码之上
  • poll_http_status_healthy_below (类型:整数,允许:HTTP状态码,默认:400) — poll检查HTTP副本报告为healthy的HTTP状态码之下
  • poll_delay_dead (类型:整数,允许:秒,默认:10) — 在poll模式中,节点被认为dead的延迟(即检查响应延迟)
  • poll_delay_sick (类型:整数,允许:秒,默认:5) — 在poll模式中,节点被认为sick的延迟(即检查响应延迟)
  • poll_parallelism (类型:整数,允许:任何数字,默认:4) — 同时运行的poll线程的最大数量(如果您正在监控许多节点和/或响应缓慢的节点,增加并行性将有所帮助)
  • push_delay_dead (类型:整数,允许:秒,默认:20) — 在push模式中,节点被认为dead的延迟(即节点未报告的时间)
  • push_system_cpu_sick_above (类型:浮点数,允许:系统CPU负载,默认:0.90) — 对于CPU的系统负载指数,在push模式中将节点视为sick(即UNIX系统负载)
  • push_system_ram_sick_above (类型:浮点数,允许:系统RAM负载,默认:0.90) — 对于RAM的系统负载指数,在push模式中将节点视为sick(即使用百分比RAM)
  • script_interval(类型:整数,允许:秒,默认:300)— 在 script 模式下探测节点的间隔
  • script_parallelism(类型:整数,允许:任何数字,默认:2)— 同时运行的脚本执行线程的最大数量(如果您正在运行大量脚本或长时间运行的脚本,增加并行性将有所帮助)
  • local_delay_dead(类型:整数,允许:秒,默认:40)— 在 local 模式下,节点被认为是 dead(即没有报告的时间)之后的延迟

[插件]

plugins.rabbitmq

  • api_url(类型:字符串,允许:URL,无默认)— RabbitMQ API URL(例如 http://127.0.0.1:15672
  • auth_username(类型:字符串,允许:用户名,无默认)— RabbitMQ API 认证用户名
  • auth_password(类型:字符串,允许:密码,无默认)— RabbitMQ API 认证密码
  • virtualhost(类型:字符串,允许:虚拟主机,无默认)— 监控的队列所在的 RabbitMQ 虚拟主机
  • queue_ready_healthy_below(类型:整数,允许:任何数字,无默认)— 要考虑节点 healthy 的 RabbitMQ 队列中 ready 状态的最大有效负载数
  • queue_nack_healthy_below(类型:整数,允许:任何数字,无默认)— 要考虑节点 healthy 的 RabbitMQ 队列中 nack 状态的最大有效负载数
  • queue_ready_dead_above(类型:整数,允许:任何数字,无默认)— 当 RabbitMQ 队列中 ready 状态的有效负载数超过此阈值时,节点应被认为是 dead(停滞队列)
  • queue_nack_dead_above(类型:整数,允许:任何数字,无默认)— 当 RabbitMQ 队列中 nack 状态的有效负载数超过此阈值时,节点应被认为是 dead(停滞队列)
  • queue_loaded_retry_delay(类型:整数,允许:毫秒,无默认)— 如果在延迟后报告为已加载,则重新检查队列;这可以避免在系统通常需要一些时间来处理挂起的队列有效负载时出现假阳性

[通知]

  • startup_notification(类型:布尔值,允许:truefalse,默认:true)— 是否发送启动通知(表示系统是 healthy
  • reminder_interval(类型:整数,允许:秒,无默认)— 下线提醒通知应发送的间隔(如果有的话)
  • reminder_backoff_function(类型:字符串,允许:nonelinearsquarecubic,默认:none)— 如果启用,随着提醒的发送,下线提醒间隔会变得更大。该值将是 reminder_interval × pow(N, x),其中 N 是自服务下线以来发送的提醒数量,x 是指定的增长因子。
  • reminder_backoff_limit(类型:整数,允许:任何数字,默认:3)— 离线提醒回退计数器的最大值(如果启用了回退函数)。

notify.email

  • to(类型:字符串,允许:电子邮件地址,无默认值)— 发送电子邮件的电子邮件地址
  • from(类型:字符串,允许:电子邮件地址,无默认值)— 发送电子邮件的电子邮件地址
  • smtp_host(类型:字符串,允许:主机名,IPv4,IPv6,默认:localhost)— 要连接的SMTP主机
  • smtp_port(类型:整数,允许:TCP端口,默认:587)— 要连接的SMTP TCP端口
  • smtp_username(类型:字符串,允许:任何字符串,无默认值)— 用于认证的SMTP用户名(如果有的话)
  • smtp_password(类型:字符串,允许:任何字符串,无默认值)— 用于认证的SMTP密码(如果有的话)
  • smtp_encrypt(类型:布尔值,允许:truefalse,默认:true)— 是否使用STARTTLS加密SMTP连接
  • reminders_only(类型:布尔值,允许:truefalse,默认:false)— 是否仅发送离线提醒电子邮件或每次都发送

notify.twilio

  • to(类型:数组[string],允许:电话号码,无默认值)— 发送短信的电话号码列表
  • service_sid(类型:字符串,允许:任何字符串,无默认值)— Twilio服务标识符(例如,Service Sid
  • account_sid(类型:字符串,允许:任何字符串,无默认值)— Twilio账户标识符(例如,Account Sid
  • auth_token(类型:字符串,允许:任何字符串,无默认值)— Twilio认证令牌(例如,Auth Token
  • reminders_only(类型:布尔值,允许:truefalse,默认:false)— 是否仅发送离线提醒短信或每次都发送

notify.slack

  • hook_url(类型:字符串,允许:URL,无默认值)— Slack钩子URL(例如,https://hooks.slack.com/[..]
  • mention_channel(类型:布尔值,允许:truefalse,默认:false)— 发送Slack消息时是否提及频道(使用@channel,这有助于接收高优先级通知)
  • reminders_only(类型:布尔值,允许:truefalse,默认:false)— 是否仅发送离线提醒Slack消息或每次都发送

notify.zulip

  • bot_email(类型:字符串,允许:任何字符串,无默认值)— 由Zulip接口提供的机器人邮件地址
  • bot_api_key(类型:字符串,允许:任何字符串,无默认值)——Zulip界面提供的机器人API密钥
  • channel(类型:字符串,允许:任何字符串,无默认值)——要发送通知的频道名称
  • api_url(类型:字符串,允许:URL,无默认值)——API端点URL(例如:https://domain.zulipchat.com/api/v1/
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送停机提醒消息,或每次都发送

notify.telegram

  • bot_token(类型:字符串,允许:任何字符串,无默认值)——Telegram机器人token
  • chat_id(类型:字符串,允许:任何字符串,无默认值)——Vigil要发送消息的聊天标识符。可以是群聊标识符(例如:"@foo")或用户聊天标识符(例如:"123456789"

notify.pushover

  • app_token(类型:字符串,允许:任何字符串,无默认值)——Pushover应用程序token(您需要创建一个专门的Pushover应用程序来获取一个)
  • user_keys(类型:字符串数组,允许:任何字符串,无默认值)——Pushover用户key列表(即,您的Pushover目标用户的key)
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送Pushover通知作为停机提醒,还是每次都发送

notify.gotify

  • app_url(类型:字符串,允许:URL,无默认值)- 不带尾斜杠的Gotify端点(例如:https://push.gotify.net
  • app_token(类型:字符串,允许:任何字符串,无默认值)——Gotify应用程序token
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送Gotify通知作为停机提醒,还是每次都发送

notify.xmpp

注意:XMPP通知器在编译Vigil时需要libstrophe(Debian上的libstrophe-dev软件包)可用,并在Cargo构建时启用notifier-xmpp功能。

  • to(类型:字符串,允许:Jabber ID,无默认值)——要发送消息的Jabber ID(JID)
  • from(类型:字符串,允许:Jabber ID,无默认值)——发送消息的Jabber ID(JID)
  • xmpp_password(类型:字符串,允许:任何字符串,无默认值)——用于身份验证的XMPP账户密码
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送停机提醒消息,或每次都发送

notify.matrix

  • homeserver_url(类型:字符串,允许:URL,无默认值)——已创建账户的Matrix服务器(例如:https://matrix.org
  • access_token(类型:字符串,允许:任何字符串,无默认值)——先前创建会话的Matrix访问token(例如Element Web访问token)
  • room_id(类型:字符串,允许:任何字符串,无默认值)——要发送消息的Matrix房间ID(例如:!abc123:matrix.org
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送停机提醒消息,或每次都发送

notify.webex

  • endpoint_url(类型:字符串,允许:URL,无默认值)——Webex端点URL(例如:https://webexapis.com/v1/messages
  • token(类型:字符串,允许:任何字符串,无默认值)- Webex访问token
  • room_id(类型:字符串,允许:任何字符串,无默认值)- 要发送消息的 Webex 房间 ID(例如:Y2lzY29zcGFyazovL3VzL1JPT00vMmJmOD
  • reminders_only(类型:布尔值,允许:truefalse,默认值:false)——是否仅发送停机提醒消息,或每次都发送

notify.webhook

  • hook_url(类型:字符串,允许:URL,无默认值)- Web Hook URL(例如:https://domain.com/webhooks/[..]

[探针]

[probe.service]

  • id(类型:字符串,允许:任何唯一的小写字符串,无默认值)- 被探查服务的唯一标识符(在状态页面上不可见)
  • label(类型:字符串,允许:任何字符串,无默认值)- 被探查服务的名称(在状态页面上可见)

[probe.service.node]

  • id(类型:字符串,允许:任何唯一的小写字符串,无默认值)- 被探查服务节点的唯一标识符(在状态页面上不可见)
  • label(类型:字符串,允许:任何字符串,无默认值)- 被探查服务节点的名称(在状态页面上可见)
  • mode(类型:字符串,允许:pollpushscriptlocal,无默认值)- 该节点的探针模式(即 poll 是直接对 replicas 中设置的 URL 进行 HTTP、TCP 或 ICMP 探针,而 push 是用于 Vigil Reporter 节点,script 用于执行 shell 脚本,local 是用于 Vigil Local 节点)
  • replicas(类型:数组[string],允许:TCP、ICMP 或 HTTP URL,默认:空)- 要探针的节点副本 URL(仅在 modepoll 时使用)
  • scripts(类型:数组[string],允许:shell 脚本源代码,默认:空)- 作为 Vigil 子进程在系统上执行的 shell 脚本;它们用于构建自定义探针很有用(仅在 modescript 时使用)
  • http_headers(类型:map[string, string],允许:任何有效的头名称和值,默认:空)- 要添加到 HTTP 请求中的 HTTP 头(例如:http_headers = { "Authorization" = "Bearer xxxx" }
  • http_method(类型 string,允许:GETHEADPOSTPUTPATCH,无默认值)- 探针端点时要使用的 HTTP 方法(省略此值将默认使用 HEADGET,具体取决于 http_body_healthy_match 配置值)
  • http_body(类型 string,允许:任何字符串,无默认值)- 在探针端点时发送的 HTTP 请求体(仅在 http_method 设置为 POSTPUTPATCH 时有效)
  • http_body_healthy_match(类型:string,允许:正则表达式,无默认值)- 当节点副本报告为 healthy 的 HTTP 响应体(如果体不匹配,即使状态码检查通过,副本也会被报告为 dead;如果设置此选项,检查使用 GET 而不是通常的 HEAD
  • reveal_replica_name (类型: 布尔值,允许: truefalse,默认: false) — 是否在公共状态页面上显示副本名称(如果副本URL需要保密,这可能会存在安全风险)
  • rabbitmq_queue (类型: 字符串,允许: RabbitMQ 队列名称,无默认值) — 与节点关联的 RabbitMQ 队列,通过 RabbitMQ API 检查待处理的有效载荷(这有助于监控队列中累积的未确认有效载荷)
  • rabbitmq_queue_nack_healthy_below (类型: 整数,允许: 任何数字,无默认值) — 与节点关联的 RabbitMQ 队列中,状态为 nack 的最大有效载荷数,考虑节点 healthy(这覆盖了全局 plugins.rabbitmq.queue_nack_healthy_below
  • rabbitmq_queue_nack_dead_above (类型: 整数,允许: 任何数字,无默认值) — 与节点关联的 RabbitMQ 队列中,状态为 nack 的有效载荷数阈值,超过该阈值节点应被视为 dead(停滞队列,这覆盖了全局 plugins.rabbitmq.queue_nack_dead_above

运行 Vigil

Vigil 可以这样运行

./vigil -c/path/to/config.cfg

使用建议

使用 Vigil 时,请考虑以下建议

  • Vigil 应托管在安全、独立的服务器上。 该服务器应运行在与您监视的基础设施服务器不同的物理机器和网络。
  • 请确保在您的监视 HTTP 服务上将 Vigil 服务器公共 IP(IPv4 和 IPv6)列入白名单;如果您使用挑战机器人 IP 的机器人保护服务,例如 Distil Networks 或 Cloudflare,则适用。如果触发机器人挑战,Vigil 会将 HTTP 服务视为已关闭。

状态变体看起来像什么?

Vigil 有 3 种状态变体,可以是 healthy(无正在进行的问题),sick(服务在高负载下)或 dead(中断)

健康状态变体

Status Healthy

病态状态变体

Status Sick

死亡状态变体

Status Dead

公告看起来像什么?

可以通过发布公告来让您的用户了解任何计划内的维护以及解决中断的进展

Announcement

警报看起来像什么?

当监视的后端或应用程序在您的基础设施中中断时,Vigil 可以通过 Slack、Twilio SMS、电子邮件和 XMPP 通知您

Vigil alert in Slack

您还可以在例如 iPhone 和 Apple Watch 上获得漂亮的实时 downup 警报

Vigil down alert on iPhone (Slack) Vigil up alert on Apple Watch (Slack) Vigil alerts on iPhone (Twilio SMS)

Webhook 有效载荷看起来像什么?

如果您在 Vigil 中使用 Webhook 通知器,您将在任何状态更改时收到包含警报详情的 JSON 格式有效载荷;如果配置了 notify.reminder_interval,还会收到提醒。

以下是一个 Webhook 有效载荷的示例

{
  "type": "changed",
  "status": "dead",
  "time": "08:58:28 UTC+0200",

  "replicas": [
    "web:core:tcp://edge-3.pool.net.crisp.chat:80"
  ],

  "page": {
    "title": "Crisp Status",
    "url": "https://status.crisp.chat/"
  }
}

在将它们集成到自定义端点之前,可以使用例如 Webhook.site 测试 Webhook 通知。

您可以使用这些 Webhook 有效载荷来创建到任何地方的定制通知器。例如,如果您使用 Microsoft Teams 但不使用 Slack,则可以编写一个小的 PHP 脚本,该脚本从 Vigil 接收 Webhook 并将通知转发到 Microsoft Teams。这可能很有用;虽然 Vigil 只实现了某些选定渠道的便利通知器,但 Webhook 通知器允许您扩展到这些渠道之外。

如何创建脚本探测?

Vigil 允许您创建自定义探测脚本,这些脚本以 shell 脚本的形式编写,作为要为给定节点执行的一组脚本来传递到 Vigil 配置中。

这些脚本可以在高级Vigil用户需要脚本进行监控时使用,例如当pushpoll探测器不足以满足需求时。

脚本外壳应该通过返回码返回副本健康状态,其中

  • rc=0:表示healthy
  • rc=1:表示sick
  • rc=2和更高:表示dead

由于脚本通常是多行的,脚本内容可以作为字面字符串传递,用'''括起来。

例如,以下脚本配置始终返回sick

scripts = [
  '''
  # Do some work...
  exit 1
  '''
]

请注意,脚本是由Vigil拥有的子进程在系统外壳中执行的。请确保Vigil在一个具有有限权限的UNIX用户上运行。以root身份运行Vigil将允许任何配置的脚本在机器上执行root级别的操作,这不被推荐。

如何将Vigil Reporter集成到我的代码中?

Vigil Reporter用于从您的应用程序中主动提交健康信息到Vigil。最佳做法是通过应用程序探测器来监控应用程序,这些探测器能够报告详细的系统信息,例如CPU和RAM负载。这使得Vigil能够显示应用程序主机系统是否处于高负载状态。

Vigil Reporter库

👉 如果找不到您编程语言的库?自己构建一个并在这里引用!(联系我)

Vigil Reporter HTTP API

如果您需要手动将节点指标报告到Vigil端点,请使用以下HTTP配置(根据您的需要进行调整)。

👉 读取Vigil Reporter HTTP API协议规范。

如何通过Vigil Manager管理Vigil?

Vigil Manager可用于对运行的Vigil实例执行管理操作。例如,它可以用于发布公共公告。

Vigil Manager HTTP API

Vigil Manager可以通过其专用HTTP API进行交互。

👉 读取Vigil Manager HTTP API协议规范。

如何使用Vigil Local监控不同LAN上的服务?

Vigil Local是一个可选的从属守护进程,您可以使用它将内部服务健康状态报告给您的Vigil状态页面主服务器。它旨在用于防火墙后面,并监控绑定到本地环或LAN网络的宿主机,这些宿主机对您的Vigil状态页面不可用。

Vigil Local监控本地的pollscript副本,并定期将它们的状态报告给Vigil。

您可以在其仓库中阅读有关Vigil Local的更多信息,并遵循设置说明。阅读更多

🚸 故障排除问题

ICMP副本始终报告为已死

在Linux系统上,非特权用户不能创建原始套接字,而Vigil ICMP探测系统需要这些套接字。这意味着默认情况下,所有ICMP探测尝试都将静默失败,就像被探测的主机总是关闭一样。

可以通过允许Vigil创建原始套接字来轻松解决这个问题

setcap 'cap_net_raw+ep' /bin/vigil

注意,HTTP和TCP探测不需要这些原始套接字功能。

🔥 报告漏洞

如果您在Vigil中发现漏洞,非常欢迎您通过发送加密邮件直接向@valeriansaliou报告,电子邮件地址为[email protected]。不要在公共GitHub问题中报告漏洞,因为恶意人员可能会利用这些漏洞针对运行未打补丁的Vigil服务器的生产服务器。

⚠️ 您必须使用@valeriansaliou GPG公钥加密您的电子邮件:🔑valeriansaliou.gpg.pub.asc

依赖项

~26–42MB
~731K SLoC