基于Python2.7的阿里云API调用及运维相关
http://blog.chinaunix.net/uid-17291169-id-5212576.html

公司部分业务放在阿里云上面,虽然阿里云管理平台本身有自己的监控后台,但是公司也有自己独立的zabbix监控系统,目前要做的就是把阿里云的监控转移到自己公司的监控系统,需要使用到阿里云的API,API的使用分以下2种方式

1.使用阿里云的Python SDK(python2.7),具体参考http://develop.aliyun.com/sdk/python?spm=5176.100054.0.0.tcU93U,示例代码:

#!/usr/local/bin/bin/python2.7
#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,示例代码:

#!/usr/bin/python
#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无密码访问:

# 在master上生成密钥对
# 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调用及运维相关相关推荐

  1. 【阿里云API】 阿里云API调用的若干说明

    阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...

  2. php对接阿里云API调用企业税号查询的高级实战案例解析(下拉筛选查询、远程调用API、xm-select组件应用)

    阿里云API调用企业税号查询 一.功能描述 1.请求参数 2.GET请求代码 3.返回示例 4.错误码 二.核心代码 1.引入外部JS库 2.构建HTML容器 3.xmSelect回调 总结 一.功能 ...

  3. 宕机的阿里云们正在杀死运维?

    当运维工作都能托管在云平台上解决时,运维还有以后吗? 云计算正在杀死运维吗? 近年来,关于"去运维"的相关话题甚嚣尘上,但似乎没有引起程序员的过多关注或者大范围讨论.近日,程序员论 ...

  4. python如何调用阿里云接口_阿里云 API调用实践(python语言)

    1.结论:阿里云的SDK开发,其实就是远程调用API,python的代码就是一个外壳,核心是封装成一个http报文,利用json格式,进行RPC调用. 2.SDK调用API的套路如下: 1 #-*- ...

  5. 十八、阿里云api调用

    sdk参考下载地址: https://developer.aliyun.com/tools/sdk#/python pip安装sdk: pip install aliyun-python-sdk-ec ...

  6. 阿里云“网红quot;运维工程师白金:做一个平凡的圆梦人

    他是阿里云的一位 P8 运维专家,却很有野心得给自己取花名"辟拾(P10)": 他没有华丽的履历,仅凭着 26 年的热爱与坚持,一步一个脚印踏出了属于自己的技术逆袭之路: 他爱好清 ...

  7. 新买的阿里云ECS基本安全运维

    1. 引言 购买了阿里云的ECS后,默认很多配置不够安全,我们需要进行一些维护操作. 2. 添加新用户 #不推荐用useradd,不会帮我们创建同名的用户主目录 adduser xxx # xxx为你 ...

  8. 实现调用阿里云API第二章——API调用实战(全球IP地址归属地查询)

    本篇将实现利用springboot实现阿里云API调用实战. 一.购买阿里云API https://market.aliyun.com/data?spm=5176.9502607.1387859.3. ...

  9. 阿里云日志服务SLS,打造云原生时代智能运维

    2021年10月21日,阿里云针对企业运维难题,在云栖大会为大家带来了一场<智能运维论坛>的主题演讲.在会上,阿里云资深技术专家.日志服务技术负责人简志提出"云原生时代,企业业务 ...

最新文章

  1. 如何通过一行代码下载B站视频?
  2. 汇总|SLAM常用linux命令,包括文件查找、查看文件大小、设置环境变量等
  3. 关于BCH交易规范排序(CTOR)的优缺
  4. Segment Routing — Overview
  5. java 自定义 operator_java8 自定义Collector
  6. 云计算体系结构中soa构建层_云计算的服务模式及技术结构
  7. 计算机系统库的管理及应用,计算机软件及应用嵌入式软件基础数据库管理系统.pptx...
  8. java 实现打印条形码_激光打印机与条码打印机打印不干胶标签哪个好?
  9. 2月28日 PCA降维,SVD压缩,中心化、归一化、标准化、k-l变换
  10. 初学STM32F205的库包搭建工程
  11. Camera IIC总线
  12. spring aop记录操作日志和错误日志
  13. 科幻文学入门指南(专业读者分享)
  14. obs听到了自己的回音_直播连麦过程中回声回音解决方式
  15. 由Yardi赞助的报告披露亚太房地产科技投资详情
  16. Spring加载时报错处理
  17. 有道云笔记迁移到Obsidian的方法(保留文件创建时间)
  18. php swoole 教程,PHP7安装Swoole详细教程
  19. Glide 加载矩形圆角图片
  20. 便利贴--17{移动端滑动模块}

热门文章

  1. 四线温度探头怎么接线_温度变送器接线详解
  2. maven伺服搭建_Maven私服搭建
  3. 原来awt是可以设置多个frame
  4. eigen之eigen中文文档
  5. win10+linux系统进入安全模式,Win10进入安全模式的方法
  6. python计算公式程序_小学生计算题的自动程序Python,生成,python
  7. 允许其他网络用户通过此计算机的internet连接来连_「Azure云」什么是Azure虚拟网络?...
  8. Django开发密码管理表实例【附源码】
  9. 发的楷体怎么写_孩子作业实在写不完,父母该怎么办?我直接给老师发信息
  10. js substring和substr的区别实例,一目了然