上篇文章网络延迟监控-smokeping讲到smokeping这款网络延迟监控工具,开源且配置简单,适合用来监控各个节点到master的网络情况;但如果想监控各个节点之间的网络情况,有另外一款开源的工具可用smartping,这款工具即适合单点部署,也能分布式,适合监控整个网络集群的情况。
安装
smartping安装非常简单,官方提供二进制程序,直接运行即可,https://docs.smartping.org/install/。也可以通过源码编译安装,依赖本地安装go环境。启动之后,直接访问即可,http://127.0.0.1:8899. 默认密码:smartping


分布式部署
如果要监控多个节点之间的网络情况,就需要在每个节点上都安装smartping,这样每个节点都可以主动发起ping请求,来监测自身与其他节点的网络质量。若每个节点都要配置,那就非常麻烦了;这时候,可以留一个节点作为本地模式,其他节点都配置成云模式,其实就是master、slave模式,slave节点会自动从master节点同步配置,省去了繁琐的配置过程。
云配置地址:http://XX.XX.XX.XX:8899/api/config.json,也就是master的配置地址,密码默认为:smartping
解决邮件报警问题
smartping支持邮件发送报警的功能,但在配置邮箱信息时,发现原作者只支持了25端口,一般公司邮箱的smtp服务器都是加密的,如465、587端口等。本工具是开源的,直接修改下源码,再编译安装即可完成。
- 源码地址:https://github.com/smartping/smartping
- 本地安装go环境。
-
发送邮件的代码在
src/funcs/alert.go中,作者源码如下:func SendMail(user, pwd, host, to, subject, body string) error { if len(strings.Split(host, ":")) == 1 { host = host + ":25" } auth := smtp.PlainAuth("", user, pwd, strings.Split(host, ":")[0]) content_type := "Content-Type: text/html" + "; charset=UTF-8" msg := []byte("To: " + to + "\r\nFrom: " + user + "\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body) send_to := strings.Split(to, ";") err := smtp.SendMail(host, auth, user, send_to, msg) if err != nil { return err } return nil }可以看到源码中首先判断是否含有冒号,如果就把端口设置为25,并且使用PlainAuth的方式进行登录,在这里加上对其他端口的兼容即可。修改如下:
func SendMail(user, pwd, host, to, subject, body string) error { if !strings.Contains(host, ":") { host += ":25" // 默认使用25端口 } parts := strings.Split(host, ":") server := parts[0] port := parts[1] recipients := strings.Split(to, ";") msg := fmt.Sprintf("To: %s\r\nFrom: %s\r\nSubject: %s\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n%s", to, user, subject, body) if port == "465" { // 使用 TLS 方式连接 conn, err := tls.Dial("tcp", host, &tls.Config{ InsecureSkipVerify: true, ServerName: server, }) if err != nil { return fmt.Errorf("TLS dial error: %v", err) } client, err := smtp.NewClient(conn, server) if err != nil { return fmt.Errorf("SMTP client error: %v", err) } auth := smtp.PlainAuth("", user, pwd, server) if err = client.Auth(auth); err != nil { return fmt.Errorf("auth error: %v", err) } if err = client.Mail(user); err != nil { return err } for _, addr := range recipients { if err = client.Rcpt(strings.TrimSpace(addr)); err != nil { return err } } w, err := client.Data() if err != nil { return err } _, err = w.Write([]byte(msg)) if err != nil { return err } w.Close() return client.Quit() } else { // 使用普通方式发送 auth := smtp.PlainAuth("", user, pwd, server) return smtp.SendMail(host, auth, user, recipients, []byte(msg)) }修改之后,重新编译,替换原来的二进制程序即可。
上面代理依赖tls包,需要在alert.go中引入依赖:import ( "bytes" "encoding/json" "fmt" "github.com/cihub/seelog" _ "github.com/mattn/go-sqlite3" "github.com/smartping/smartping/src/g" "github.com/smartping/smartping/src/nettools" "net/smtp" "strconv" "strings" "time" "crypto/tls" //这是新增 )
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=1651

近期评论