首页 > 其他分享 >Go实现Zabbix企业微信机器人告警

Go实现Zabbix企业微信机器人告警

时间:2023-11-12 18:12:18浏览次数:42  
标签:args string err url 微信 req json Zabbix Go

企业微信
应用通知的程序相对复杂点,见上篇文章
机器人告警相对简单点,只需一个url即可
企业微信里创建一个机器人
注意机器人的url,后续程序中需要使用
直接上程序sjgzbx_machine.go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "path/filepath"

    "gopkg.in/ini.v1"
)

type MACHINEMESSAGES struct {
    Msgtype string `json:"msgtype"`
    Text    struct {
        Content string `json:"content"`
    } `json:"text"`
}

func main() {
    args := os.Args
    if len(args) != 3 {
        panic("args len is error")
    }
    ex, err := os.Executable()
    exPath := filepath.Dir(ex)
    cfg, err := ini.Load(exPath + "/machine.ini")
    if err != nil {
        fmt.Println(err)
    }
    machineurl := cfg.Section("").Key("machineurl").String()
    send_url := machineurl
    client := &http.Client{}
    msg := MACHINEMESSAGES{
        Msgtype: "text",
        Text: struct {
            Content string `json:"content"`
        }{Content: args[2]},
    }
    sed_msg, _ := json.Marshal(msg)
    req, _ := http.NewRequest("POST", send_url, bytes.NewBuffer([]byte(sed_msg)))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("charset", "UTF-8")
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Printf("\n%q", string(body))

}

配置文件与二进程文件放一个目录machine.ini

machineurl=xxx

程序说明
接收两个参数,第一个参数作废,发的信息就是第二个参数

zabbix媒介两个参数

{ALERT.SENDTO}
{ALERT.SUBJECT} 或者 {ALERT.SUBJECT} {ALERT.MESSAGE}

视频操作
https://www.bilibili.com/video/BV1dC4y177kS/

标签:args,string,err,url,微信,req,json,Zabbix,Go
From: https://www.cnblogs.com/sjgops/p/17827136.html

相关文章

  • go test个人经验(持续更新)
    名称规范算不上规范。是我使用Goland生成testfunc的时候的自动命令规则,所以记录一下。为某个函数编写测试方法:funcFoo()errorfuncTestFoo(t*testing.T){}为某个struct的方法测试:typeClientstruct{}func(c*Client)Foo()errorfuncTestClient_Foo(t*t......
  • 微信小程序canvas 设置旋转css 不生效
    问题项目中有使用canvas生成条码(一维码)的功能,使用的插件wxbarcode来生成的,但是项目需求的条码是要竖向的,插件的生成的是横向的,不知道是否有参数去控制,当时图省事想着直接用css旋转一下好了,在模拟器上看到的确实也没有问题,但是在真机上就出问题,没有旋转,还发生了偏移解决开始一......
  • 【11.0】Go语言基础之结构体
    【一】什么是结构体结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。例如,一个职员有firstName、lastName和age三个属性,而把这些属性组合在一个结构体employee中就很合理。【二】......
  • go中标记一个模块内容为过时
    今天在使用标准库ioutil时发现已经过时,是通过在注释上添加实现的。例如://WsHandlerFuncislikeHandleFuncinGin.////Deprecated:Notsupport.typeWsHandlerFuncfunc(*websocket.Conn)在goland中调用时就会提示已废弃。......
  • golang http rpc
    server端:packagemainimport( "errors" "log" "net" "net/http" "net/rpc")typeArgsstruct{ A,Bint}typeQuotientstruct{ Quo,Remint}//定义typetypeArithintfunc(t*Arith)Multiply......
  • 微信登录流程
     步骤分析:小程序端,调用wx.login()获取code,就是授权码。小程序端,调用wx.request()发送请求并携带code,请求开发者服务器(自己编写的后端服务)。开发者服务端,通过HttpClient向微信接口服务发送请求,并携带appId+appsecret+code三个参数。开发者服务端,接收微信接口服务......
  • 【9.0】Go语言基础之字符串
    【一】字符编码引入https://www.cnblogs.com/dream-ze/p/17826956.html【二】字符串操作【1】获取字符串的字节(byte)(1)英文字符packagemainimport"fmt"funcmain(){ //字符串 //【1】单独获取每个字符串的字节byte //定义字符串 word:="Helloworld!" fo......
  • 【10.0】Go语言基础之指针
    【一】什么是指针指针是—种存储变量内存地址(MemoryAddress)的变量。如上图所示,变量b的值为156,而b的内存地址为0x1040a124。变量α存储了b的地址。我们就称a指向了b。【二】指针的定义【1】指针的语法基础1类型前放*表示指针类型,这个类型的指针,指向......
  • Go语言爬虫框架colly简析
    一、简介随着互联网的快速发展,数据已经成为了一种非常重要的资源,各类用户都需要通过爬虫来获取所需的数据。在众多的编程语言中,Go语言以其高效、简洁、并发等特性,成为越来越优选的编程语言,并且在爬虫领域也有着广泛应用。在爬虫框架领域,各流行编程语言都有自己热门框架,如Python中的......
  • 【实用小教程】如何批量导出、备份微信通讯录好友
    6-11对于有微信通讯录备份需求的人来说,要把微信的通讯录联系人的微信号、备注的手机号等信息弄出来,有不少困难,因为微信本身不提供这样的功能,所以如果要一个个抄,是不太现实的。本教程要解决的问题就是微信通讯录备份的问题,速度贼快,原理就是通过分析微信存储在本地的文件,直接从文件里......