Go简易小监控+推送钉钉

1. 简介

注! 我只是自己写的玩 现在监控全面很多 没必要重复造轮子

其实此方法测试成功 但未曾实践 只是表明思路 有代码有图

思路就是 服务暴露一些健康监测的东西 我这里就是简易的hello world 

如果真要自己写一个强大的监控 个人感觉以下几步必不可少

1. 日志的处理可以做的很细很明了

2. 服务挂了重启后要做些什么

3. 监控的url  不希望开接口等等

4. 前端 

5. 消息推送 错误日志的 打电话还是短信推钉钉都可以

可以自己配置重启的在yaml中  自建的或者 docker 部署都可以 不过建议还是用docker自己的监控重启 有条件还是k8s吧 

go 去请求然后 拿到结果判断 我这里是用的简易的状态码

2. config

分为一个conf文件 一个main

Cfg.yaml文件

DingToken: 38639587dd2da3eccc800a8a73bffbbec5be586394dd4e8********
Server:
  - serverName: service-**
    url: 'https://*****'
  - serverName: service-**
    url: '*******'

3. 推送钉钉方法

        1. 包名

                github.com/wanghuiyt/ding

         2. 运用方法

        

import (
	"fmt"
	"github.com/wanghuiyt/ding"
	"gopkg.in/yaml.v2"
	"io"
	"io/ioutil"
	"net/http"
	"os"
)


func pushDingToken(dingToken string, message string) {
	// 发送钉钉消息
	ZjdUlr := dingToken
	d := ding.Webhook{AccessToken: ZjdUlr}
	_ = d.SendMessage(message)

}

4. 整体main文件代码

/**
* @Time    : 2022/5/18 10:19
* @Author  : lee
* @Email   :
* @File    : main.go
 */
package main

import (
	"fmt"
	"github.com/wanghuiyt/ding"
	"gopkg.in/yaml.v2"
	"io"
	"io/ioutil"
	"net/http"
	"os"
)

type Cfg struct {
	DingToken string `yaml:"DingToken"`
	Server    []Item `yaml:"Server"`
}

type Item struct {
	ServerName string `yaml:"serverName"`
	Url        string `yaml:"url"`
}

func pushDingToken(dingToken string, message string) {
	// 发送钉钉消息
	ZjdUlr := dingToken
	d := ding.Webhook{AccessToken: ZjdUlr}
	_ = d.SendMessage(message)

}

func sendHttp(serverUrl string) (int, error) {
	// url 检测方法
	response, err := http.Get(serverUrl)

	if err != nil {
		fmt.Println(err)
		return 500, err
	}
	if response.StatusCode == 200 {
		defer func(Body io.ReadCloser) {
			err := Body.Close()
			if err != nil {
				fmt.Println(err)
			}
		}(response.Body)
	}
	return response.StatusCode, err
}

func readYaml() (cfg Cfg) {

	var cf Cfg //定义一个结构体变量

	//读取yaml文件到缓存中
	config, err := ioutil.ReadFile("Cfg.yaml")
	if err != nil {
		fmt.Print(err)
	}

	//yaml文件内容影射到结构体中
	err1 := yaml.Unmarshal(config, &cf)
	if err1 != nil {
		fmt.Println("error")
	}

	//通过访问结构体成员获取yaml文件中对应的key-value
	return cf

}

func main() {
	str, _ := os.Getwd()
	fmt.Println(str)
	cf := readYaml()

	for _, v := range cf.Server {
		statusCode, _ := sendHttp(v.Url)
		if statusCode != 200 {
			var message string
			message = message + fmt.Sprintf("测试\n服务: %s异常\n请求地址: %s\n", v.ServerName, v.Url)
			pushDingToken(cf.DingToken, message)

		}
	}
}

测试结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值