如何在 Ansible 日志文件中附加日期和时间戳?

问题描述 投票:0回答:3

如何在 Ansible 日志文件中附加日期和时间戳?

目前我有它

log_path=/var/ansible-playbooks/ansible.log

ansible.cfg

每次运行时,我都需要将此日志与时间戳一起保存到文件中

ansible-20160808142400.log
ansible
3个回答
3
投票

使用

ANSIBLE_LOG_PATH
环境变量。

执行剧本如下:

ANSIBLE_LOG_PATH=/tmp/ansible_$(date "+%Y%m%d%H%M%S").log ansible-playbook myplabook.yml

或者,您可以编写自己的回调插件,它将记录您想要的内容以及您想要的位置。


2
投票

如果您在基于 UNIX 的系统上运行,您可以利用 inode 的行为。在 ansible.cfg 中定义日志路径。我在 $HOME/.ansible 中创建了一个目录。

log_path = $HOME/.ansible/log/ansible.log

在您的剧本中创建前置任务部分并包含以下任务:

- name: Create the log file for this run
  shell: /bin/bash -l -c "mv {{ lookup('env', 'HOME') }}/.ansible/log/ansible.log  {{ lookup('env', 'HOME') }}/.ansible/log/ansible.log-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  delegate_to: localhost
  become: yes
  become_user: "{{ lookup('env', 'USER') }}"

当 ansible 开始运行 playbook 时,它会创建日志文件并开始写入。然后日志文件被重命名为 ansible.log-YYYYmmddHHMMSS 并且 ansible 进程继续写入它,因为即使日志文件的名称已更改,与之关联的 inode 也没有更改。


0
投票

更进一步......

假设我想要执行上述操作,将 shell 行转换为变量,然后使用邮件模块引用它以发送所述旋转日志文件的附加副本? Ansible 能够遵循它吗?

最终,我目前正在编写一个基于环境变量的静态 ANSIBLE_LOG_FILE,附加/邮寄它,并在运行后删除它,以便在下次执行时为干净的文件让路。我更愿意存档所述文件而不是删除它。

© www.soinside.com 2019 - 2024. All rights reserved.