最近我尝试了一下 Grafana 作为探针,发现它还是非常不错的。
所以,我想和大家分享一下如何制作一个ICMP+TCP+流媒体解锁的一个面板.

Demo:https://grafana.vki.im/d/aers58nt4q48wb/uki0x-s-vps-overview

我使用的部署方案是 Grafana 和 Victoriametrics 的组合。如果你对搭建基础面板感兴趣,我推荐参考这位佬的帖子:

https://www.nodeseek.com/post-311687-1

注意:
针对其中安装 agent 的部分,不用 Loki 也是可以的。面板部分依照这篇文章也是可以的。

仪表盘部分

json很长 所以放到了github里 自行复制

监控端设置

如果按照的是上面帖子中的安装方法下
需要改的位置在/usr/local/bin 目录下

有些需要换名字的 可以用word的替换 全部替换掉 方便一点

/usr/local/bin/vmagent/prometheus.yml

scrape_configs:    - job_name: node      scrape_interval: 5s      static_configs:          - targets: ['localhost:9100']            labels:                instance: Netcup.1o # 改成自己的机器名    - job_name: blackbox      scrape_interval: 5s      metrics_path: /probe      params:          module: [tcping]      file_sd_configs:          - files:                - /usr/local/bin/vmagent/endpoint.yml      relabel_configs:          - source_labels: [__address__]            target_label: __param_target          - target_label: __address__            replacement: localhost:9115    - job_name: blackbox_icmp      scrape_interval: 5s      metrics_path: /probe      params:          module: [icmp]      file_sd_configs:          - files:                - /usr/local/bin/vmagent/icmp.yml      relabel_configs:          - source_labels: [__address__]            target_label: __param_target          - target_label: __address__            replacement: localhost:9115

/usr/local/bin/vmagent/endpoint.yml

- targets:    - 'sh-ct-v4.ip.zstaticcdn.com:80'  labels:    name: '上海电信'    code: 'SH'    city: 'Shanghai'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'sh-cu-v4.ip.zstaticcdn.com:80'  labels:    name: '上海联通'    code: 'SH'    city: 'Shanghai'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'sh-cm-v4.ip.zstaticcdn.com:80'  labels:    name: '上海移动'    code: 'SH'    city: 'Shanghai'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'bj-ct-v4.ip.zstaticcdn.com:80'  labels:    name: '北京电信'    code: 'BJ'    city: 'Beijing'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'bj-cu-v4.ip.zstaticcdn.com:80'  labels:    name: '北京联通'    code: 'BJ'    city: 'Beijing'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'bj-cm-v4.ip.zstaticcdn.com:80'  labels:    name: '北京移动'    code: 'BJ'    city: 'Beijing'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'gd-ct-v4.ip.zstaticcdn.com:80'  labels:    name: '广东电信'    code: 'GD'    city: 'Guangdong'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'gd-cu-v4.ip.zstaticcdn.com:80'  labels:    name: '广东联通'    code: 'GD'    city: 'Guangdong'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - 'gd-cm-v4.ip.zstaticcdn.com:80'  labels:    name: '广东移动'    code: 'GD'    city: 'Guangdong'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名

/usr/local/bin/vmagent/icmp.yml

- targets:    - '202.96.209.133'  labels:    name: '上海电信'    code: 'SH'    city: 'Shanghai'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '210.22.97.1'  labels:    name: '上海联通'    code: 'SH'    city: 'Shanghai'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '221.183.90.237'  labels:    name: '上海移动'    code: 'SH'    city: 'Shanghai'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '49.7.37.74'  labels:    name: '北京电信'    code: 'BJ'    city: 'Beijing'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '111.206.209.44'  labels:    name: '北京联通'    code: 'BJ'    city: 'Beijing'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '112.34.111.194'  labels:    name: '北京移动'    code: 'BJ'    city: 'Beijing'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '183.36.23.111'  labels:    name: '广东电信'    code: 'GD'    city: 'Guangdong'    isp: 'China Telecom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '112.90.211.100'  labels:    name: '广东联通'    code: 'GD'    city: 'Guangdong'    isp: 'China Unicom'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名- targets:    - '183.240.65.191'  labels:    name: '广东移动'    code: 'GD'    city: 'Guangdong'    isp: 'China Mobile'    ip: 'IPv4'    domestic: 'true'    instance: 'Netcup.1o' # 改成自己的机器名

这些是icmp和tcp的部分

流媒体解锁部分

这边使用的方法是通过定期跑脚本来实现
然后把得出的流媒体结果在通过一个脚本转化成victoriametrics能看得懂的格式

在/usr/local/bin/目录下创建一个metrics.sh

#!/bin/bashTEXTFILE_COLLECTOR_DIR="/var/lib/node_exporter/textfile_collector"mkdir -p "$TEXTFILE_COLLECTOR_DIR"TMP_METRICS_FILE="${TEXTFILE_COLLECTOR_DIR}/streaming_unlock.prom.$$"METRICS_FILE="${TEXTFILE_COLLECTOR_DIR}/streaming_unlock.prom"check_output=$(bash <(curl -sL https://raw.githubusercontent.com/uki0xc/ukix/main/streaming.sh))echo '# HELP streaming_unlock_status Service unlock status (1 = Unlocked, 0 = Locked)' > "$TMP_METRICS_FILE"echo '# TYPE streaming_unlock_status gauge' >> "$TMP_METRICS_FILE"services=(    "Disney+"    "Netflix"    "YouTube Premium"    "Amazon Prime Video"    "ChatGPT"    "Claude")for service in "${services[@]}"; do    status=0          if echo "$check_output" | grep -F "${service}:" | grep -q "Yes"; then        status=1    fi        service_label=$(echo "$service" | tr -d ' +:')    echo "streaming_unlock_status{service=\"${service_label}\"} ${status}" >> "$TMP_METRICS_FILE"donemv "$TMP_METRICS_FILE" "$METRICS_FILE"echo "Streaming unlock metrics generated. Please verify."

然后去给它赋予权限

chmod +x /usr/local/bin/metrics.sh

接下来还要去修改一下node_exporter的启动方式

nano /etc/systemd/system/node_exporter.service
[Unit]Description=node_exporterAfter=network.target[Service]Type=simpleExecStart=/usr/local/bin/node/node_exporter --web.listen-address=127.0.0.1:9100 --collector.textfile --collector.textfile.directory="/var/lib/node_exporter/textfile_collector"  --collector.cpu.info[Install]WantedBy=multi-user.target

先去运行一下脚本

/usr/local/bin/metrics.sh

之后去重启node_exporter

systemctl daemon-reload
systemctl restart node_exporter

有问题的话检查一下日志

systemctl status node_exporter

设置定时任务

crontab -e

再起一行输入

* * 1 * * /usr/local/bin/metrics.sh > /dev/null 2>&1

这样所有的设置部分全都结束了
最后得到这样一个探针

结语

有的人可能会问这个探针可能有点重了
答:面板鸡使用的是Netcup.1o grafana+victoriametrics加起来一共300MB agent一共使用60~70MB 我甚至还放了一个pagermaid 也是绰绰有余 如果担心可以加一点swap

相比起nezha来说 这个探针权限没那么大 可玩性很强 还有很多东西可以发掘

别问为什么这么麻烦 就是为了折腾!!

这个配置也兼容了一些佬的面板
参考
1.[增加中文版]🔹 Node Information - 更美观的 Grafana 性能监控面板 (Prometheus + Node Exporter) & Grafana 安装教程
Bene

2.BBxPING Gen2 面板 - 在黑盒中拾星光 / 各版块介绍及使用指引