mito’s blog

IT技術メインの雑記。思い立ったが吉日。

「Ansible × Zabbix」通信断復旧時の自動ログ取得をREST APIで改善する

概要

ZabbixでNW機器を監視し、通信断が復旧したらAnsibleでログを自動取得します。
昨日の記事では、Ansible側に監視対象機器のIPアドレスを設定しており、使いまわすような設定ではありませんでした。
「Ansible × Zabbix」通信断が復旧したときのログ取得を自動化する - mito’s blog

今回はそこを改善し、IPアドレスを引数として渡すことで複数の監視機器で使いまわせる設定にします。
主にAWX(Ansible)のREST APIがメインになります。

環境

Software Versions
AWX(Ansible) 13.0.0
Zabbix 5.0

ベースの構築/設定

昨日の記事を参照してください。
「Ansible × Zabbix」通信断が復旧したときのログ取得を自動化する - mito’s blog

1.AWXの設定

前回との差分を記載します

  • Playbookの作成
---
- hosts: "{{ host_name }}"    #サーベイで入力する
  gather_facts: no

  tasks:
    - name: show command
      ios_command:
        commands:
          - show running-config
          - show log
      register: result

    - name: debug
      debug:
        msg: "{{  result.stdout_lines  }}"


  • ワークフローの作成
    • サーベイに以下を追加します。

      • プロンプトに「HOST_NAME」、回答の変数名に「host_name」、回答タイプに「テキスト」を設定
      • プロンプトに「HOST_IP」、回答の変数名に「ansible_host」、回答タイプに「テキスト」を設定 f:id:mst-it:20200701024055j:plain
    • ワークフロビジュアライザーで作成したテンプレートを追加します。


  • REST APIの設定/確認
    • 作成したワークフローのIDを確認します。対象のワークフローをクリックした後のURLに含まれます。今回のIDは「10」です。

      f:id:mst-it:20200701031252j:plain

    • ワークフローのAPIをたたく際、追加変数が利用できるように設定を変えます。
      以下のリンクにて、"ask_variables_on_launch"trueに変更し、PUTを選択します。
      http://「IPアドレス」/api/v2/workflow_job_templates/10/

      f:id:mst-it:20200701022611j:plain

2.Zabbixの設定

アクションのコマンド設定が前回と変わります。

  • コマンド
curl -f -k -H 'Content-Type: application/json' -X POST --user '「AWXログインID」:「AWXログインパスワード」' http://「IPアドレス」/api/v2/workflow_job_templates/ワークフローID」/launch/ -d "{\"extra_vars\": {\"host_name\":\"{HOST.HOST}\",\"ansible_host\":\"{HOST.IP}\"}}"
  • {HOST.HOST}
    • アクションを起動(障害検知)したホストのホスト名を格納しているマクロです。
  • {HOST.IP}
    • アクションを起動(障害検知)したホストのIPアドレスを格納しているマクロです。

3.Ansible × Zabbix の連携

監視対象のcsr-1を再起動させます。
Zabbixが通信断、および復旧を検知したあと、アクションが実行されます。ここまでは前回と同じです。

f:id:mst-it:20200701024616j:plain

AWXでは、対象のワークフローが実行されています。
追加変数も正常に引き渡されていることが確認できます。

f:id:mst-it:20200701024628j:plain

雑記

ひとまず満足。。。
雨が続いて走れないのでブログを書く。