[小ネタ]no_logで地味な節約術


概要

完全に小ネタです。
AWXもしくはAnsible Towerでtemplateモジュールを用いるとファイルの差分がログに出力されます。
なので、templateの使用頻度やtemplateのテキスト量に比例してログ量も増えます。
ログ量が増えるとDBの容量も消費するし、実行結果を表示するI/Oも増えます。
これを抑制するために、no_logを用います。
通常は機密情報を非表示にするために用いますが、上記のような理由のようにログ出力を抑えたい場合にも用いることができます。
ansible.cfg、play、taskのそれぞれで設定できますが、いざという時のためにデバックできるように個人的にはtask単位が望ましいと思います。

ansible.cfg
[defaults]
host_key_checking=False
retry_files_enabled=False
interpreter_python="/usr/bin/env python3"
timeout=10

[ssh_connection]
retries=6
playbook.yml
---
- name: No log
  hosts: localhost
  connection: local
  gather_facts: False
  # play全体の出力を抑制したい場合
  # no_log: True
  tasks:
    - template:
        src: "./template.j2"
        dest: "/tmp/template"
        mode: "u=r,g=r,o="
      become: yes
      # 特定のタスクのみを抑制する場合
      # no_log: yes

テンプレートの内容は何でもよい。
下記は実際に使われているrsyslogの設定ファイルになります。

template.j2
$template mytemplate, "%timegenerated% %hostname% %programname% [%syslogpriority-text%] %msg%\n"
*.info;mail.none;authpriv.none;cron.none                /var/log/messages;mytemplate
cron.*                                                  /var/log/cron;mytemplate
local7.*                                                /var/log/boot.log;mytemplate
authpriv.*                                              /var/log/secure;mytemplate

実行結果に↑のテンプレートの内容(ログレベルはNormal)が出力されます。
既存のファイルを上書きする場合は、その差分が出力されます。
下記は新規ファイルのため、全行が出力されます。
なお、差分がない場合は出力されません

実行結果(no_log
PLAY [No log] ******************************************************************
TASK [template] ****************************************************************
--- before
+++ after: /var/lib/awx/.ansible/tmp/ansible-local-1679g0oolph1/tmpm03q6ezu/template.j2
@@ -0,0 +1,5 @@
+$template mytemplate, "%timegenerated% %hostname% %programname% [%syslogpriority-text%] %msg%\n"
+*.info;mail.none;authpriv.none;cron.none                /var/log/messages;mytemplate
+cron.*                                                  /var/log/cron;mytemplate
+local7.*                                                /var/log/boot.log;mytemplate
+authpriv.*                                              /var/log/secure;test
changed: [localhost]
PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

テンプレートの内容が出力されません。

実行結果(no_log
PLAY [No log] ******************************************************************
TASK [template] ****************************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

あとがき

ログ出力を抑えるは他にもありますので、必要に応じてご利用くださいませ。

  • display_skipped_hosts・・・スキップタスクの表示/非表示
  • display_ok_hosts・・・okタスクの表示/非表示
  • display_args_to_stdout・・・各タスクへの引数の表示/非表示