【Ansible】ansible-playbookの実行ログ残したい。そんな時の設定

Ansible

はじめに

ansible-playbookを実行した場合、デフォルトではログは記録されません。
作業証跡として残したい場合、ログを記録する必要があるため、なんらかの方法でログを記録する必要があります。
ログを残す方法にはいくつかの手法が考えられますが、私がベストだと考えたログ記録方法を記載します。

結論

  • コマンドごとにログを残す場合はANSIBLE_LOG_PATHを指定しよう
  • 固定のファイル名で自動でログを残す場合は、.ansible.cfg[defaults]log_pathを設定しよう
  • 個別のファイル名で自動でログを残す場合は、aliasを設定しよう

ログの残し方

  • terminalの設定でログを残す方法
  • ansible-playbookの結果をリダイレクトする方法
  • .ansible.cfgで設定を入れる方法

terminalの設定でログを残す方法

これはあまり説明することはないですが、teratermなどを利用している場合、端末の入力記録を実行ログとして残す機能があるため、それを利用するだけです。以下のリンクを見ていただければと
https://ttssh2.osdn.jp/manual/4/ja/menu/file-log.html

ansible-playbookの結果をリダイレクトする方法

これはshellの標準機能を利用するパターンです。
ansible-playbook playbook.yml > playbook.logのようにリダイレクタを利用する方法です。
ただし、ansible-playbookの結果をいちいちログファイルを経由して確認する必要があるため、少し不便です。
teeを使えば、ターミナル、ログファイル両方に出力されるため、一時的な手法としてはありでしょう。

.ansible.cfgで設定を入れる方法

これが本題です。
Ansibleには設定ファイルとして、ansible.cfgがありますが。この中にログ設定に関する設定があります。
設定ファイルの場所は以下で確認可能です。

  • ANSIBLE_CONFIG(環境変数)
  • ansible.cfg(現在のディレクトリ)
  • ~/.ansible.cfg(ホームディレクトリ直下)
  • /etc/ansible/ansible.cf

詳しくは以下のリンクを参照してください。
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file

ログに関する設定は以下のセクションに記載があります。
これを利用して、ログ出力の設定を行います。
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-log-path

ログ出力設定

ログの出力は以下の2パターンで行うことが可能です。

  1. コマンド入力ごとに行う場合
  2. ansible.cfgを設定する場合
コマンド入力ごとに行う場合

ANSIBLE_LOG_PATHを指定してあげることで、ログファイルを指定可能です。
毎回指定する必要があるため、忘れがちで強制力はありません。

ANSIBLE_LOG_PATH=/path/to/playbooklog.txt ansible-playbook playbook.yml
ansible.cfgを設定する場合

以下の設定を入れてあげればOKです。
ただし、一つのファイルに追記され続けるため、個別のplayログを参照したい時に少し不便です。

[defaults]
log_path=/path/to/playbooklog.txt

ログ出力設定(応用編)

上記の「1.」「2.」の設定でもログを取れるのですが、「1.」では毎回ANSIBLE_LOG_PATHを設定する必要があるため、忘れがちです。
「2.」では、ログ記録は自動ですが、単一のファイルに追記され続けます。
これらの不満を解消するために、以下のalias(今回はbash)を定義することで、ログが自動で記録され、毎回個別のファイルとして作成されるようになります。

alias ansible-playbook="source ~/.bashrc; mkdir -p ~/.ansible/logs/`date +'%Y%m%d'`; ANSIBLE_LOG_PATH=~/.ansible/logs/`date +'%Y%m%d'`/`date +'%Y%m%d%H%M%S'`.log ansible-playbook"

少しだけ解説すると、ansible-playbookコマンドをaliasで書き換えています。

  1. mkdirコマンドで~/.ansible/logs配下に日付フォルダを作成
  2. ANSIBLE_LOG_PATHで作成したフォルダ配下に日付+時分秒.logを指定
  3. ansible-playbookコマンドを発行

日付を取得するためにdateコマンドを発行していますが、aliasの時点で固定されてしまうため、先頭で毎回sourceでaliasを読み込んでいます。
この設定を行うことで、ansible-playbookコマンドを発行する毎に、日付+時分秒.logのファイル名でログが記録されます。

コメント