首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Blog】使用Zabbix监控Starlink Dish

【Blog】使用Zabbix监控Starlink Dish

作者头像
Zabbix
发布2026-06-24 11:49:18
发布2026-06-24 11:49:18
690
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

作者Author

Aleksandrs Petrovs-Gavrilovs

Zabbix认证培训师

目录

  1. 监控配置
  2. WebDriver 安装
  3. Zabbix server/proxy 配置
  4. 创建主机
  5. 创建浏览器监控项
  6. 创建依赖监控项
  7. 创建依赖型低级别自动发现监控项原型
  8. 实现效果

导语

你知道仅用 Zabbix 就能监控 Starlink dish吗?使用Starlink的想法(或者说需求)是在我搬到一个比较偏远的郊区后萌生的。当地的互联网服务商还没给这类地区“提供”光纤和稳定的移动网络,在四处寻找解决方案时,我偶然发现 Starlink 已经在为当地一些企业提供服务。后来我才知道,他们也向我所在区域的住宅用户开放服务。

长话短说,互联网接入在 IT 领域至关重要,所以我决定购置并监控自己的 Starlink dish。起初这个颇具挑战, 因为普通用户能获取的数据是非常有限的。但多亏了 Zabbix 的浏览器监控功能,我很轻松地解决了这个问题。这篇文章里,我会把我的解决方案包括配套模板分享给大家。

1、监控配置

首先,你需要确保 Zabbix(无论是 Zabbix proxy还是server)安装在与 Starlink dish和路由器的同一网络中。下一步是配置Zabbix浏览器监控。

2、WebDriver安装

代码语言:javascript
复制
# podman run --name webdriver -d \
-p 4444:4444 \ 
-p 7900:7900 \
--shm-size="2g" \
--restart=always -d docker.io/selenium/standalone-chrome:latest

4444 端口将作为 WebDriver的监听端口,端口7900 将被 NoVNC 使用,以便我们在使用带有GUI的浏览器上观察其行为。

3、Zabbix server / proxy 配置

WebDriver 安装完成后,我们需要设置 Zabbix 与驱动之间的通信。这可以通过编辑 Zabbix server/proxy的配置文件和更新以下参数实现:

代码语言:javascript
复制
### Option: WebDriverURL 
# WebDriver interface HTTP[S] URL. For example http://localhost:4444 used with 
# Selenium WebDriver standalone server. 
# 
# WebDriverURL= 
WebDriverURL=http://localhost:4444 
### Option: StartBrowserPollers 
# Number of pre-forked instances of browser item pollers. 
# 
# Range: 0-1000
# StartBrowserPollers=1
StartBrowserPollers=5

配置参数设置完成后,重启 Zabbix server/proxy使其生效:

代码语言:javascript
复制
systemctl restart zabbix-server

4、创建主机

首先,我们需要进入「Data collection」>「Hosts」页面,创建一个代表 Starlink dish的主机。我的示例主机配置如下:

Starlink dish 主机

该主机还包含一个用户宏:

{$LINK},值为:http://webapp.starlink.com ,用于指向正确的 Starlink dish网页应用:

链接宏

5、创建浏览器监控项

接下来我们要配置浏览器监控项,来采集和监控 Starlink 网页应用中暴露的指标列表:

Starlink 浏览器项目

这里我们使用最基础的配置,请确保根据你的需要设置更新间隔,但不建议间隔短于5分钟,由于依赖项已存储相关数据,也不建议存储历史数据。

这个监控项最核心的部分是脚本本身:

代码语言:javascript
复制
var browser, result;
var opts = Browser.chromeOptions();

opts.capabilities.alwaysMatch['goog:chromeOptions'].args = [];
browser = new Browser(opts);
browser.setScreenSize(Number(1980), Number(1020));

try {
    var params = JSON.parse(value);
    browser.navigate(params.url);

// Wait for the dish to report status
    Zabbix.sleep(2000);

// Find the JSON text element(s)
    var jsonElements = browser.findElements("xpath", "//div[@id='root']/div[@class='App']/div[@class='Main']/div[2]/div[@class='Section'][2]/pre[@class='Json-Format']/div[@class='Json-Text']");
    var extractedData = [];

for (var i = 0; i < jsonElements.length; i++) {
        var text = jsonElements[i].getText();

// Try parsing JSON
try {
            extractedData.push(JSON.parse(text));
        } catch (e) {
// If not valid JSON, include raw text instead
            extractedData.push({ raw: text, error: "Invalid JSON format" });
        }
    }

// Collect result 
    result = browser.getResult();

// Replace with parsed JSON data
    result.extractedJsonData = extractedData.length === 1 ? extractedData[0] : extractedData;

}
catch (err) {
if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
}
finally {
// Return a clean JSON object
return JSON.stringify(result.extractedJsonData);
}

那么这个脚本是做什么的呢?它会打开 Starlink 网页应用,等待Starlink dish输出所有状态数据,经过简单解析后,返回截图中突出显示的数据:

Starlink dish 诊断数据

现在你可以点击监控项页面中新建的监控项左侧的三个点,为感兴趣的每个值创建依赖监控项了!

6、创建依赖监控项

点击此处:

举个例子,要创建监控硬件版本的项,可以按如下配置:

硬件版本依赖项

配置 JSONPath 预处理:

硬件版本监控项预处理

最终我们在 Zabbix 中获取到数据:

Starlink dish 硬件版本

其他所有监控项(告警除外)都遵循同样的逻辑 —— 只需更新监控项名称、键值,以及预处理中的 JSONPath 来提取所需数值即可。

7、创建低级别自动发现(LLD)监控项原型

为了自动创建告警监控项,可创建依赖发现规则。在"Discovery"部分,新建新的发现规则:

Starlink dish 告警发现

使用 JavaScript 进行预处理:

代码语言:javascript
复制
var data = JSON.parse(value);
var alerts = data.alerts;
var lld = [];

for (var key in alerts) {
    if (alerts.hasOwnProperty(key)) {
        lld.push({
            "{#ALERT}": key
        });
    }
}

return JSON.stringify({ data: lld });

这段脚本将为我们生成如下 JSON 数据:

代码语言:javascript
复制
{
  "data": [
    {
      "{#ALERT}": "dishIsHeating"
    },
    {
      "{#ALERT}": "dishThermalThrottle"
    },
    {
      "{#ALERT}": "dishThermalShutdown"
    },
    {
      "{#ALERT}": "powerSupplyThermalThrottle"
    },
    {
      "{#ALERT}": "motorsStuck"
    },
    {
      "{#ALERT}": "mastNotNearVertical"
    },
    {
      "{#ALERT}": "slowEthernetSpeeds"
    },
    {
      "{#ALERT}": "softwareInstallPending"
    },
    {
      "{#ALERT}": "movingTooFastForPolicy"
    },
    {
      "{#ALERT}": "obstructed"
    }
  ]
}

接下来就是创建一个依赖监控项原型:

Starlink dish 告警原型

当然,也要配置预处理:

JSONPath 将提取每个特定告警,而"布尔值转十进制"规则会将 true/false 转换为数字,帮我们节省数据库的空间。

8、实现效果

最终,我们可以监控到所有数据:

Starlink dish 最新数据

当然,如果你愿意做一些额外的配置,还可以通过导出器采集更多数据!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档