欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

腳本主要功能:

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

2)通過cmdb系統(tǒng)(藍(lán)鯨)接口采集所有生產(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)登錄認(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", "主機名", "操作系統(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)主機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ā)送失敗的情況(提示遠(yuǎn)程主機拒接連接),這里要使用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)文章

  • Python將一個CSV文件里的數(shù)據(jù)追加到另一個CSV文件的方法

    Python將一個CSV文件里的數(shù)據(jù)追加到另一個CSV文件的方法

    今天小編就為大家分享一篇Python將一個CSV文件里的數(shù)據(jù)追加到另一個CSV文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • ORM Django 終端打印 SQL 語句實現(xiàn)解析

    ORM Django 終端打印 SQL 語句實現(xiàn)解析

    這篇文章主要介紹了ORM Django 終端打印 SQL 語句實現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python驗證公網(wǎng)ip與內(nèi)網(wǎng)ip的實現(xiàn)示例

    python驗證公網(wǎng)ip與內(nèi)網(wǎng)ip的實現(xiàn)示例

    本文主要介紹了python驗證公網(wǎng)ip與內(nèi)網(wǎng)ip的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • shelve  用來持久化任意的Python對象實例代碼

    shelve 用來持久化任意的Python對象實例代碼

    這篇文章主要介紹了shelve 用來持久化任意的Python對象實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • python實現(xiàn)批量修改文件名代碼

    python實現(xiàn)批量修改文件名代碼

    本文給大家分享的是一段僅僅10行代碼就實現(xiàn)了批量修改文件名的python腳本,推薦給大家,有需要的小伙伴可以參考下
    2017-09-09
  • Python HTTP客戶端自定義Cookie實現(xiàn)實例

    Python HTTP客戶端自定義Cookie實現(xiàn)實例

    這篇文章主要介紹了Python HTTP客戶端自定義Cookie實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解決Scrapy安裝錯誤:Microsoft Visual C++ 14.0 is required...

    解決Scrapy安裝錯誤:Microsoft Visual C++ 14.0 is required...

    下面小編就為大家?guī)硪黄鉀QScrapy安裝錯誤:Microsoft Visual C++ 14.0 is required...的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 如何從PyTorch中獲取過程特征圖實例詳解

    如何從PyTorch中獲取過程特征圖實例詳解

    特征提取是圖像處理過程中常需要用到的一種方法,其效果好壞對模型的泛化能力有至關(guān)重要的影響,下面這篇文章主要給大家介紹了關(guān)于如何從PyTorch中獲取過程特征圖的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Python中pickle模塊的使用詳解

    Python中pickle模塊的使用詳解

    這篇文章主要介紹了Python中pickle模塊的使用詳解,python的pickle模塊提供了一個簡答的持久化功能,可以將對象以文件的形式存放在磁盤上,pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列化和反序列化,需要的朋友可以參考下
    2023-08-08
  • Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊虒嵗坛讨械膮^(qū)間的插入,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08

最新評論