基于Python2.7的阿里云API调用及运维相关
公司部分业务放在阿里云上面,虽然阿里云管理平台本身有自己的监控后台,但是公司也有自己独立的zabbix监控系统,目前要做的就是把阿里云的监控转移到自己公司的监控系统,需要使用到阿里云的API,API的使用分以下2种方式
1.使用阿里云的Python SDK(python2.7),具体参考http://develop.aliyun.com/sdk/python?spm=5176.100054.0.0.tcU93U,示例代码:
#coding:utf-8
from aliyunsdkcore import client
from aliyunsdkrds.request.v20140815 import DescribeRegionsRequest
clt = client.AcsClient('access_key','access_secret','cn-hangzhou')
request=DescribeRegionsRequest.DescribeRegionsRequest()
request.set_accept_format('json')
#request.set_action_name("DescribeDBInstancePerformance")
request.set_action_name("DescribeResourceUsage")
#request.set_query_params(dict(DBInstanceId="rdsid",key="MySQL_NetworkTraffic",StartTime="2015-10-13T15:00Z",EndTime="2015-10-14T15:00Z"))
request.set_query_params(dict(DBInstanceId="rdsid",StartTime="2015-10-13T15:00Z",EndTime="2015-10-14T15:00Z"))
print(clt.do_action(request))
2.使用原生的API,示例代码:
#coding:utf-8
try: import httplib
except ImportError:
import http.client as httplib
import sys
import urllib
import urllib2
import time
import json
import itertools
import mimetypes
import base64
import hmac
import uuid
from hashlib import sha1
class AliyunMonitor:
def __init__(self,url):
self.access_id = 'access_id'
self.access_secret = 'access_secret'
self.url = url
##签名
def sign(self,accessKeySecret, parameters):
sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])
canonicalizedQueryString = ''
for (k,v) in sortedParameters:
canonicalizedQueryString += '&' + self.percent_encode(k) + '=' + self.percent_encode(v)
stringToSign = 'GET&%2F&' + self.percent_encode(canonicalizedQueryString[1:]) #使用get请求方法
h = hmac.new(accessKeySecret + "&", stringToSign, sha1)
signature = base64.encodestring(h.digest()).strip()
return signature
def percent_encode(self,encodeStr):
encodeStr = str(encodeStr)
res = urllib.quote(encodeStr.decode(sys.stdin.encoding).encode('utf8'), '')
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def make_url(self,params):
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
parameters = {
'Format' : 'JSON',
'Version' : '2014-08-15',
'AccessKeyId' : self.access_id,
'SignatureVersion' : '1.0',
'SignatureMethod' : 'HMAC-SHA1',
'SignatureNonce' : str(uuid.uuid1()),
'TimeStamp' : timestamp,
}
for key in params.keys():
parameters[key] = params[key]
signature = self.sign(self.access_secret,parameters)
parameters['Signature'] = signature
url = self.url + "/?" + urllib.urlencode(parameters)
return url
def do_request(self,params):
url = self.make_url(params)
print(url)
request = urllib2.Request(url)
try:
conn = urllib2.urlopen(request)
response = conn.read()
except urllib2.HTTPError, e:
print(e.read().strip())
raise SystemExit(e)
try:
obj = json.loads(response)
except ValueError, e:
raise SystemExit(e)
print obj
if __name__ == "__main__":
T = AliyunMonitor("https://rds.aliyuncs.com")
T.do_request({"key":"MySQL_NetworkTraffic","Action":"DescribeDBInstancePerformance","DBInstanceId":"rds_id","StartTime":"2015-10-13T15:00Z","EndTime":"2015-10-14T15:00Z"})
注意事项:确保运行脚本的主机时区时间无误(yum install ntpdate && ntpdate time.windows.com)
=========================阿里云相关文档参考===========================
阿里云API文档:https://develop.aliyun.com/
点击【创建/管理 Acccesskey】
通过【访问控制(Resource Access Management)】产品获得【受限的】AcccessKey和AccessSecret,以用于后续API调用
https://www.aliyun.com/product/ram?spm=5176.doc28636.2.2.4DV89b
阿里云SDK下载(Python):
https://develop.aliyun.com/sdk/python?spm=5176.7926450.210367.2.x1p7Zk
还有其他版本SDK的下载
Python SDK安装:
https://zhidao.baidu.com/question/544414713.html
查询实例列表:
https://help.aliyun.com/document_detail/25506.html?spm=0.0.0.0.QjVZTI
查询伸缩组内实例列表:
https://help.aliyun.com/document_detail/25942.html?spm=0.0.0.0.IeaTQA
相关笔记:《Ansible+SVN 自动部署》(解决弹性伸缩工作中不定数目的ECS实例更新部署问题)
http://www.cppblog.com/kenkao/archive/2017/03/01/214717.html
监控与自动化部署:(解决ECS实例新弹出时的自动部署问题)
PS:如果--level 6不生效,则可以执行chkconfig test on开启全部等级(测试中,弊端不明...)
PS:前面我的说明有一个地方不太严谨,大多数情况下都配置35,很少有配置4的。(来自阿里售后工程师)
https://help.aliyun.com/document_detail/25971.html?spm=0.0.0.0.QjVZTI
弹性伸缩在使用报警任务之前,需要在ECS的镜像里安装新版本的云监控程序
https://help.aliyun.com/knowledge_detail/38830.html
关于弹性伸缩自动创建实例的密码与登录问题:
创建云主机的时候,主机密码都不是自定义镜像中的密码。为了保证密码的安全性,推荐您通过设置”公私钥”认证的方式来进行SSH免密码登录。
如果您不需要通过设置”公私钥”认证的方式来进行SSH免密码登录,则需要在控制台重置密码(重启生效)才能登录。
配置Linux主机SSH无密码访问:
# ssh-keygen
# 通过ssh-copy-id下发公钥到servant镜像
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@servanthost
# <输入root@servanthost口令>
# 尝试无密码登录
# ssh root@servanthost
以servant镜像为蓝本创建的弹性ECS实例,皆可在master上无密码登录
相关笔记:《阿里云ECS服务器搭建Nginx+PHP+MySql环境详细步骤(CentOS7环境)》
http://blog.csdn.net/kenkao/article/details/53333595
Ecs部署:
master | servant(镜像) | |
1.安装svn | 1.安装svn | svn拉取部署 |
2.安装ansible | 运维工具搭建 | |
3.生成密钥对 | 3.下发得到公钥 | 无密码访问 |
4.nginx+php环境搭建 | 基本服务环境 | |
5.部署脚本 | 5.部署自启脚本并开启 | 自动运维脚本 |
6.nginx调优 | 运行环境调优 |
SVN及Ansible安装:
http://blog.chinaunix.net/uid-21146222-id-5761320.html
http://blog.chinaunix.net/uid-21146222-id-5757647.html
相关笔记:
《阿里云自定义监控的使用》(关注其中python脚本部分)
《通过crontab为linux添加定时任务》http://blog.chinaunix.net/uid-21146222-id-4326110.html
总结:
可以直接 vim /etc/crontab ,并添加类似 */1 * * * * root /home/scripts/report.sh 的定时任务,与 crontab -e 的区别在于需要显示指定所属用户 root
/sbin/service crond restart 重启crond服务
tail -f /var/log/cron 动态查看crond日志
关于《阿里云自动告警》机制中遇到的坑:(crontab定时执行python的坑)
https://bbs.aliyun.com/read.php?tid=135851&page=1
http://blog.bomobox.org/2016-10-06/crontab-python/
http://blog.csdn.net/shanliangliuxing/article/details/7980298
总结:
通过crontab定时执行python脚本失败的根本原因在于crontab的运行时环境有别于root用户的python环境
解决方法:
1. 编写shell脚本挂载python脚本,而后crontab定时执行shell脚本(crontab对于shell脚本拥有更好的亲和力)
2. 编辑/etc/hosts文件,把::1条目注释掉(解决ipv6冲突问题,该步骤是否必须有待考证..)
关于解决shell脚本正常执行,但是crontab执行失败的土办法:先cd到相关目录下,在./执行相关命令行。例如:
/home/loganalysis/dealexcel.sh
修改为
cd /home/loganalysis/ && ./dealexcel.sh
参考:http://blog.csdn.net/jkunzhang/article/details/7440215
附件下载:
>> xxxxansible.zip
>> xxxxwarning.zip
基于Python2.7的阿里云API调用及运维相关相关推荐
- 【阿里云API】 阿里云API调用的若干说明
阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...
- php对接阿里云API调用企业税号查询的高级实战案例解析(下拉筛选查询、远程调用API、xm-select组件应用)
阿里云API调用企业税号查询 一.功能描述 1.请求参数 2.GET请求代码 3.返回示例 4.错误码 二.核心代码 1.引入外部JS库 2.构建HTML容器 3.xmSelect回调 总结 一.功能 ...
- 宕机的阿里云们正在杀死运维?
当运维工作都能托管在云平台上解决时,运维还有以后吗? 云计算正在杀死运维吗? 近年来,关于"去运维"的相关话题甚嚣尘上,但似乎没有引起程序员的过多关注或者大范围讨论.近日,程序员论 ...
- python如何调用阿里云接口_阿里云 API调用实践(python语言)
1.结论:阿里云的SDK开发,其实就是远程调用API,python的代码就是一个外壳,核心是封装成一个http报文,利用json格式,进行RPC调用. 2.SDK调用API的套路如下: 1 #-*- ...
- 十八、阿里云api调用
sdk参考下载地址: https://developer.aliyun.com/tools/sdk#/python pip安装sdk: pip install aliyun-python-sdk-ec ...
- 阿里云“网红quot;运维工程师白金:做一个平凡的圆梦人
他是阿里云的一位 P8 运维专家,却很有野心得给自己取花名"辟拾(P10)": 他没有华丽的履历,仅凭着 26 年的热爱与坚持,一步一个脚印踏出了属于自己的技术逆袭之路: 他爱好清 ...
- 新买的阿里云ECS基本安全运维
1. 引言 购买了阿里云的ECS后,默认很多配置不够安全,我们需要进行一些维护操作. 2. 添加新用户 #不推荐用useradd,不会帮我们创建同名的用户主目录 adduser xxx # xxx为你 ...
- 实现调用阿里云API第二章——API调用实战(全球IP地址归属地查询)
本篇将实现利用springboot实现阿里云API调用实战. 一.购买阿里云API https://market.aliyun.com/data?spm=5176.9502607.1387859.3. ...
- 阿里云日志服务SLS,打造云原生时代智能运维
2021年10月21日,阿里云针对企业运维难题,在云栖大会为大家带来了一场<智能运维论坛>的主题演讲.在会上,阿里云资深技术专家.日志服务技术负责人简志提出"云原生时代,企业业务 ...
最新文章
- 如何通过一行代码下载B站视频?
- 汇总|SLAM常用linux命令,包括文件查找、查看文件大小、设置环境变量等
- 关于BCH交易规范排序(CTOR)的优缺
- Segment Routing — Overview
- java 自定义 operator_java8 自定义Collector
- 云计算体系结构中soa构建层_云计算的服务模式及技术结构
- 计算机系统库的管理及应用,计算机软件及应用嵌入式软件基础数据库管理系统.pptx...
- java 实现打印条形码_激光打印机与条码打印机打印不干胶标签哪个好?
- 2月28日 PCA降维,SVD压缩,中心化、归一化、标准化、k-l变换
- 初学STM32F205的库包搭建工程
- Camera IIC总线
- spring aop记录操作日志和错误日志
- 科幻文学入门指南(专业读者分享)
- obs听到了自己的回音_直播连麦过程中回声回音解决方式
- 由Yardi赞助的报告披露亚太房地产科技投资详情
- Spring加载时报错处理
- 有道云笔记迁移到Obsidian的方法(保留文件创建时间)
- php swoole 教程,PHP7安装Swoole详细教程
- Glide 加载矩形圆角图片
- 便利贴--17{移动端滑动模块}
热门文章
- 四线温度探头怎么接线_温度变送器接线详解
- maven伺服搭建_Maven私服搭建
- 原来awt是可以设置多个frame
- eigen之eigen中文文档
- win10+linux系统进入安全模式,Win10进入安全模式的方法
- python计算公式程序_小学生计算题的自动程序Python,生成,python
- 允许其他网络用户通过此计算机的internet连接来连_「Azure云」什么是Azure虚拟网络?...
- Django开发密码管理表实例【附源码】
- 发的楷体怎么写_孩子作业实在写不完,父母该怎么办?我直接给老师发信息
- js substring和substr的区别实例,一目了然