mito’s blog

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

「Ansible × Zabbix」通信断が復旧したときのログ取得を自動化する

概要

ZabbixでNW機器を監視し、通信断が復旧したらAnsibleでログを自動取得します。
NW機器はcsrとし、show running-configとshow logを取得します。

環境

Software Versions
AWX(Ansible) 13.0.0
Zabbix 5.0

1.Zabbixの構築

先日の記事の環境を使用します。
監視対象のNW機器も追加されている状態です。
https://mitomito.hatenablog.jp/entry/2020/06/20/070000

なお、監視対象のNW機器csr-1にはSSH接続出来るようにしておきます。

2.AWXの構築

こちらの記事を参考に構築しました。
https://qiita.com/mina-stop/items/71266d74d102850eb4c0

また、テンプレートを作成する上で以下の問題にあたりますので、対応します。
https://sky-joker.tech/2018/03/21/awx%E3%81%ABvarlibawxprojects%E3%81%8C%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6/

  • 再インストール結果
    冪等性(べきとうせい)により、特に問題なくインストールされます。
PLAY RECAP *********************************************************************  
localhost : ok=16 changed=5 unreachable=0 failed=0 skipped=86 rescued=0 ignored=0

3.AWX(Ansible)の設定

2020/07/01追記 本記事はAnsible側に監視対象機器のIPアドレスを設定しています。
ワークフローのサーベイを使うことにより、ZabbixからIPアドレスを渡せます。
「Ansible × Zabbix」通信断復旧時の自動ログ取得を改善した - mito’s blog

Playbookやテンプレート等を作成します。

  • Playbookの作成
     以下のコマンドを実行します。
    • show running-config
    • show log
  • プロジェクトの作成
  • インベントリの作成
  • 認証情報の設定
  • ジョブテンプレートの作成
  • APIの確認
    Zabbixのアクションに設定するため、ジョブテンプレートIDを確認します。
    • http://「IPアドレス」/api/v2/job_templates/「ジョブテンプレートID」
    • ジョブテンプレートIDは以下から確認できます。 今回のIDは「9」です。

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


APIの参考情報
https://docs.ansible.com/ansible-tower/3.7.1/html_ja/towerapi/

4.Zabbixの設定

アクションの「復旧時の実行内容」に、ジョブテンプレートを実行するためのコマンドを記載します。

  • 実行内容のタイプ「リモートコマンド」
  • ターゲットリストは現在のホストにチェックを入れる
  • タイプ「カスタムスクリプト
  • 次で実行「Zabbixサーバー」
  • コマンド
curl -f -k -H 'Content-Type: application/json' -X POST --user '「AWXログインID」:「AWXログインパスワード」' http://「IPアドレス」/api/v2/job_templates/「ジョブテンプレートID」/launch/


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

5.Ansible × Zabbix の連携

死活監視の間隔を10秒にし、監視対象のcsr-1を再起動させます。 Zabbixが通信断、および復旧を検知したあと、アクション(右ポップアップのリモートコマンド)が実行されます。

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


AWXでは、対象のジョブテンプレートが実行されています。

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


show logの結果から、restartのログが確認できます。

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

雑記

インベントリやPlaybookの内容の工夫や、そもそもログを見やすくしたいなどAnsible側のスッキリさせたい設定は盛りだくさんですが、次はジョブテンプレートの結果をRedmineのチケットに追記してみたい。たい。いろいろ組み込みたい。