运行在aws lambda中的小型监视工具

awslambdamonitor的Python项目详细描述


AWS Lambda监视器

aws lambda monitor是一个运行在aws lambda中的小型监视工具。 该工具由cloudwatch计划的任务定期触发,或者 通过电子邮件触发的事件按需发送。用这个工具你可以监视 免费提供服务器上的服务并接收警报 有问题时发邮件。

为什么要创建另一个监视工具?

创建此工具(而不是使用 现有的许多监控工具是利用 AWS Lambda pricing model到 永远免费监控。aws提供37天的128mb内存lambda 每月执行。与ec2自由层不同,lambda自由层 不会在第一年后过期。

工具使用电子邮件输入的原因(触发监视运行) 输出(警告问题)是AWS SES pricing model允许1000封电子邮件 每月。aws lambda的另一个接口是AWS API Gateway,它需要花费 每月3.50美元。

如何构建awslambdamaonitor并将其上载到aws

构建并打包virtualenv

要构建包含virtualenv的zip文件,请启动amazon linux EC2实例(因为这是AWS lambda函数运行的环境 在中)。按如下所示创建zip文件

sudo yum groupinstall 'Development Tools'
sudo yum install libyaml-devel libffi-devel openssl-devel
virtualenv build-aws-lambda-monitor-environment
build-aws-lambda-monitor-environment/bin/pip install pyOpenSSL paramiko ecdsa pycrypto python-whois PyYAML ndg-httpsclient pyasn1 requests
pushd build-aws-lambda-monitor-environment/lib/python2.7/dist-packages/
zip -r ~/awslambdamonitor.zip *
popd

pushd build-aws-lambda-monitor-environment/lib64/python2.7/dist-packages/
zip -r ~/awslambdamonitor.zip *
popd

rm -rf build-aws-lambda-monitor-environment

scp从amazon linux机器获取文件

从ec2实例下载压缩后的virtualenv并 销毁实例。

将显示器添加到压缩的virtualenv

zip --junk-paths awslambdamonitor.zip awslambdamonitor/monitor.py

将配置添加到压缩的virtualenv

zip --junk-paths awslambdamonitor.zip awslambdamonitor/monitor.yaml

将包发布到aws lambda并设置cloudwatch调度作业

AWS_ACCOUNT_ID=123456789012
AWS_PROFILE=myprofilename
AWS_REGION=us-west-2
aws lambda create-function --function-name monitor --runtime python2.7 --timeout 30 --role arn:aws:iam::$AWS_ACCOUNT_ID:role/lambda_basic_execution --handler monitor.monitor --zip-file fileb://awslambdamonitor.zip  --profile $AWS_PROFILE --region $AWS_REGION
aws lambda invoke --function-name monitor --log-type Tail --payload '{"account": "123456789012","region": "us-east-1","detail": {},"detail-type": "Scheduled Event","source": "aws.events","time": "1970-01-01T00:00:00Z","id": "cdc73f9d-aea9-11e3-9d5a-835b769c0d9c","resources": ["arn:aws:events:us-east-1:123456789012:rule/AWSLambdaMonitor5Minutes"]}'  --profile $AWS_PROFILE --region $AWS_REGION output.txt

aws lambda update-function-code --function-name monitor --zip-file fileb://awslambdamonitor.zip --profile $AWS_PROFILE --region $AWS_REGION

aws events put-rule --name AWSLambdaMonitor5Minutes --schedule-expression 'rate(5 minutes)' --state ENABLED --profile $AWS_PROFILE --region $AWS_REGION
aws events put-rule --name AWSLambdaMonitorDaily --schedule-expression 'rate(1 day)' --state ENABLED --profile $AWS_PROFILE --region $AWS_REGION

aws lambda add-permission --function-name monitor --statement-id AWSLambdaMonitor5MinutesID --action 'lambda:monitor' --principal events.amazonaws.com --source-arn arn:aws:events:$AWS_REGION:$AWS_ACCOUNT_ID:rule/AWSLambdaMonitor5Minutes --profile $AWS_PROFILE --region $AWS_REGION
aws lambda add-permission --function-name monitor --statement-id AWSLambdaMonitorDailyID --action 'lambda:monitor' --principal events.amazonaws.com --source-arn arn:aws:events:$AWS_REGION:$AWS_ACCOUNT_ID:rule/AWSLambdaMonitorDaily --profile $AWS_PROFILE --region $AWS_REGION

aws events put-targets --rule AWSLambdaMonitor5Minutes --targets '{"Id" : "AWSLambdaMonitor5Minutes-monitor", "Arn": "arn:aws:lambda:$AWS_REGION:$AWS_ACCOUNT_ID:function:monitor"}' --profile $AWS_PROFILE --region $AWS_REGION
aws events put-targets --rule AWSLambdaMonitorDaily --targets '{"Id" : "AWSLambdaMonitorDaily-monitor", "Arn": "arn:aws:lambda:$AWS_REGION:$AWS_ACCOUNT_ID:function:monitor"}' --profile $AWS_PROFILE --region $AWS_REGION

通过更新和上传来迭代代码

如果要扩展或修改监视器,可以更新正在运行的 这样的代码

# Update the file in the zip archive
zip --junk-paths awslambdamonitor.zip awslambdamonitor/monitor.py

# Upload the new zip file
aws lambda update-function-code --function-name monitor --zip-file fileb://awslambdamonitor.zip --profile $AWS_PROFILE --region $AWS_REGION

如果要更改配置

# Update the file in the zip archive
zip --junk-paths awslambdamonitor.zip awslambdamonitor/monitor.yaml

# Upload the new zip file
aws lambda update-function-code --function-name monitor --zip-file fileb://awslambdamonitor.zip --profile $AWS_PROFILE --region $AWS_REGION

测试事件

下面是一个可以在aws lambda web控制台中使用的示例事件 测试监视器

{
  "account": "123456789012",
  "region": "us-east-1",
  "detail": {},
  "detail-type": "Scheduled Event",
  "source": "aws.events",
  "time": "1970-01-01T00:00:00Z",
  "id": "cdc73f9d-aea9-11e3-9d5a-835b769c0d9c",
  "resources": [
    "arn:aws:events:us-east-1:123456789012:rule/AWSLambdaMonitor5Minutes"
  ]
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
基于Java的遗传算法确定最优交易行为   java改型2.0无法解析Json嵌套对象   java在数组中查找最大额定值(数字),我们不能跳过数组中的一个或多个连续数字   java在spring boot中从命令行设置活动概要文件和配置位置   JavaAxis2:传输错误:404错误:未找到帮助理解其真正含义   java使用Play2WAR和Play2.2.1   java理解函数运算符:Lambda   在代理java后面读取https网页数据   java应用程序。Android单元测试中的类mock   java为什么onClick布局XML引用的方法需要是公共的?   从SMTLIB2文件解析的java显示声明   java重写给定的类以使用组合而不是继承   HTMLUnit和Java:NoSuchMethodException:createDefaultSSLContext()   java如何使用Spring和ThymeLeaf从前端正确更新后端中的对象?   来自init()Java的方法调用   使用cellrendering从数据库向JTable动态添加数据后,java无法使用JTable执行排序操作   java Android Studio 1.5.1。渲染错误(浮动操作按钮)   web服务如何使用UsenameToken和PasswordDigest为JAVA中的SOAP客户端附加wsse安全头   java为什么要在局部变量和myApplicationClass中同时删除“ArrayList.remove”?