51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1519|回复: 2
打印 上一主题 下一主题

[selenium] 使用Selenium抓取zabbix性能监控图

[复制链接]
  • TA的每日心情
    擦汗
    13 小时前
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-1-5 13:55:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     概要
      老样子先来个概要,因为公司一直都子使用企业微信,前两天刚刚将所有zabbix的告警信息接到微信上,总感觉还差那么一点,就想着就高等级的告警加上一个性能监控图,这样只看告警信息大概就清楚问题了,不用在登录到zabbix再去查找信息,就因为这个想法让我掉坑里呆了一整天,蓦然回首还是自己太菜啊,下面先贴出来使用Python登录zabbix并且获取到对应告警项监控图的代码,之后完整代码会贴到github中,链接放到简书上~
      实现抓取
      以下几点基础:
      1、告警信息的发送message里,可以发送zabbix的宏变量Item ID信息。
      2、根据Item ID,可以直接使用特殊URL携带Item ID信息获取对应监控截图。
      以下为获取截图完整代码:
    1. #!/usr/bin/env python
    2.   # -*- coding:utf-8 -*-
    3.   # name image.py
    4.   from selenium import webdriver
    5.   import os
    6.   import sys
    7.   reload(sys)
    8.   sys.setdefaultencoding('utf-8')
    9.   def get_item_graph(itemid,flag,eventid):
    10.       temp_name = "/tmp/"+eventid+".png"
    11.           #save_screenshot仅能保存png格式图片,所以文件名定义需要以png结尾
    12.       driver = webdriver.PhantomJS("/usr/local/zabbix-agent-ops/phantomjs-2.1.1/bin/phantomjs",service_log_path=os.path.devnull)
    13.           #使用PhantomJS可以模拟浏览器进行访问
    14.       driver.get("http://127.0.0.1/zabbix/")
    15.       driver.set_window_size(640,480)
    16.       driver.find_element_by_id("name").send_keys("armo")
    17.       driver.find_element_by_id("password").send_keys("123456")
    18.       driver.find_element_by_id("enter").click()
    19.           #模拟访问url,在对应的元素element处输入用户名密码后click登陆
    20.       if flag:
    21.           driver.get("http://127.0.0.1/zabbix/history.php?action=showgraph&fullscreen=1&itemids[]="+itemid)
    22.       else:
    23.           driver.get("http://127.0.0.1/zabbix/history.php?action=showvalues&fullscreen=1&itemids[]="+itemid)
    24.           #flag如果是1,则对应Item有对应的graph获取;如果是0,则获取最新一段时间的值
    25.           driver.save_screenshot(temp_name)
    26.           #将网页内容保存为png图片
    27.       driver.close()
    28.       driver.quit()
    29.   if __name__ == "__main__":
    30.       if len(sys.argv) > 1:
    31.           itemid = sys.argv[1]           #脚本传递的第一个参数 Item ID
    32.           flag = sys.argv[2]             #脚本传递的第二个参数 Flag,从zabbix数据库item和graph的对应表查询item是否具有对应的graph,如果有则传递1到脚本,无传递0
    33.           eventid = sys.argv[3]          #脚本传递的第三个参数 告警信息的Event ID,用来命名png图片
    34.       get_item_graph(itemid,flag,eventid)
    35.           #以上三个参数为前置调用脚本分析zabbix的发送信息后得到,之后会更新在后续文章中
    复制代码
    遇到的问题
      1、第一个session和cookies的保存问题,如果登录之后不携带cookies是无法访问对应监控页面的,刚开始选择requests模块,感觉相对较难,对于刚入门的我来说还是selenium比较合适,不用考虑session和cookies的问题。
      2、脚本在测试环境运行非常好,截图信息也很准确,但是到线上服务器就出了问题。

    很明显线上环境返回的图,前面一段居然是乱码。检查了所有环境,最后才发现问题出在线上服务器没有安装和zabbix适配的字体问题上,很是无奈啊,居然还要考虑字体的问题,阿里云的服务器也是真够能偷懒的。




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2022-4-8 11:52:10 | 只看该作者
    阿里云的服务器也是真够能偷懒的。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 22:43 , Processed in 0.062153 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表