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"

注意事项

  1. 通知默认是边缘触发模式,如果需要配置为电平触发模式,可以设置不同的间隔和最大通知次数
  2. Windows平台不支持syslog作为通知方法

EaseProbe采用Apache 2.0许可证,更多详细信息请参考官方文档。


更多关于golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang轻量级健康状态检测与多协议通知插件库EaseProbe的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


EaseProbe: Golang轻量级健康状态检测与多协议通知插件库

EaseProbe是一个用Go语言编写的轻量级健康状态检测工具,支持多协议通知功能。下面我将详细介绍它的使用方法和示例代码。

主要特性

  1. 多协议支持:HTTP/HTTPS/TCP/SSH/Shell命令等多种检测方式
  2. 多通知渠道:支持Slack/Telegram/Email/Discord/Webhook等多种通知方式
  3. 轻量级:资源占用低,适合容器化部署
  4. 配置简单: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 := &notify.Slack{
		WebhookURL: "https://hooks.slack.com/services/...",
		Channel:    "#alerts",
	}
	
	email := &notify.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()
}

最佳实践

  1. 合理设置检测间隔:根据服务重要性设置不同的检测频率
  2. 分级通知:对关键服务和非关键服务使用不同的通知渠道
  3. 设置阈值:对资源使用类检测设置合理的告警阈值
  4. 日志记录:保留检测日志用于故障排查
  5. 容器化部署:使用Docker或Kubernetes部署,方便扩展和管理

EaseProbe是一个功能强大但使用简单的工具,特别适合需要轻量级监控解决方案的场景。通过灵活的配置和扩展能力,可以满足大多数健康检测和告警需求。

回到顶部