濮阳杆衣贸易有限公司

主頁 > 知識庫 > python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼

python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼

熱門標(biāo)簽:西藏智能外呼系統(tǒng)五星服務(wù) 工廠智能電話機(jī)器人 千陽自動外呼系統(tǒng) 400電話申請服務(wù)商選什么 清遠(yuǎn)360地圖標(biāo)注方法 江蘇客服外呼系統(tǒng)廠家 原裝電話機(jī)器人 平頂山外呼系統(tǒng)免費(fèi) 在哪里辦理400電話號碼

腳本主要功能:

1)通過zabbix api接口采集所有監(jiān)控主機(jī)ip地址;

2)通過cmdb系統(tǒng)(藍(lán)鯨)接口采集所有生產(chǎn)主機(jī)IP地址、主機(jī)名、操作系統(tǒng)、電源狀態(tài);

3)以上2步返回?cái)?shù)據(jù)對比,找出未監(jiān)控主機(jī)ip地址,生成csv文件;

4)發(fā)送郵件。

腳本如下:

#!/usr/bin/python
#coding:utf-8

import requests
import json
import re
import time
import csv
from collections import Counter
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 從cmdb系統(tǒng)獲取虛擬化生產(chǎn)主機(jī)ip
def getCmdbProdHost():
  url1 = 'http://paas.xxxx.com/api/c/compapi/v2/cc/search_inst/'
  data1 = {
    "bk_app_secret": "**********************",
    "bk_app_code": "bk_cmdb",
    "bk_username": "admin",
    "bk_obj_id": "host",
    "page": {
      "start": 0,
      "limit": 2000,
      "sort": "bk_inst_id"
    },
    "fields": {
      "host": [
        "bk_host_id",
        "bq_hostname",
        "bk_host_innerip",
        "bq_hosttype",
        "powerState",
        "bq_osname"
      ]
    }  }
  r1 = requests.post(url1, json=data1)
  response_dict1 = r1.json()
  #print(response_dict1)
  prodip_dict = {}
  testip = "10.210.xx|10.210.xx|10.210.xx|10.210.xx|xx.xx.xx"   #測試網(wǎng)段ip
  for i in response_dict1.get('data')["info"]:
    if i["bq_hosttype"] == "t2" and i["powerState"] == "poweredOn" and not re.search("UAT", i["bq_hostname"]) and not re.match(testip, i["bk_host_innerip"]):
      prodip_dictkey = i["bk_host_innerip"]
      #prodip_dictvalue = i["bq_hostname"]
      prodip_dictvalue = [i["bq_hostname"], i["bq_osname"], i["powerState"]]
      prodip_dict[prodip_dictkey] = prodip_dictvalue
  return prodip_dict

#獲取zabbix系統(tǒng)登錄認(rèn)證
def getZabToken(url, post_headers, url_user, url_password):
  post_data = {
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
      "user": url_user,
      "password": url_password
    },
    "id": 1
  }
  ret = requests.post(url, data=json.dumps(post_data), headers=post_headers)
  return json.loads(ret.text).get("result")

def getZabHost(url,post_headers,token):
  data = {
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
      "output": [
        "hostid",
        "host"
      ],
      "selectInterfaces": [
        "interfaceid",
        "ip"
      ]
    },
    "id": 2,
    "auth": token,
  }
  request = requests.post(url, headers=post_headers, data=json.dumps(data))
  dict = json.loads(request.content)
  zab_ip = []
  for i in dict['result']:
    zab_ip.append(i['host'])
  return zab_ip

def compare(zabhostlist, cmdbhostdict):
  zabbixiplist = Counter(zabhostlist)
  cmdbiplist = Counter(list(cmdbhostdict.keys()))
  nomonip = {}
  for i in list((cmdbiplist - zabbixiplist).elements()):
    nomonip_value = cmdbhostdict[i]
    nomonip_key = i
    nomonip[nomonip_key] = nomonip_value
  print(nomonip)
  return nomonip

class writeToCsv(object):
  def __init__(self,data,info):
    self.data = data
    self.info = info

  def write_to_csv(self):
    rows = self.data
    info = self.info
    csvfile = "zabbix未監(jiān)控生產(chǎn)系統(tǒng)IP列表" + info + time.strftime('_%Y%m%d%H%M%S', time.localtime(time.time())) + ".csv"
    # print(csvfile)
    # 創(chuàng)建文件對象
    f = open(csvfile, 'w', newline='')

    # 通過文件創(chuàng)建csv對象
    csv_write = csv.writer(f)

    # writerow: 按行寫入, writerows: 是批量寫入
    # 寫入數(shù)據(jù) 取列表的第一行字典,用字典的key值做為頭行數(shù)據(jù)
    # csv_write.writerow(rows[0].keys())
    csv_write.writerow(["未監(jiān)控生產(chǎn)IP", "主機(jī)名", "操作系統(tǒng)", "電源狀態(tài)"])

    # 循環(huán)里面的字典,將value作為數(shù)據(jù)寫入進(jìn)去
    ip = list(rows.keys())
    hostname = list(rows.values())
    for row in range(len(ip)):
      csv_write.writerow([ip[row], hostname[row][0], hostname[row][1], hostname[row][2]])

    # 關(guān)閉打開的文件
    f.close()
    print("讀寫完成:",csvfile)
    return csvfile

def sendmail(csvfile,receiver):
  sender = 'xxx@xxx.com'
  smtpserver = 'xx.xx.xx.xx'
  username = 'xxx@xxx.com'
  password = '******'
  mail_title = 'zabbix未監(jiān)控生產(chǎn)主機(jī)IP地址'

  # 創(chuàng)建一個帶附件的實(shí)例
  message = MIMEMultipart()
  message['From'] = sender
  message['To'] = ','.join(receiver)
  message['Subject'] = Header(mail_title, 'utf-8')

  # 郵件正文內(nèi)容
  message.attach(MIMEText('每日自動統(tǒng)計(jì)監(jiān)控覆蓋率', 'plain', 'utf-8'))

  # 構(gòu)造附件
  att1 = MIMEApplication(open(csvfile, 'rb').read()) # 打開附件
  att1.add_header('Content-Disposition', 'attachment', filename=csvfile) # 為附件命名
  message.attach(att1)

  smtpObj = smtplib.SMTP_SSL() # 注意:如果遇到發(fā)送失敗的情況(提示遠(yuǎn)程主機(jī)拒接連接),這里要使用SMTP_SSL方法
  smtpObj.connect(smtpserver)
  smtpObj.login(username, password)
  smtpObj.sendmail(sender, message['To'].split(','), message.as_string())
  print("郵件發(fā)送成功!?。?)
  smtpObj.quit()

if __name__ == '__main__':
  url = 'http://xx.xx.xx.xx/api_jsonrpc.php'         #zabbix監(jiān)控系統(tǒng)接口地址
  post_headers = {'Content-Type': 'application/json'}
  url_user = "Admin"
  url_passwd = "******"
  auth = getZabToken(url,post_headers,url_user,url_passwd)
  zabhostlist = getZabHost(url,post_headers,auth)       #獲取zabbix監(jiān)控主機(jī)ip地址列表
  cmdbhostdict = getCmdbProdHost()               #獲取cmdb主機(jī)地址列表
  #zabbix監(jiān)控主機(jī)和cmdb主機(jī)做比較
  data = compare(zabhostlist, cmdbhostdict)

  #導(dǎo)出csv文件
  info = '統(tǒng)計(jì)'
  write = writeToCsv(data, info)
  resp = write.write_to_csv()
  receiver = ['hushanshan2@bngrp.com']   #y郵件接收人,多人用逗號區(qū)分開
  sendmail(resp, receiver)

到此這篇關(guān)于python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的文章就介紹到這了,更多相關(guān)python統(tǒng)計(jì)zabbix內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析
  • Python使用psutil獲取進(jìn)程信息的例子
  • Python中psutil的介紹與用法
  • python使用psutil模塊獲取系統(tǒng)狀態(tài)
  • Python psutil模塊簡單使用實(shí)例
  • Python使用psutil庫對系統(tǒng)數(shù)據(jù)進(jìn)行采集監(jiān)控的方法

標(biāo)簽:白城 日照 錦州 股票 西安 天水 隨州 安慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼》,本文關(guān)鍵詞  python,自動,統(tǒng)計(jì),zabbix,系統(tǒng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于python自動統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    山阳县| 贞丰县| 滦平县| 金门县| 平乡县| 康乐县| 莱芜市| 囊谦县| 昆山市| 镇坪县| 舒城县| 察雅县| 睢宁县| 临沭县| 贵州省| 弥渡县| 新巴尔虎右旗| 封开县| 华亭县| 托里县| 报价| 延边| 镇远县| 增城市| 吴川市| 宁德市| 怀安县| 合川市| 溧阳市| 富川| 德保县| 五常市| 云南省| 富裕县| 大英县| 大同市| 麻城市| 江达县| 桑日县| 页游| 威海市|