golang轻量级可远程配置的监控服务插件dish的使用
Golang轻量级可远程配置的监控服务插件dish的使用
特性
- 轻量级:一次性监控服务
- 远程配置:支持本地或远程配置
- 快速:并发测试,总体执行时间短
- 零依赖:无外部依赖
使用场景
- HTTP、ICMP端点以及TCP套接字的轻量级健康检查
- 在不同主机上部署独立dish实例的分布式监控,从公共API拉取配置
- 无需长期运行代理的定时一次性检查
安装方式
使用go install
go install go.vxn.dev/dish/cmd/dish@latest
使用Homebrew
brew install dish
手动下载
从发布页面下载适合您操作系统和架构的二进制文件。
使用方法
基本命令格式:
dish [FLAGS] SOURCE
配置源
检查的端点列表可以通过两种方式提供:
-
本地JSON文件
- 例如仓库中包含的
./configs/demo_sockets.json
示例文件
- 例如仓库中包含的
-
远程RESTful JSON API端点
- 从该端点获取的套接字列表可以本地缓存
# 本地JSON文件
dish /opt/dish/sockets.json
# 远程JSON API源
dish http://restapi.example.com/dish/sockets/:instance
协议指定
dish会根据配置JSON确定使用哪种协议检查提供的端点:
- 如果
host_name
字段以"http://"或"https://"开头,使用HTTP - 如果
port_tcp
字段在1到65535之间,使用TCP - 如果
host_name
不为空,使用ICMP - 以上条件均不满足,检查失败
注意:ICMP目前在Windows上不支持。
标志选项
dish -h
Usage of dish:
-cache
是否缓存从远程API源获取的套接字列表
-cacheDir string
缓存从远程API源获取的套接字列表的目录 (默认 ".cache")
-cacheTTL uint
缓存套接字列表的有效时间(分钟) (默认 10)
-discordBotToken string
Discord bot token
-discordChannelId string
Discord频道ID
-hname string
自定义附加头名称(主要用于认证)
-hvalue string
自定义附加头值(主要用于认证)
-machineNotifySuccess
是否向机器通道报告无失败的成功检查
-name string
dish实例名称 (默认 "generic-dish")
-target string
结果更新路径/URL到pushgateway,纯文本/字节输出
-telegramBotToken string
Telegram bot私钥
-telegramChatID string
Telegram聊天/频道ID
-textNotifySuccess
是否向文本通道报告无失败的成功检查
-timeout uint
http和tcp调用的超时时间(秒) (默认 10)
-updateURL string
推送结果的API端点URL
-verbose
控制台日志输出开关,除非NO_COLOR=true环境变量禁用,否则输出为彩色
-webhookURL string
webhook端点URL
退出代码
退出代码 | 含义 |
---|---|
0 | 所有检查成功通过 |
1 | 未提供套接字源 |
2 | 命令行参数解析失败 |
3 | 套接字测试运行失败 |
4 | 无法访问一个或多个套接字 |
告警机制
当套接字测试失败时,dish提供5种不同的告警方式(可以组合使用):
- 测试结果上传到远程JSON API(使用
-updateURL
标志) - 检查结果作为Telegram消息体(通过
-telegramBotToken
和-telegramChatID
标志) - 失败计数和最后测试时间戳更新到Prometheus的Pushgateway(使用
-target
标志) - 测试结果推送到webhook URL(使用
-webhookURL
标志) - 检查结果作为Discord消息(通过
-discordBotToken
和-discordChannelId
标志)
示例代码
基本使用示例
# 获取并安装特定版本
go install go.vxn.dev/dish/cmd/dish@latest
export PATH=$PATH:~/go/bin
# 从sockets.json文件加载套接字,并使用Telegram进行告警
dish -telegramChatID "-123456789" \
-telegramBotToken "123:AAAbcD_ef" \
sockets.json
# 使用远程JSON API服务作为套接字源,并将结果推送到Pushgateway
dish -target https://pushgw.example.com/ \
https://api.example.com/dish/sockets
Docker使用示例
# 复制和/或编辑环境文件(可选)
cp .env.example .env
vi .env
# 构建Docker镜像
make build
# 使用docker compose运行
make run
# 使用原生docker run运行
docker run --rm \
dish:1.12.0-go1.24 \
-verbose \
-target https://pushgateway.example.com \
https://api.example.com
Bash脚本和Cronjob示例
创建bash脚本tiny-dish-run.sh
:
#!/bin/bash
TELEGRAM_TOKEN="123:AAAbcD_ef"
TELEGRAM_CHATID="-123456789"
SOURCE_URL=https://api.example.com/dish/sockets
UPDATE_URL=https://api.example.com/dish/sockets/results
TARGET_URL=https://pushgw.example.com
DISH_TAG=dish:1.12.0-go1.24
INSTANCE_NAME=tiny-dish
API_TOKEN=AbCd
docker run --rm \
${DISH_TAG} \
-name ${INSTANCE_NAME} \
-hvalue ${API_TOKEN} \
-hname X-Auth-Token \
-target ${TARGET_URL} \
-updateURL ${UPDATE_URL} \
-telegramBotToken ${TELEGRAM_TOKEN} \
-telegramChatID ${TELEGRAM_CHATID} \
-timeout 15 \
-verbose \
${SOURCE_URL}
设置为可执行:
chmod +x tiny-dish-run.sh
创建Cronjob定期运行:
crontab -e
添加以下内容:
# m h dom mon dow command
MAILTO=monitoring@example.com
*/2 * * * * /home/user/tiny-dish-run.sh
集成示例
有关使用dish与远程API集成的示例,可以参考示例状态页面。
贡献
dish是一个相对小规模的项目,无论您是初学者还是有经验的开发者,都会觉得它很有趣。我们欢迎初学者参与,如果您愿意花时间了解代码库和Go语言,我们很乐意提供反馈和指导。
更多关于golang轻量级可远程配置的监控服务插件dish的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复