使用ec2标签在ansible上创建度量标准警报

时间:2014-06-24 14:19:45

标签: amazon-web-services amazon-ec2 ansible

我正在尝试为使用ansible脚本启动的每个新实例定义一个警报。 使用时很容易实现:

- name: Create CPU utilization metric alarm ec2_metric_alarm: state: present name: "cpu-low" metric: "CPUUtilization" statistic: Average comparison: ">=" threshold: 80.0 unit: "Percent" period: 300 evaluation_periods: 1 description: "It will be triggered when CPU utilization is more than 80% for 5 minutes"

请注意,我使用 cpu-low 作为警报名称。这不是我想要的,因为我可以有多个实例触发该警报。因此,我想使用我不知道如何访问的ec2标记'Name'

我试图使用:

- name: List resource tags local_action: ec2_tag resource=XYZ state=list tags: [metric-alarms]

但是这需要我也没有的resourceID。 是否可以在ansible脚本上获取ec2标签?

2 个答案:

答案 0 :(得分:5)

这是我提出的在警报名称上使用实例名称的任务:

- name: Get instance ec2 facts
  action: ec2_facts
  register: ec2_facts

- name: Get resource tags from ec2 facts
  sudo: false
  local_action: ec2_tag
                resource={{ec2_facts.ansible_facts.ansible_ec2_instance_id}}
                region=us-east-1 state=list
  register: result

- name: Create CPU utilization metric alarm
  sudo: false
  local_action: ec2_metric_alarm
                state=present
                region=us-east-1
                name="{{result.Name}}-cpu-utilization"
                metric="CPUUtilization"
                statistic=Average comparison=">="
                threshold=80.0
                unit="Percent"
                period=300
                evaluation_periods=1
                description="It will be triggered when CPU utilization is more than 80% for 5 minutes"
                dimensions="InstanceId"="{{ec2_facts.ansible_facts.ansible_ec2_instance_id}}"
                alarm_actions=arn:aws:sns:us-east-1:123412341234:My_SNS_Notification
                ok_actions=arn:aws:sns:us-east-1:123412341234:My_SNS_Notification

答案 1 :(得分:1)

the EC2 inventory plugin标签比所有register杂耍更方便,但它也有一些注意事项。使用插件,标记被指定为具有ec2_tag命名空间的主变量。您的警报定义可能如下所示:

- name: Set up metric alerts
  hosts: 127.0.0.1
  connection: local

  tasks:
    - name: Create CPU utilization metric alarm
      ec2_metric_alarm:
      args:
        state: present
        name: '{{ hostvars[item].ec_tag_Name }}'
        metric: CPUUtilization
        statistic: Average
        comparison: ">="
        threshold: 80.0
        unit: Percent
        period: 300
        evaluation_periods: 1
        description: >
          Triggered when CPU utilization is more than
          80% for 5 minutes
      with_items: groups['your_targets']

当您执行普通的远程播放(而不是local_action)时更加容易,因为您通常不需要hostvars[item]循环播放,您只需参考当前正在配置的主机为ec2_tag_Name

现在的缺点:作为库存插件,AFAIK在单个Ansible运行期间无法刷新内存中的数据。这意味着当使用Ansible进行配置时,如果您通过播放启动新的EC2实例,ec2_tag_Foo变量将无法在后续播放中使用,直到您再次运行ansible-playbook,并且可能执行ec2.py --refresh-cache更新本地缓存的数据。这很不幸。我希望库存插件和ec2_facts模块更加内聚。