DJANGO查询ZABBIX6长时间的监控队列

这篇具有很好参考价值的文章主要介绍了DJANGO查询ZABBIX6长时间的监控队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.登陆ZABBIX获取队列信息

先写一个类,实现:

1.登陆ZABBIX,获取KEY,再用这个KEY通过远程命令使用zabbix_get的方式拿到队列

2.拿到队列信息后比对ZABBIX后台数据库,获取监控项的信息,并根据队列的nextcheck信息进筛选和数据重组,此时将监控队列的监控项,PROXY,AGENT,nextcheck关联起来

chkzbqueue.py

#coding:utf-8
import requests
import json
import sys
reload(sys)
import json
import urllib2
from urllib2 import URLError
import paramiko
import time
sys.setdefaultencoding('utf-8')

class chkzbqueues:
    def __init__(self):
        self.url = 'http://serverip/api_jsonrpc.php'
        self.header = {'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0',
                       "Content-Type": "application/json"}

    def user_login(self):
        data = json.dumps({
                           "jsonrpc": "2.0",
                           "method": "user.login",
                           "params": {
                                      "user": "username",
                                      "password": "password"
                                      },
                           "id": 0
                           })

        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])

        try:
            result = urllib2.urlopen(request)
        except URLError as e:
            print ("Auth Failed, please Check your name and password:", e.code)
        else:
            response = json.loads(result.read())
            result.close()
            self.authID = response['result']
            #print self.authID
            return self.authID



    def sshexeccmdrefile(self,ips,key):
        try:
            paramiko.util.log_to_file("paramiko.log")
            print "log"
            idrsa="D:\\PATH\\id_rsa"  #idrsa的路径
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            pkey = paramiko.RSAKey.from_private_key_file(idrsa)

            ssh.connect(hostname=ips, port=22, username='root',pkey=pkey,timeout=30)
            t = ssh.get_transport()
            sftp = paramiko.SFTPClient.from_transport(t)
            cmds="/zabbixinstallpath/bin/zabbix_get -s zabbix服务器的IP地址 -p 10051 -k '{\"request\":\"queue.get\",\"sid\":\""+key+"\",\"type\": \"details\",\"limit\":800000}' > /tmp/zbqueues.txt" + "\n"
            #ssh.exec_command(cmds)
            #print cmds
            #exit()
            shs=ssh.invoke_shell()          
            shs.send(cmds.encode('utf8'))
            time.sleep(6)#等待命令执行完成
            #print shs.recv(1024).decode('UTF-8')
            sftp.get("/tmp/zbqueues.txt","zbqueues.txt")
            ssh.close()
            return 1

        except:
            print "error"+ips
            return 0

			
			
	def reshowtime(self, cptimes):
        t1 = time.localtime(cptimes)
        showtimes = time.strftime("%Y-%m-%d %H:%M:%S", t1)
        return showtimes


    def checkdbitems(self):
        itemidlists=[]
        with open("zbqueues.txt", "r") as f:
            content = json.load(f)
            #f.close()
            for fs in content["data"]:
                itemidlists.append(fs["itemid"])
        sqlstrs = "select items.itemid,items.name,items.key_,hosts.hostid,hosts.name as enablename,hosts.host,hosts.proxy_hostid as proxyids,interface.ip," \
                  "(select hosts.description from hosts where hostid = proxyids) as proxydesc," \
                  "(select hosts.host from hosts where hostid = proxyids) as proxyhosts " \
                  "from items,hosts,interface where items.hostid=hosts.hostid and hosts.hostid=interface.hostid and items.itemid in {}" .format(tuple(itemidlists)) + "order by proxyids"

        import pysql
        q1=pysql.conn_mysql()
        q1.db_host="ZABBIX数据库服务器的IP"
        q1.db_user="数据库用户名,不改动数据库,只读权限即可"
        q1.db_passwd="数据库密码"
        q1.database="ZABBIX数据库名称"
        datas=q1.query_mysqlrelistss(sqlstrs)
        redatas=[]
        for rows in datas:
            for fs in content["data"]:
                if fs["itemid"]==rows["itemid"]:
                    now = time.time()
                    lasts = int(now) - int(fs["nextcheck"])
                    if lasts > 800:  #大于800秒的写入LIST
                        rows["nextcheck"]=self.reshowtime(fs["nextcheck"])
                        #print rows["ip"],rows["enablename"],rows["name"],rows["proxyhosts"],rows["nextcheck"]
                        redatas.append(rows)
                    break

        return redatas

二.查询后台ZABBIX数据库的实现

import pysql这里调用了一个查询ZABBIX后台数据库的类,实现如下:

pysql.py

#coding:utf-8
import pymysql

class conn_mysql:
    def __init__(self):
        self.db_host = 'DBIP'
        self.db_user = 'DBUSERNAME'
        self.db_passwd = 'PASSOWRD'
        self.database = "DBNAME"


    def query_mysqlrelists(self, sql):
        conn = pymysql.connect(host=self.db_host, user=self.db_user, passwd=self.db_passwd,database=self.database)
        cur = conn.cursor()
        cur.execute(sql)
        data = cur.fetchall()
        cur.close()
        conn.close()
        if data != None and len(data) > 0:
            return data
            #调用方式:for ids, in datas:
        else:
            return "error"
        #pymysql连接可引用列名query_mysqlrelistss:conn = pymysql.connect(host=self.db_host, user=self.db_user, passwd=self.db_passwd,database=self.database,cursorclass=pymysql.cursors.DictCursor)  解决:tuple indices must be integers, not str


    def query_mysqlrelistss(self, sql):
        conn = pymysql.connect(host=self.db_host, user=self.db_user, passwd=self.db_passwd,database=self.database,cursorclass=pymysql.cursors.DictCursor)
        cur = conn.cursor()
        cur.execute(sql)
        data = cur.fetchall()
        cur.close()
        conn.close()
        if data != None and len(data) > 0:
            return data
        else:
            return "error"

三.django相关的实现

django项目views.py处理请求的方法

@login_required
def get_zbqueues(request):
    try:
        lists=imports.getqueuelists()
    except Exception:
        return render(request, "zbxqueues.html", {"login_err": "getimportsfail"})

    paginator = Paginator(lists, 60000) # 每页的行数
    page = request.GET.get('page')
    try:
        uplistspage = paginator.page(page)
    except PageNotAnInteger:
        uplistspage = paginator.page(1)

    except EmptyPage:
        uplistspage = paginator.page(paginator.num_pages)


    return render(request,'zbxqueues.html',{'uplists':uplistspage})

urls.py加一行:

url(r'^get_zbqueues/', views.get_zbqueues,name='get_zbqueues'),

 views.py调用了imports.getqueuelists()方法,这个方法调用了前面的chkzbqueue类来获取LIST返回给views.py里面的方法

def getqueuelists():
    import chkzbqueue
    qs=chkzbqueue.chkzbqueues()
    keys=qs.user_login()
    qs.sshexeccmdrefile("执行zabbix_get客户机的IP",keys)  #paramiko ssh远程连接,必须有认证密钥
    lists=qs.checkdbitems()
    return lists

写一个粗糙的HTML页面:文章来源地址https://www.toymoban.com/news/detail-490256.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ZABBIX800秒以上的队列</title>
</head>
<body>
{% for row in uplists %}
                <td>IP地址:{{ row.ip }}</td></br>
                <td>可见名称:{{ row.enablename }}</td></br>
                <td>代理主机:{{ row.proxyhosts }}</td></br>
                <td>监控项名称:{{ row.name}}</td></br>
                <td>key:{{ row.key_ }}</td></br>
                <td>上次检查的时间:{{ row.nextcheck }}</td></br>
</br> </td>


    <hr style="height:3px;border:none;border-top:3px double red;" />
        {% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if uplists.has_previous %}
            <a href="?page={{ uplists.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ uplists.number }} of {{ uplists.paginator.num_pages }}.
        </span>

        {% if uplists.has_next %}
            <a href="?page={{ uplists.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

</body>
</html>

到了这里,关于DJANGO查询ZABBIX6长时间的监控队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zabbix6.2利用模板和自定义监控项监控华为AR3260路由器

    1:登录路由器的WEB管理控制台。在系统管理中找到SNMP然后开启SNMP代理,SNMP的版本可以只选择v2c都选择也无所谓,然后点击新建一个团体。 2:团体名称输入默认的public即可,在WEB端显示的是乱码,但是不影响使用,访问模式选择只读。 3:登录Zabbix在监控中点击主机。 4:然

    2024年02月09日
    浏览(80)
  • 长时间的GUI任务

    如果所有任务的执行时间都较短(并且应用程序中不包含执行时间较长的非GUI部分),那么整个应用程序都可以在事件线程内部运行,并且完全不用关心线程。然而,在复杂的GUI   应用程序中可能包含一些执行时间较长的任务,并且可能超过了用户可以等待的时间,例如拼写检

    2024年02月08日
    浏览(37)
  • 搭建Zabbix6.0版本

    Zabbix简介 Zabbix是一个企业级的开源分布式监控解决方案,由C语言编写而成的底层架构(server端和agent端),由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利。 Zabbix运行条件: Server: Zabbix Server需运行在LNMP(Linux+Nginx+Mysql+PHP)环

    2024年01月22日
    浏览(65)
  • 【zabbix】Centos7安装zabbix6.0版本配置

    目录 环境说明 一、部署Nginx+PHP 1、安装Nginx 2、安装PHP 3、配置Nginx 4、配置PHP 5、创建测试目录测试文件 6、启动Nginx和PHP 7、测试 二、部署数据库mariadb 1、安装mariadb 2、初始化 3、创建库及用户 4、向数据库中导入数据 三、编译安装zabbix-server服务端 1、安装 2、修改配置文件

    2024年02月11日
    浏览(47)
  • Docker 部署 Zabbix6.4

    1.1.离线安装docker docker网址:https://download.docker.com/linux/static/stable/x86_64/ 1.2 安装docker 1.3 更改数据默认存储位置 data-root /graph:取决于具体的系统版本或者kernel版本决定要用data-root还是graph 1.4 查看更改信息 2.1 拉取镜像 2.2 启动容器 PS:默认情况下,容器的网卡都是经过 NAT 的,

    2024年02月08日
    浏览(54)
  • Zabbix6 对接飞书告警

    @运维 你看下他的进程是不是挂了,之前在9点28分有发消息的,这次没有发消息 哐哐哐的去看了一通,确实有个进程之前是3个,现在只有2个了,进程减少了,当然这个业务也就存在问题了。还好小伙伴细心发现的比较早,如果小伙伴没有发现,业务受到了影响那就是一个生

    2024年02月13日
    浏览(38)
  • CentOS7安装Zabbix6.4

    安装准备: Zabbix更新到最新版本6.4,以下就是Zabbix6.4在CentOS7系统上的安装流程 Zabbix从6.0版本开始就不支持在CentOS7系统上根据官方文档快速安装server端了 因此我们只能一步步编译安装。 Zabbix源码包地址:https://www.zabbix.com/cn/download_sources Zabbix6.4官方文档地址 https://www.zabbix.

    2024年02月06日
    浏览(41)
  • Centos7部署zabbix6.4

    zabbix6.4主要环境为Mysql8和PHP7.25以上 本地上传或下载mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz 在线执行脚本 脚本内容 安装完成创建zabbix库 修改validate_password_policy参数的值 修改密码的长度 创建zabbix用户 授权 升级gcc版本(由于CentOS7默认的gcc版本较低为4.8,因此无法顺利编译安装成功

    2024年02月09日
    浏览(41)
  • Unity [hold on busy for 老长长时间的解决方法]

    如图 Unity已经busy了俩小时多不让我操作了,连关闭都要用任务管理器 起因:项目是当初创建的时候手欠勾选同步到Plastic SCM上了,然后昨天去Plastic SCM仓库看了一眼,发现项目大小是0kb就把它从仓库中移除了。于是乎,再打开项目就只能看着Unity Busy了半天啥都做不了。 解

    2024年02月11日
    浏览(38)
  • docker-compose部署zabbix6.0

    本文第一步有部署docker步骤 本文第二步有部署docker-compose步骤 创建父目录 创建容器映射文件夹 拉取镜像 上传.ttf文件解决乱码问题 将windows的simfang.ttf上传至./font 路径 C:WindowsFontssimfang.ttf 编辑docker-compose.yml文件部署容器堆栈 启动Zabbix Server容器堆栈 查看容器堆栈启动状态

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包