Zabbix配置钉钉的带图片报的警

  

实现思路:

  

 Zabbix配置钉钉的带图片报警

  
      <李>首先报警信息里要有itemid,这是前提,根据信息里传入的参数使用正则匹配到itemid李   <李>构建一个会话会话,或者使用饼干来进行登录,根据itemid去请求图片,并将获取到的图片保存到本地,由于减价的图片链接需要被访问的到,我的zabbix是在内网中,所以需要将图片传到图床或者传到一个具有公网IP的web服务器,我这里传到了我的个人服务器李   <李>将报警信息转换成减价语法格式李   <李>构造请求利用钉钉的webhook发送消息李   
  

设置钉钉机器人

  

 Zabbix配置钉钉的带图片报警

  
      <李>钉钉机器人需要进行安全设置,这里我定义了关键词“通知”,也就是说发送的消息中必须包含这个词   
  

 Zabbix配置钉钉的带图片报警

  

脚本实现

  
      <李>由于需要将图片从本地拷到远端,免密需要提前配置好,脚本是用zabbix用户执行,Web服务器目录的安全策略最好设置一下李   
  
 <代码> # !/usr/bin/python
  # - * -编码:utf - 8 - *
  导入请求,时间
  进口json、sys再保险、操作系统
  
  zabbixserver_url=' http://192.168.99.200/index.php '
  #定义远端的web服务器地址,将图片复制到远端网络的目录下
  pname_path=' http://47.103.15.51/dingding_pic/'
  #定义获取的图片地址
  testUrl=" http://192.168.99.200/chart.php "
  主机=' 192.168.99.200 '
  def get_itemid ():
  itemid=再保险。搜索(r 'ITEM ID: (\ d +) ', sys.argv [2]) .group (1)
  返回itemid
  def get_picture (itemid pname):
  #构建会话,或者可以一次构建之后使用饼干登录
  myRequests=requests.Session ()
  试一试:
  loginHeaders={
  “主机”:主机,
  “接受”:“text/html、application/xhtml + xml应用程序/xml; q=0.9,图像/webp图像/apng */*; q=0.8 "
  }
  #构建登录所需的信息
  playLoad={
  “名称”:“Admin”,
  “密码”:“zabbix”,
  “autologin”:“1”,
  “输入”:“签到”,
  }
  myRequests。帖子(url=zabbixserver_url头=loginHeaders, data=https://www.yisu.com/zixun/playLoad)
  testUrlplayLoad={“从”:“now-10m”,
  “”:“现在”,
  “itemid”: itemid,
  “宽度”:“700”,
  }
  testGraph=myRequests.get (url=testUrl params=testUrlplayLoad)
  IMAGEPATH=os.path。加入(“/usr/lib/zabbix/alertscripts/dingding_pic/', pname)
  #将获取到的图片数据写入到文件中去
  张开(IMAGEPATH wb) f:
  f.write (testGraph.content)
  操作系统。系统(“sudo scp % s root@47.103.15.51:/usr/share/nginx/html/dingding_pic”% IMAGEPATH)
  pname_url=pname_path + pname
  返回pname_url
  除了例外e:
  打印(e)
  返回假
  
  #构造发送消息的请求
  def send_msg (pname_url info3):
  头={“内容类型”:“application/json; charset=utf - 8”}
  打印(info3)
  data=https://www.yisu.com/zixun/{“msgtype”:“减价”,
  “减价”:{
  “标题”:info1,
  “文本”:“# #通知:\ n”+ info3 +”!(截图)(% s) \ n”% (pname_url)
  
  },
  “在”:{
  “atMobiles”:提醒,
  “isAtAll”:假的,
  },
  }
  r=requests.post (url=webhook_url json=数据,标题=标题)
  打印(r.text)
  #对报警信息进行格式化
  def info_text ():
  new_text=" "
  x=info2.split (“\ n”)
  因为我在x:
  如果re.search(项ID, str(我)):
  通过
  其他:
  new_text +=?”+ str (i) + (“\ n”)
  print(类型(new_text))
  返回new_text
  
  if __name__==癬_main__”:
  #将报警信息写入日志
  操作系统。系统(“回声你好祝辞祝辞/tmp/syslog.md”)
  pname=str (int (time.time ())) + . png”
  info1=str (sys.argv [1])
  info2=str (sys.argv [2])
  info3=info_text ()
  
  张开(“/tmp/syslog.md”,“一个”)f:
  f.write (info1)
  f.write (info2)
  f.close ()
  提醒=[]
  webhook_url=' https://oapi.dingtalk.com/robot/send?access_token=771ded387e6be652c51a2b6c83cade4e048e3da4fdfe128f1db6b124b87df18a '
  itemid=get_itemid ()
  pname_url=get_picture (itemid pname)
  打印(pname_url)
  send_msg (pname_url info3) 

Zabbix配置钉钉的带图片报的警