Python利用Zabbix API定时报告存在报警的机器

简介:

由于手上的zabbix服务器有几个,有时会没注意报警短信,又懒得登陆上去看看zabbix,所以用Python利用zabbix的API获取有问题的机器每天早上发到我邮箱,foxmail又是我天天都用的东西,这样我就可以方便地看到所有有问题的机器了

zabbix_sendmail.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python
#coding:utf-8
import  smtplib
from  email.mime.text  import  MIMEText
import  sys
#mail_to_list = ['lihuipeng@xxx.com',]
mail_host  =  'smtp.163.com'
mail_user  =  'testest'      #发件人邮箱帐号
mail_pass  =  '123456'       #发件人邮箱密码
mail_postfix  =  '163.com'
def  send_mail(to_list,subject,content):
     me  =  mail_user + "<" + mail_user + "@" + mail_postfix + ">"
     msg  =  MIMEText(content)
     msg[ 'Subject' =  subject
     msg[ 'From' =  me
     msg[ 'to' =  ";" .join(to_list)
     #msg['to'] = to_list
                                                                                             
     try :
         =  smtplib.SMTP()
         s.connect(mail_host)
         s.login(mail_user,mail_pass)
         s.sendmail(me,to_list,msg.as_string())
         s.close()
         return  True
     except  Exception,e:
         print  str (e)
         return  False
                                                                                             
if  __name__  = =  "__main__" :
     print  sys.argv[ 1 ]
     print  sys.argv[ 2 ]
     print  sys.argv[ 3 ]
     send_mail(sys.argv[ 1 ], sys.argv[ 2 ], sys.argv[ 3 ])

这个是我用来发邮件的脚本,原理就是连接到163邮箱发送邮件,这里我是注册了一个帐号专门用来发邮件的。


zabbix_report.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/python
#coding:utf-8
import  json
import  urllib2
from  urllib2  import  URLError
import  sys
import  zabbix_sendmail
#接收人
mailtolist  =  [ 'test@163.com' ,]
#格式:zabbix地址,zabbix帐号,zabbix密码,邮件标题
zabbix_addresses = [ 'http://test1.zabbix.com,admin,123456,test1' , 'http://test2.zabbix.com,admin,123456,test2' , 'http://test3.zabbix.com,admin,123456,test3' ]
class  ZabbixTools:
     def  __init__( self ,address,username,password):
                                                                       
         self .address  =  address
         self .username  =  username
         self .password  =  password
                                                                       
         self .url  =  '%s/api_jsonrpc.php'  %  self .address
         self .header  =  { "Content-Type" : "application/json" }
                                                                       
                                                                       
                                                                       
     def  user_login( self ):
         data  =  json.dumps({
                            "jsonrpc" "2.0" ,
                            "method" "user.login" ,
                            "params" : {
                                       "user" self .username,
                                       "password" self .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()
             #print response['result']
             self .authID  =  response[ 'result' ]
             return  self .authID
                                                                           
     def  trigger_get( self ):
         data  =  json.dumps({
                            "jsonrpc" : "2.0" ,
                            "method" : "trigger.get" ,
                            "params" : {
                                       "output" : [
                                                 "triggerid" ,
                                                 "description" ,
                                                 "priority"
                                                 ],
                                       "filter" : {
                                                  "value" 1
                                                  },
                                       "expandData" : "hostname" ,
                                       "sortfield" "priority" ,
                                       "sortorder" "DESC"
                                     },
                            "auth" self .user_login(),
                            "id" : 1              
         })
                                                                       
         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  "Error as " , e
         else :
             response  =  json.loads(result.read())
             result.close()
             issues  =  response[ 'result' ]
             content  =  ''
             if  issues:
                 for  line  in  issues:
                     content  =  content  +  "%s:%s\r\n"  %  (line[ 'host' ],line[ 'description' ])
             return  content
                                                                           
if  __name__  = =  "__main__" :
     for  zabbix_addres  in  zabbix_addresses:
         address,username,password,subject  =  zabbix_addres.split( ',' )
         =  ZabbixTools(address = address, username = username, password = password)
         content  =  z.trigger_get()
         zabbix_sendmail.send_mail(mailtolist, subject, content)
     print  "Done!"

这里就是利用API查询信息,然后通过上面的发邮件脚本把信息发出来,效果是这样的:

145315337.png

再添加一个crontab就OK~

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1306261如需转载请自行联系原作者


lihuipeng

相关文章
|
11天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
37 3
如何使用Python开发API接口?
|
3天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
18 1
|
11天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
26 1
|
18天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
25 2
|
7天前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
24 0
|
30天前
|
JSON API 数据格式
使用Python和Flask构建简单的RESTful API
【10月更文挑战第12天】使用Python和Flask构建简单的RESTful API
43 1
|
1月前
|
数据采集 人工智能 自然语言处理
Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股)AI Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
1月前
|
API 数据库 网络架构
深入浅出:使用Python Flask实现RESTful API
【10月更文挑战第7天】在数字化时代,掌握如何高效构建和部署RESTful API是后端开发者的必备技能。本文将引导你了解如何使用Python Flask框架快速打造一个简单而强大的RESTful服务。从基础环境搭建到API设计原则,再到实际代码示例,我们将一步步揭开Flask框架的神秘面纱,让你轻松上手,并能够自信地处理更复杂的项目。
|
30天前
|
API 网络架构 Python
使用Python和Flask构建简单的RESTful API
【10月更文挑战第12天】使用Python和Flask构建简单的RESTful API
34 0
|
1月前
|
JSON API 数据格式
使用Python构建RESTful API
【10月更文挑战第8天】使用Python构建RESTful API
35 0

热门文章

最新文章