运行在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 Android中比较字符串   java Month二月在下面的程序中被解析为'33'。如何修复?   用于在方法调用中显式指定泛型参数的Javasyntax   java 安卓。操作系统。NetworkOnMainThread尝试与jsoup 安卓连接时出现异常   java Spring引导找不到jsp视图   java如何访问注释中的属性值?   反射我可以使用isAssignableFrom检查C1是Java中C2的子类型吗?   java如何在selenium中从HTTP服务器传递图像URL   java导入失败。hibernate中的sql   Java中的“断开”while循环   java如何向Spark数据集添加映射列?   java应该在中部署消息驱动bean。耳文件?   java为何如此悲观。在springboot JPA中写入不起作用?   web服务如何在Java中高效地管理文件系统上的文件?   Java验证日期条目   java错误:在AWS RDS上找不到适合数据库的驱动程序   java如何将OBJ文件面定义传递给openGL