golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用
Golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用
EaseProbe是一个用Go编写的简单、独立且轻量级的工具,可以进行健康/状态检查。
功能概述
EaseProbe设计用于执行三种工作:探测(Probe)、通知(Notify)和报告(Report)。
1.1 探测功能
EaseProbe支持多种探测方法:
- HTTP:检查HTTP状态码,支持mTLS、HTTP基本认证、设置请求头/体,以及XPath响应评估
- TCP:检查是否可以建立TCP连接
- Ping:ping主机检查是否可达
- Shell:运行Shell命令并检查结果
- SSH:通过SSH运行远程命令并检查结果,支持堡垒机/跳板服务器
- TLS:使用TLS连接到给定端口并(可选)验证撤销或过期的证书
- Host:在远程主机上运行SSH命令并检查CPU、内存和磁盘使用情况
- Client:支持以下原生客户端(都支持mTLS和数据检查)
- MySQL、Redis、Memcache、MongoDB、Kafka、PostgreSQL、Zookeeper
1.2 通知功能
EaseProbe支持向以下平台发送通知:
- Slack、Discord、Telegram、Teams、Email、AWS SNS
- 企业微信、钉钉、飞书
- SMS(支持Twilio、Vonage/Nexmo、YunPian等提供商)
- 日志(写入日志文件或Syslog)
- Shell(运行shell命令发送通知)
- RingCentral
1.3 报告和指标
EaseProbe支持以下报告和指标:
- SLA报告通知:使用定义的
notify:
方法发送每日、每周或每月SLA报告 - SLA实时报告:默认监听
0.0.0.0:8181
端口,提供HTML或JSON格式的实时SLA报告 - SLA数据持久化:SLA数据默认持久化在
$CWD/data/data.yaml
中 - Prometheus指标:默认在
8181
端口提供Prometheus指标
快速开始
2.1 构建
需要Go 1.21+版本(支持泛型编程)。使用make
构建并生成easeprobe
二进制文件,可执行文件位于build/bin
目录下。
$ make
2.2 配置
创建一个配置文件(如$CWD/config.yaml
),以下是简单配置示例:
http: # http probes
- name: EaseProbe Github
url: https://github.com/megaease/easeprobe
notify:
log:
- name: log file # local log file
file: /var/log/easeprobe.log
settings:
probe:
timeout: 30s # the time out for all probes
interval: 1m # probe every minute for all probes
2.3 运行
构建完成后可以运行以下命令启动EaseProbe:
$ build/bin/easeprobe -f config.yaml
参数说明:
-f
:配置文件或URL或多个文件的路径,这些文件将自动合并为一个。也可以通过设置环境变量PROBE_CONFIG
实现-d
:干运行。也可以通过设置环境变量PROBE_DRY
实现
部署方式
EaseProbe可以通过Systemd、Docker、Docker-Compose和Kubernetes部署。
完整示例
以下是一个完整的配置示例,包含HTTP探测和Slack通知:
# HTTP探测配置
http:
- name: "GitHub Status"
url: "https://www.githubstatus.com/"
method: "GET"
timeout: 10s
interval: 1m
thresholds:
failure: 3
success: 2
notification:
up: "GitHub Status is UP!"
down: "GitHub Status is DOWN!"
# Slack通知配置
notify:
slack:
- name: "Slack Alert"
webhook: "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX"
channel: "#alerts"
dry: false
# 全局设置
settings:
probe:
interval: 1m
timeout: 30s
notify:
retry:
count: 3
interval: 10s
sla:
schedule: "daily" # daily, weekly, monthly
data: "/var/lib/easeprobe/data.yaml"
注意事项
- 通知默认是边缘触发模式,如果需要配置为电平触发模式,可以设置不同的间隔和最大通知次数
- Windows平台不支持syslog作为通知方法
EaseProbe采用Apache 2.0许可证,更多详细信息请参考官方文档。
更多关于golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
EaseProbe: Golang轻量级健康状态检测与多协议通知插件库
EaseProbe是一个用Go语言编写的轻量级健康状态检测工具,支持多协议通知功能。下面我将详细介绍它的使用方法和示例代码。
主要特性
- 多协议支持:HTTP/HTTPS/TCP/SSH/Shell命令等多种检测方式
- 多通知渠道:支持Slack/Telegram/Email/Discord/Webhook等多种通知方式
- 轻量级:资源占用低,适合容器化部署
- 配置简单:YAML格式配置文件,易于使用
安装方法
go get github.com/megaease/easeprobe
或者直接下载预编译二进制文件:
wget https://github.com/megaease/easeprobe/releases/latest/download/easeprobe
chmod +x easeprobe
基本使用示例
1. 简单HTTP检测
package main
import (
"github.com/megaease/easeprobe/probe"
"github.com/megaease/easeprobe/notify"
)
func main() {
// 创建一个HTTP探针
httpProbe := probe.HTTPProbe{
Name: "Example Website",
URL: "https://example.com",
Timeout: 5 * time.Second,
}
// 创建Slack通知
slackNotify := notify.Slack{
WebhookURL: "https://hooks.slack.com/services/...",
Channel: "#alerts",
}
// 配置EaseProbe
easeProbe := probe.NewEaseProbe()
easeProbe.AddProbe(&httpProbe)
easeProbe.AddNotifier(&slackNotify)
// 启动检测
easeProbe.Start()
}
2. 完整配置文件示例
更常见的用法是通过YAML配置文件:
# easeprobe.yaml
# 全局设置
settings:
name: "EaseProbe Demo"
interval: 1m
log:
file: "/var/log/easeprobe.log"
level: "info"
# 探针配置
probes:
- name: "Google HTTP"
type: "http"
url: "https://www.google.com"
timeout: 5s
- name: "MySQL Database"
type: "tcp"
host: "mysql.example.com:3306"
timeout: 3s
- name: "Disk Usage"
type: "shell"
command: "df -h"
args: []
timeout: 10s
threshold:
failure: 90
warning: 80
# 通知配置
notify:
- name: "Slack Alert"
type: "slack"
webhook: "https://hooks.slack.com/services/..."
channel: "#alerts"
dry: false
- name: "Email Notification"
type: "email"
server: "smtp.example.com:587"
username: "user@example.com"
password: "password"
to: "admin@example.com"
高级功能示例
1. 自定义检测逻辑
package main
import (
"time"
"github.com/megaease/easeprobe/probe"
)
type CustomProbe struct {
probe.DefaultProbe
CustomField string
}
func (p *CustomProbe) Config(g probe.ProbeConfig) error {
p.DefaultProbe.Config(g)
// 自定义初始化逻辑
return nil
}
func (p *CustomProbe) DoProbe() (bool, string) {
// 自定义检测逻辑
if p.CustomField == "expected" {
return true, "All good"
}
return false, "Custom condition not met"
}
func main() {
customProbe := &CustomProbe{
DefaultProbe: probe.DefaultProbe{
Name: "Custom Probe",
Timeout: 10 * time.Second,
},
CustomField: "expected",
}
easeProbe := probe.NewEaseProbe()
easeProbe.AddProbe(customProbe)
easeProbe.Start()
}
2. 多通知渠道组合
package main
import (
"github.com/megaease/easeprobe/probe"
"github.com/megaease/easeprobe/notify"
)
func main() {
// 创建多个通知渠道
slack := ¬ify.Slack{
WebhookURL: "https://hooks.slack.com/services/...",
Channel: "#alerts",
}
email := ¬ify.Email{
Server: "smtp.example.com:587",
Username: "user@example.com",
Password: "password",
To: "admin@example.com",
}
// 创建通知链
notifier := notify.NewChainNotifier()
notifier.AddNotifier(slack)
notifier.AddNotifier(email)
// 配置探针
httpProbe := &probe.HTTPProbe{
Name: "Example Service",
URL: "https://example.com",
Timeout: 5 * time.Second,
Notifier: notifier,
}
// 启动
easeProbe := probe.NewEaseProbe()
easeProbe.AddProbe(httpProbe)
easeProbe.Start()
}
最佳实践
- 合理设置检测间隔:根据服务重要性设置不同的检测频率
- 分级通知:对关键服务和非关键服务使用不同的通知渠道
- 设置阈值:对资源使用类检测设置合理的告警阈值
- 日志记录:保留检测日志用于故障排查
- 容器化部署:使用Docker或Kubernetes部署,方便扩展和管理
EaseProbe是一个功能强大但使用简单的工具,特别适合需要轻量级监控解决方案的场景。通过灵活的配置和扩展能力,可以满足大多数健康检测和告警需求。