我在使用ec2动态库存通过ansible设置AWS CloudWatch警报时发现了一个特定的问题。
我已成功设置aws-script-mon以监控我的计算机上的磁盘和RAM使用情况。
此外,我还设法使用ansible ec2_metric_alarm模块设置RAM使用率警报。
我目前面临的问题是,在为磁盘使用设置警报时,需要Filesystem
维度参数,但不会在ec2 dynamic inventory变量中返回。
我的部分计算机的文件系统设置为/dev/xvda1
,而其他计算机的设置类似于:/dev/disk/by-uuid/abcd123-def4-...
。
我目前的解决方案"如下:
- name: "Disk > 60% (filesystem by fixed uuid)"
ec2_metric_alarm:
state: present
name: "{{ ec2_tag_Name }}-Disk"
region: "{{ ec2_region }}"
dimensions:
InstanceId: '{{ ec2_id }}'
MountPath: "/"
Filesystem: '/dev/disk/by-uuid/abcd123-def4-...'
namespace: "System/Linux"
metric: DiskSpaceUtilization
statistic: Average
comparison: ">="
threshold: 60.0
unit: Percent
period: 300
evaluation_periods: 1
description: Triggered when Disk utilization is more than 60% for 5 minutes
alarm_actions: ['arn:aws:sns:us-west-2:1234567890:slack']
when: ec2_tag_Name in ['srv1', 'srv2']
- name: "Disk > 60% (filesystem /dev/xvda1)"
ec2_metric_alarm:
state: present
name: "{{ ec2_tag_Name }}-Disk"
region: "{{ ec2_region }}"
dimensions:
InstanceId: '{{ ec2_id }}'
MountPath: "/"
Filesystem: '/dev/xvda1'
namespace: "System/Linux"
metric: DiskSpaceUtilization
statistic: Average
comparison: ">="
threshold: 60.0
unit: Percent
period: 300
evaluation_periods: 1
description: Triggered when Disk utilization is more than 60% for 5 minutes
alarm_actions: ['arn:aws:sns:us-west-2:1234567890:slack']
when: ec2_tag_Name not in ['srv1', 'srv2']
这两项任务之间的唯一区别是Filesystem
维度和when
条件(in
或not in
)。
有什么方法可以获得Filesystem
值,这样我可以像使用ec2_id
一样舒服地使用它们吗?我最关心的是,我必须在创建新机器时查看文件系统值,并根据该值处理机器列表。
答案 0 :(得分:1)
我找不到一个很好的解决方案,最终写了一个bash脚本来生成一个包含UUID变量的YAML文件。
- script: ../files/get_disk_uuid.sh > /disk_uuid.yml
脚本不理想。有一天,我想写一个完成同样任务的模块。
#! /bin/bash
# get_disk_uuid.sh
echo '---'
disk_num=0
for entry in `blkid -o export -s LABEL -s UUID`; do
if [[ $entry == LABEL* ]];
then
label=${entry: 6}
elif [[ $entry == UUID* ]];
then
uuid=${entry: 5}
fi
if [ $label ] && [ $uuid ]; then
printf $label: | tr - _
printf ' '$uuid'\n'
label=''
uuid=''
elif [ $uuid ]; then
printf disk$disk_num:
printf ' '$uuid'\n'
label=''
uuid=''
fi
done