python实现监控阿里云账户余额功能
背景
由于阿里云oss,cdn消耗钱的速度比较快,在不知道的情况下,服务就被停了,影响比较大。所以想做个监控。百度一下阿里云账户余额api还真有;于是开启了踩坑之路。
查阅资料创建accessKeyId和accessKeySecret
- 官方文档(感觉并不细致)https://help.aliyun.com/document_detail/87997.html?spm=a2c6h.13066369.0.0.59e4581eaxXH1O
- sdkhttps://developer.aliyun.com/sdk?spm=5176.12818093.resource-links.dsdk_platform.488716d022QXo0
- 看了官方文档后还是有点懵逼,后面Google了这个关键字QueryAccountBalanceRequest才看到真正的样例代码https://developer.aliyun.com/ask/132002(感觉这块资料很少呀,aliyun-python-sdk-bssopenapi居然没写在sdk安装列表里面,在社区找到的)。
- 创建accessKeyId,鼠标悬停到右上角
撸码阶段
要安装的依赖
sudopipinstallaliyun-python-sdk-core-ihttps://mirrors.aliyun.com/pypi/simple/
sudopipinstallaliyun-python-sdk-bssopenapi-ihttps://mirrors.aliyun.com/pypi/simple/
fromaliyunsdkcoreimportclient
fromaliyunsdkbssopenapi.request.v20171214importQueryAccountBalanceRequest
fromaliyunsdkcore.profileimportregion_provider
#检查账户余额
defcheck_account(name,accessKeyId,accessKeySecret,valve,notify_emails):
region_provider.add_endpoint('BssOpenApi','cn-hangzhou','business.aliyuncs.com')
clt=client.AcsClient(accessKeyId,accessKeySecret,'cn-hangzhou')
request=QueryAccountBalanceRequest.QueryAccountBalanceRequest()
request.set_accept_format("JSON")
result=clt.do_action_with_exception(request)
print(result)
下面是我封装的检查账户余额,如果低于阀值就给要通知的人发邮件。monitor_balance.py
#-*-coding:UTF-8-*-
'''
监控阿里云账户余额
zhouzhongqing
2019年12月14日20:21:11
sudopipinstallaliyun-python-sdk-core-ihttps://mirrors.aliyun.com/pypi/simple/
sudopipinstallaliyun-python-sdk-bssopenapi-ihttps://mirrors.aliyun.com/pypi/simple/
https://developer.aliyun.com/ask/132002
'''
importos
importtime
importsched
importsmtplib
fromemail.mime.textimportMIMEText
fromemail.headerimportHeader
fromaliyunsdkcoreimportclient
fromaliyunsdkbssopenapi.request.v20171214importQueryAccountBalanceRequest
fromaliyunsdkcore.profileimportregion_provider
importjson
fromdecimalimportDecimal
#qq邮箱smtp服务器
host_server='smtp.qq.com'
#sender_qq为发件人的qq号码
sender_qq='1030907690@qq.com'
#pwd为qq邮箱的授权码
pwd='xxxxxx'
#发件人的邮箱
sender_qq_mail='1030907690@qq.com'
#第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数
#第二个参数以某种人为的方式衡量时间
schedule=sched.scheduler(time.time,time.sleep);
defsend_mail(receiver,name,balance,valve):
#收件人邮箱
#receiver='1030907690@qq.com'
#邮件的正文内容
mail_content='您好,目前账户%s,余额为%s,低于阀值%s,请知悉!'%(name,balance,valve)
#邮件标题
mail_title='%s余额监控通知邮件'%(name)
#ssl登录
smtp=smtplib.SMTP_SSL(host_server)
#set_debuglevel()是用来调试的。参数值为1表示开启调试模式,参数值为0关闭调试模式
smtp.set_debuglevel(0)
smtp.ehlo(host_server)
smtp.login(sender_qq,pwd)
msg=MIMEText(mail_content,"plain",'utf-8')
msg["Subject"]=Header(mail_title,'utf-8')
msg["From"]=sender_qq_mail
msg["To"]=receiver
smtp.sendmail(sender_qq_mail,receiver,msg.as_string())
smtp.quit()
#解析配置
defparse_account():
f=open("monitor.json")
lines=f.read()
data=json.loads(lines)
f.close()
returndata
#检查账户余额
defcheck_account(name,accessKeyId,accessKeySecret,valve,notify_emails):
region_provider.add_endpoint('BssOpenApi','cn-hangzhou','business.aliyuncs.com')
clt=client.AcsClient(accessKeyId,accessKeySecret,'cn-hangzhou')
request=QueryAccountBalanceRequest.QueryAccountBalanceRequest()
request.set_accept_format("JSON")
result=clt.do_action_with_exception(request)
#print(result)
res_json=json.loads(str(result,encoding="utf-8"))
print(res_json)
ifres_jsonisnotNoneandres_json["Code"]=="200":
availableAmount=res_json["Data"]["AvailableAmount"]
ifDecimal(availableAmount)
- 还有个json文件配置monitor.json
- 里面分别代表的是名称,发起邮件通知账户余额阀值,id,密钥,通知的邮箱(可以多个,逗号,分割)。
[{"name":"恭喜你888","valve":"100","accessKeyId":"xxx","accessKeySecret":"xxx","notifyEmail":1030907690@qq.com}]
运行效果
如果是正式环境部署的话可以用这个命令,可以后台运行,日志输出到nohup.out:
nohuppython-umonitor_balance.py>nohup.out2>&1&
总结
以上所述是小编给大家介绍的python实现监控阿里云账户余额功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。