最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年04月03日 07:22:12   作者:huss  
這篇文章主要介紹了python自動統(tǒng)計zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

腳本主要功能:

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

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

3)以上2步返回數(shù)據(jù)對比,找出未監(jiān)控主機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)主機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)登錄認證
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", "主機名", "操作系統(tǒng)", "電源狀態(tài)"])

    # 循環(huán)里面的字典,將value作為數(shù)據(jù)寫入進去
    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)主機IP地址'

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

  # 郵件正文內(nèi)容
  message.attach(MIMEText('每日自動統(tǒng)計監(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ā)送失敗的情況(提示遠程主機拒接連接),這里要使用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)控主機ip地址列表
  cmdbhostdict = getCmdbProdHost()               #獲取cmdb主機地址列表
  #zabbix監(jiān)控主機和cmdb主機做比較
  data = compare(zabhostlist, cmdbhostdict)

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

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

相關(guān)文章

最新評論

封丘县| 阿坝| 桐柏县| 工布江达县| 大石桥市| 宣汉县| 类乌齐县| 文安县| 罗山县| 平定县| 平湖市| 灵璧县| 郎溪县| 惠州市| 旬邑县| 苗栗县| 黎城县| 陆良县| 浠水县| 佛山市| 平塘县| 瑞昌市| 南召县| 松桃| 合江县| 马边| 九寨沟县| 贞丰县| 灌南县| 临江市| 文安县| 康乐县| 连平县| 凤台县| 靖边县| 溆浦县| 白朗县| 扶余县| 渑池县| 榕江县| 平遥县|