栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Go简易小监控+推送钉钉

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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:/
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请求地址: %sn", v.ServerName, v.Url)
			pushDingToken(cf.DingToken, message)

		}
	}
}

测试结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号