Cron CloudWatch监控脚本亚马逊Linux上的错误AMI:在标量chomp中使用未初始化的值$ data_value

问题描述:

我按照指令here和配置的cloudwatch监控脚本通过我的实例上的cron作业运行。脚本运行,但我不断收到邮寄给我下面的错误(在MAILTO地址在crontab文件):

mon-put-instance-data.pl --mem-util --mem-used-incl-cache-buff --mem-used --mem-avail --aggregated --auto-scaling --from-cron 
Use of uninitialized value $data_value in scalar chomp at /home/ec2-user/aws-scripts-mon/CloudWatchClient.pm line 137 

我使用的是IAM角色,而不是证书文件和角色拥有所有权限在上面的链接中提到。

进行故障诊断时,我发现:

  1. 将作业提交数据的CloudWatch和我确认,我可以看到在CloudWatch的控制台中的所有指标。
  2. 有在/ var没有错误/ log/messages中
  3. 如果我与--verbose标志手动运行该脚本,我得到一个成功的消息,以及:

print() on closed filehandle MDATA at CloudWatchClient.pm line 167. print() on closed filehandle MDATA at CloudWatchClient.pm line 167. print() on closed filehandle MDATA at CloudWatchClient.pm line 167. MemoryUtilization: 15.9675544623621 (Percent) MemoryUsed: 1275.01171875 (Megabytes) MemoryAvailable: 6710.00390625 (Megabytes) print() on closed filehandle MDATA at CloudWatchClient.pm line 167. No credential methods are specified. Trying default IAM role. Using IAM role <xxxx-prod-WebServerRole-1891EV5KJYJ49> Endpoint: https://monitoring.eu-west-1.amazonaws.com Payload: { /*Removed for brevity*/ } Received HTTP status 200 on attempt 1 Successfully reported metrics to CloudWatch. Reference Id: c44c28ff-63e7-11e7-903d-350b8f4c0dae

的错误是间歇但常规 - 我在12:30 PM,13:21 PM,14:02 PM,14:48 PM,15:16 PM收到电子邮件

不确定发生了什么事?

您可能正在同时运行两个mon-put-instance-data.pl命令。 CloudWatchClient.pm以一种方式读取和写入临时文件,如果同时运行多个副本,该方式可能会中断。破损只会是零星的,因为它取决于比赛的确切顺序。

的一个解决办法是使用flock在cron命令运行mon-put-instance-data.pl时,确保互斥:

flock -w 30 /tmp/mon-put-instance-data.lockfile mon-put-instance-data.pl --mem-util --mem-used-incl-cache-buff --mem-used --mem-avail --aggregated --auto-scaling --from-cron