2019独角兽企业重金招聘Python工程师标准>>>

#简述 本文将使用golang和第三方http client 库gorequest编写。如需要只使用golang 标准库可以参考我的另外一篇文章golang通过itemid获取zabbix graph监控图

#F&Q

  1. 为什么是golang? 网上很容易就能找到使用python下载zabbix graph监控图的脚本。但使用python存在两个问题:
  • 使用urllib等底层库,编程复杂,可读性差
  • 线上机器python版本低,安装脚本依赖或更新python版本很麻烦
  1. 为什么是gorequestgorequest对golang的http标准库,做了二次封装,使得读取request body、dto、超时控制等很方便,还额外添加了retry功能。

ps:存在的问题。在添加query时,使用map格式,zabbix无法登录。

code

package zabbiximport ("fmt""net/http""os""path/filepath""time""github.com/parnurzeal/gorequest"
)
var(HTTPRequestTimeOut = time.Duration(5) * time.SecondHTTPRequestRetryPeriod = time.Duration(5) * time.Second
)
//获取timestamp
func getTimeStr() string {timeDelta, _ := time.ParseDuration("-3h")stime := time.Now().Add(timeDelta)timeStr := stime.Format("20060102150405")return timeStr
}func generateErr(frefix string, errs []error) error {if errs == nil {return nil}temp := []string{frefix}for _, err := range errs {temp = append(temp, err.Error())}return fmt.Errorf(strings.Join(temp, ":"))
}type Client struct {reqAgent *gorequest.SuperAgentusername stringpassword stringurl      string
}func New(url, username, password string) *Client {reqAgent := gorequest.New().SetDoNotClearSuperAgent(true).Timeout(HTTPRequestTimeOut).Retry(3, HTTPRequestRetryPeriod, http.StatusBadRequest, http.StatusInternalServerError)return &Client{reqAgent: reqAgent,username: username,password: password,url:      url,}
}func (client *Client) indexUrl() string {return fmt.Sprintf("%s/index.php", client.url)
}func (client *Client) login() error {res, _, errs := client.reqAgent.Get(client.indexUrl()).Query("autologin=1&enter=Sign%20in").Query("name="+client.username).Query("password="+client.password).Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0").AppendHeader("Referer", client.indexUrl()).End()if errs != nil {return generateErr("", errs)}fmt.Println(res.Status)return nil
}func (client *Client) SaveImage(itemid, fileName string) (string, error) {if err := client.login(); err != nil {return "", fmt.Errorf("ZabbixClient:SaveImage:GetCookies:%v", err)}timeStr := getTimeStr()_, byteBody, errs := client.reqAgent.Get(client.url + "/chart.php").Query("period=7200&width=600").Query("time+" + timeStr).Query("itemids=" + itemid).EndBytes()if errs != nil {return "", generateErr("ZabbixClient:SaveImage:RequestImage", errs)}if fileName == "" {fileName = filepath.Join("tmp", timeStr+".jpg")} else {fileName = filepath.Join("tmp", fileName+".jpg")}out, err := os.Create(fileName)if err != nil {return fileName, fmt.Errorf("ZabbixClient:SaveImage:CreateImage:%v", err)}defer out.Close()_, err = out.Write(byteBody)if err != nil {return fileName, fmt.Errorf("ZabbixClient:SaveImage:SaveImage:%v", err)}return fileName, nil
}

test

package zabbiximport ("testing"
)func get_client() *Client {return New("http://127.0.0.1/zabbix", "Admin", "zabbix")
}func Test_downloadImage(t *testing.T) {client := get_client()_, err := client.SaveImage("69618", "")if err != nil {t.Fatal(err)}
}

zabbix_client.go

转载于:https://my.oschina.net/u/3703365/blog/2208858

golang通过itemid获取zabbix graph监控图相关推荐

  1. python 监视图_python获取zabbix监控图

    领导有个需求,希望每天邮件发出当天服务器的监控状态,开始是每天下午快下班的时候打开zabbix截图,每天都这样实在是累,于是写了一段脚本实现自动抓取图片,并组装成html,通过定时邮件发送,实现日报自 ...

  2. python 导出数据并发邮件_Python 获取zabbix数据图并发邮件

    Python 获取zabbix数据图并发邮件#! /usr/bin/env python # coding=utf-8 # Andy_f import time, os,datetime import ...

  3. 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题...

    之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符. 首先确定zabbix开启了中文支持功能: 登录到zabbix服务器的数据目录下(前面部署的zabb ...

  4. zabbix如何监控ip地址_获取zabbix上所有主机的IP和主机名的实例代码

    zabbix zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的 ...

  5. zabbix全网监控介绍

    zabbix全网监控 面试题:你公司监控什么? 利用OSI/IOS7层协议进行回答 应用层:监控协议http/https/ssh 如nginx mysql rsync tomcat(进程,URL地址. ...

  6. linux下构建Zabbix网络监控平台

    linux下构建Zabbix网络监控平台 由于图片过多,本人不想一张一张上传,请下载我的详细文章: linux下构建zabbix网络监控平台[技术文档](河南-清小小)-下载地址: http://do ...

  7. graph 关系图 设置

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. Zabbix分布式监控(zabbix-proxy)的配置关键点

    Zabbix Proxy简介 Zabbix Proxy是实现Zabbix分布式监控的重要组成部分,是连接Zabbix Agent和Zabbix Server的"中间人"." ...

  9. zabbix如何监控linux磁盘性能IO

    前提环境: perl和python,以及zabbix-agent已是可用状态 需要主要监控的指标: 1:每秒IO数,即iops或tps2:吞吐率3:平均IO尺寸,avgrq-sz4:IO等待队列长度, ...

最新文章

  1. Skype for Business Server 2015-09-测试-基本功能(建议:看PDF!)
  2. angularjs ng-click传参控制ng-repeat元素显示与隐藏
  3. 计算机打开就是桌面界面的讲解,电脑桌面图标打不开,小猪教您电脑桌面图标打不开怎么办...
  4. shell 命令/程序 CheatSheet
  5. python代替云打码的超级鹰验证码识别第三方工具使用分享
  6. 如何从菜鸟(零基础)开始快速学习3ds MAX,3ds MAX建模和渲染的工作流程介绍
  7. mac SCp上传文件到阿里云服务器centos
  8. HTML:网页设计案例4
  9. 无动力风帽自动排风扇屋顶风机通风器
  10. 富婆套路深,代码才是真...
  11. 应届毕业生(程序员)如何工作更顺利、步步高升
  12. ORACLE EBS常用标准表结构
  13. 怎么撤销定时说说_手机QQ空间怎么取消已设置的定时说说?
  14. b站up主是怎么赚钱,b站UP主有哪些赚钱方式,通过什么赚钱?
  15. 下一个马克·扎克伯格会是人工智能吗?
  16. 小米11发布会雷军大发感慨:程序员的心酸历程谁人能懂?
  17. 这个假期有这些游戏就不怕无聊了
  18. 腾讯净利润持续下滑,游戏业务印钞机为何失灵?
  19. UHPC文献阅读笔记
  20. HTML禁止复制粘贴以及禁止下载图片

热门文章

  1. 跨平台PHP调试器设计及使用方法——协议解析
  2. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题
  3. 一维码Code 93简介及其解码实现(zxing-cpp)
  4. GDAL库简介以及在Windows下编译过程
  5. 二维物体形状识别方法比较
  6. 【C++】C++命名空间重定向
  7. ios 比 android 精致,iOS小组件对比ColorOS 11个性化,网友:这太好选了
  8. docker 安装oracle_Windows系统下安装Docker,包你满意!
  9. Java学习总结:56(Stack子类)
  10. mysql被拖垮_说几个拖垮系统的小细节!