반응형
개요
AWX의 JOB Template Notification 기능은 Playbook 내 Task의 실패 여부와 상관없이 JOB 자체의 시작, 성공, 실패에 맞춰 알람을 보낸다.
즉, Playbook 내 Task 가 성공이든 실패이든 JOB 이 끝난다면 Success의 Status 정보를 가지고 알람을 보낸다는 말이다.(AWX JOB Template Notification은 여기를 참조)
따라서 Playbook Task가 성공하였는지 실패 하였는지에 대한 알람은 Elasticsearch에서 수집하는 AWX의 Log 를 통하여 알람을 보내는 방법을 생각해 보았다.(로그 수집 방법은 여기를 참조)
AWX에서 직접 Playbook TASK 결과에 대한 알람을 보내는 것이 좋지만 아직 방법을 찾지 못해 Log를 통한 번거러운 방법을 선택하였다.
그리고 Xpack을 사용하는 것이 아닌 Elastalert 를 사용하였다.
설정
TEST 환경
- 빠르게 JOB을 수행하고 로그 확인을 위하여 AWX windows host에 win_ping task의 playbook을 사용하였다.
> 07.win_ping.yml
---
- hosts: all
gather_facts: no
ignore_unreachable: yes
tasks:
- name: Example from an Ansible Playbook
win_ping:
- 또한 Credentials 항목을 의도적으로 설정하지 않음으로 "Host Unreachable" 이라는 Task Fail을 유도하였다.
Elasticsearch Query
- TEST 환경에 의해 수집된 로그중 Task가 실패 했을 시 "failed" 항목에 true로 표기 되며 이 query를 이용하여 elastalert rule을 작성 한다.
Elastalert Rule 작성
- Elastalert 의 "frequency" type을 사용하고 설치는 여기를 참조
- "awx*" index에 "failed : true" 라는 query 조건으로 1분의 시간동안(timeframe) 1번 이상의 이벤트(num_events) 발생 시 Slack를 통한 알림을 보내도록 rule을 작성하였다.
cat /etc/elastalert/rules/test.yaml
name: "AWX Playbook Task execution Failed."
type: frequency
index: awx*
num_events: 1
timeframe:
minutes: 1
filter:
- query:
query_string:
query: "failed : true"
query_key: "failed"
alert:
- "slack"
slack:
slack_webhook_url: "https://hooks.slack.com/services/*******************"
slack_username_override: "AWX-ElastAlert-Bot"
slack_channel_override: "#test-channel"
slack_emoji_override: ":robot_face:"
slack_msg_color: "danger"
slack_alert_fields:
- title: PLAYBOOK
value: "playbook"
short: true
- title: HOSTNAME
value: "host_name"
short: true
- title: EVENT_DATA_START
value: "event_data.start"
short: true
- title: EVENT_DATA_END
value: "event_data.end"
short: true
- title: EVENT_DISPLAY
value: "event_display"
short: true
- title: JOBID
value: "job"
short: true
- title: JOB_TASK
value: "event_data.task_action"
short: true
- title: JOB_TASK_COMMENT
value: "event_data.task"
short: true
- title: EVENT_DATA_MSG
value: "event_data.res.msg"
short: true
alert_text_type: "alert_text_only"
Slack 알림 결과
참고
- multiple filter
- awx task 성공 시 알람을 보내도록 하는 filter에 여러조건을 and로 처리
filter:
- query:
query_string:
query: "failed : false"
- query:
query_string:
query: "event_display.keyword : \"Host OK\""
- query:
query_string:
query: "host_name.keyword : *"
반응형
'Automation Tools > Ansible' 카테고리의 다른 글
ansible | [AWX] Local Script 실행 및 결과값 slack webhook 전송하기 (0) | 2022.07.04 |
---|---|
ansible | inventory 내 다른 host 변수 참조 (0) | 2022.06.27 |
ansible | [AWX] JOB Template 의 Schedule과 Notification (0) | 2022.06.20 |
ansible | [AWX] logstash(elasticsearch) 를 이용한 로그 수집 (0) | 2022.06.17 |
[Ansible] VMware ESXi 사용하기 (0) | 2022.05.20 |