首页 > 其他分享 >Go每日一库之137:easeprobe(探活工具)

Go每日一库之137:easeprobe(探活工具)

时间:2023-09-29 21:12:22浏览次数:37  
标签:03 00 08 一库 137 easeprobe 2022 com

服务探活在现实场景中应用广泛,比如:服务发现、服务负载均衡、服务调度、服务状态监控等。然而,“探活”往往是作为一个功能模块或者组件集成在各个平台系统中。本次要介绍的easeprobe是一款轻量级的,可独立运行的探活工具,利用easeprobe,无需其他系统支持,就可以对多种类型的服务/中间件等探活。

功能介绍

easeprobe 除基础的探活功能外,还支持消息通知和定时发送SLA报表。

探活目前支持以下类型:

  • HTTP: 检查http状态码,并支持mTLS,HTTP基本身份认证,以及添加请求header/body
  • TCP: 检查是否可以建立连接
  • Shell:运行shell命令,并检查返回结果
  • Client:支持Mysql、Redis、MongoDB、Kafka、PostgreSQL、Zookeeper等客户端

通知支持以下类型:

  • 邮件:发送邮件通知
  • Slack:Slack webhook通知
  • Discord:Discord webhook通知
  • Telegram:Telegram 机器人通知
  • Log file:记录到日志文件

通知触发方式是“边缘触发”,即只有服务状态发生变化时才会触发通知。

SLA报表支持每日/周/月定时发送

使用指南

Go版本要求1.17+

安装

$ git clone [email protected]:megaease/easeprobe.git
$ make

配置

使用easeprobe需要配置yaml格式的配置文件,这里是一个简单的配置实例:

# probe设置
http:
  - name: MegaEase Website
    url: http://megaease.com
# 通知设置
notify:
  email:
    - name: Mail List
      server: smtp.email.example.com:465
      username: [email protected]
      password: ********
      to: "[email protected];[email protected]"
# 全局设置
settings:
  sla:
    schedule: "daily"
    time: "23:59"
  notify:
    retry: # 重试
      times: 5
      interval: 10s
  probe:
    timeout: 30s # 探测超时设置
    interval: 1m # 探测时间间隔1分钟

更详细的配置可以到github主页查看。

运行

$ build/bin/easeprobe -f config.yaml

INFO[2022-03-30T18:04:06+08:00] Using Standard Output as the log output...
INFO[2022-03-30T18:04:06+08:00] Load the configuration file successfully!
INFO[2022-03-30T18:04:06+08:00] Ready to monitor(http): MegaEase Website - http://megaease.com
INFO[2022-03-30T18:04:06+08:00] [email] configuration: &{Name:Mail List Server:smtp.email.example.com:465 User:[email protected] Pass:aaaa To:[email protected];[email protected] Dry:false Timeout:30s Retry:{Times:5 Interval:10s}}
INFO[2022-03-30T18:04:06+08:00] Successfully setup the notify channel: email
INFO[2022-03-30T18:04:06+08:00] Preparing to send the daily SLA report at 23:59 UTC time...
INFO[2022-03-30T18:04:06+08:00] Next Time to send the SLA Report - 2022-03-30 23:59:00 UTC
ERRO[2022-03-30T17:07:52+08:00] error making get request: Get "http://megaease.com": read tcp 10.111.10.17:54139->104.21.46.25:80: read: connection reset by peer
INFO[2022-03-30T17:07:52+08:00] MegaEase Website (Global) (http://megaease.com) - Status changed [up] ==> [down]
INFO[2022-03-30T17:08:56+08:00] MegaEase Website (Global) (http://megaease.com) - Status changed [down] ==> [up]

总结

easeProbe是一个基于Go的简单的探测工具,可以检查HTTP、TCP、Shell、Client等类型的服务状态,并可以发送通知和报表。如果有监控多种类型服务存活的需求,可以试试。

参考资料

标签:03,00,08,一库,137,easeprobe,2022,com
From: https://www.cnblogs.com/arena/p/17737346.html

相关文章

  • Go每日一库之136:gopherjs(将Go代码编译成JS)
    简介GopherJS可以将Go代码编译成纯JavaScript代码。其主要目的是为了让你可以使用Go来编写前端代码,这些代码可执行在浏览器上运行。你可以通过这里尝试下GopherJS:GopherJSPlayground.例如JavaScript代码:document.write("Hello world!");用GopherJS来写就变成这......
  • Go每日一库之135:Ent(Facebook 开源 Golang 实体框架)
    对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是......
  • Go每日一库之134:fsm(基有限状态机库)
    开发中,我们经常会遇到这种情况,服务模块有多种状态,它们有一定的顺序,先后执行,逐步切换。这时,fsm这个库可以帮助我们更好的管理多个状态。fsm库,它主要基于两个FSM实现,增加了golang版本的实现:JavascriptFiniteStateMachine,https://github.com/jakesgordon/javascript-state-ma......
  • Go每日一库之65:tunny
    简介之前写过一篇文章介绍了ants这个goroutine池实现。当时在网上查看相关资料的时候,发现了另外一个实现tunny。趁着时间相近,正好研究一番。也好比较一下这两个库。那就让我们开始吧。快速开始本文代码使用GoModules。创建目录并初始化:$mkdirtunny&&cdtunny$gomo......
  • Go每日一库之64:ants(源码赏析)
    简介继上一篇Go每日一库之ants,这篇文章我们来一起看看ants的源码。Pool通过上篇文章,我们知道ants池有两种创建方式:p,_:=ants.NewPool(cap):这种方式创建的池子对象需要调用p.Submit(task)提交任务,任务是一个无参数无返回值的函数;p,_:=ants.NewPoolWithFunc(cap,func......
  • Go每日一库之63:ants
    简介处理大量并发是Go语言的一大优势。语言内置了方便的并发语法,可以非常方便的创建很多个轻量级的goroutine并发处理任务。相比于创建多个线程,goroutine更轻量、资源占用更少、切换速度更快、无线程上下文切换开销更少。但是受限于资源总量,系统中能够创建的goroutine数量......
  • Go每日一库之55:quicktemplate
    简介最近在整理我们项目代码的时候,发现有很多活动的代码在结构和提供的功能上都非常相似。为了方便今后的开发,我花了一点时间编写了一个生成代码框架的工具,最大程度地降低重复劳动。代码本身并不复杂,且与项目代码关联性较大,这里就不展开介绍了。在这个过程中,我发现Go标准的模板......
  • Go每日一库之54:quicktemplate(增强模板库)
    简介最近在整理我们项目代码的时候,发现有很多活动的代码在结构和提供的功能上都非常相似。为了方便今后的开发,我花了一点时间编写了一个生成代码框架的工具,最大程度地降低重复劳动。代码本身并不复杂,且与项目代码关联性较大,这里就不展开介绍了。在这个过程中,我发现Go标准的模板......
  • Go每日一库之53:commonregex
    简介有时,我们会遇到一些需要使用字符串的匹配和查找的任务。并且我们知道这种情况下,使用正则表达式是最简洁和优雅的。为了完成某个任务特地去系统地学习正则表达式费时费力,而且一段时间不用又很容易遗忘。下次遇到问题还要再重复这个过程。commonregex库来了,它内置很多常用的正......
  • Go每日一库之52:commonregex
    简介有时,我们会遇到一些需要使用字符串的匹配和查找的任务。并且我们知道这种情况下,使用正则表达式是最简洁和优雅的。为了完成某个任务特地去系统地学习正则表达式费时费力,而且一段时间不用又很容易遗忘。下次遇到问题还要再重复这个过程。commonregex库来了,它内置很多常用的正......