Ansible任务写入本地日志文件

分享于 

4分钟阅读

互联网

  繁體 雙語

问题:

使用 Ansible,我希望能够编写运行命令到本地( 例如 )的任务的sysout 。 在托管服务器) 日志文件上。 目前,我只能使用这样的任务来完成这里任务:


- name: Run my command


 shell: <command> <arg1> <arg3>.. . |tee -a <local log file>



这样做的原因是需要很长时间才能完成( 例如 。 在完成输出之前,我们不能等待,并且希望在执行过程中收集输出。

在执行过程中,是否有任何"ansible"方法重定向到本地日志文件,而不使用管道?


回答 1:

在第一个任务中需要使用 register,现在可以创建第二个任务,将输出写入本地文件


- name: shell command


 shell: my_shell_command


 register: myshell_output


- name: copy the output to a local file


 copy:


 content:"{{ myshell_output.stdout }}"


 dest:"/tmp/hello.txt"


 delegate_to: localhost




回答 2:

默认情况下,Ansible默认值是 task,它是让任务完成和在结束时输出。 它有一个异步特性,但是你需要查询它在你的脚本中所做的工作。

相反,应该考虑使用初始化脚本功能来。 你标记了这个 Linux,这样一个具有鲁棒日志记录的事件在systemd单元中非常容易。

vmstat定期向stdout输出数据,并进行简单的示例。 我给出了用于记录vmstat输出的silliest方法: /etc/systemd/system/dumbstat.service


[Unit]


Description=Dumb vmstat wrapper service example


Documentation=https://serverfault.com/questions/958952/ansible-task-write-to-local-log-file



[Service]


Type=oneshot


ExecStart=/usr/bin/vmstat 5 12


StandardOutput=journal



[Install]


WantedBy=multi-user.target



Type=oneshot 将在开始状态中等待,直到进程退出。 如果希望更多异步 fork 和继续行为,你可能需要另一种类型。

标准输出被捕获并通过常用工具获取。


root@sf-958952:/var/log# systemctl status dumbstat


● dumbstat.service - Dumb vmstat wrapper service example


 Loaded: loaded (/etc/systemd/system/dumbstat.service; disabled; vendor preset: enabled)


 Active: activating (start) since Wed 2019-03-20 14:49:41 UTC; 7s ago


 Docs: https://serverfault.com/questions/958952/ansible-task-write-to-local-log-file


 Main PID: 3103 (vmstat)


 Tasks: 1 (limit: 4401)


 CGroup:/system.slice/dumbstat.service


 └─3103/usr/bin/vmstat -w 5 12



Mar 20 14:49:41 sf-958952 systemd[1]: Starting Dumb vmstat wrapper service example...


Mar 20 14:49:41 sf-958952 vmstat[3103]: procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------


Mar 20 14:49:41 sf-958952 vmstat[3103]: r b swpd free buff cache si so bi bo in cs us sy id wa st


Mar 20 14:49:41 sf-958952 vmstat[3103]: 7 0 0 3104416 70260 417228 0 0 208 36 40 132 1 1 98 0 0


Mar 20 14:49:46 sf-958952 vmstat[3103]: 0 0 0 3107200 70260 417260 0 0 0 0 40 130 1 0 99 0 0



你还可以通过查询systemd日志来筛选输出: journalctl _SYSTEMD_UNIT=dumbstat.service

如果你想要本地文件或者将它的转发到某个位置,则默认情况下将日志转发到 syslog 。

Amusingly和更高版本可以直接登录到带有 StandardOutput=append:的文件,但这对于CentOS或者Ubuntu来说是太新了。

所有这些都与波塞尔无关。 你可以使用 template MODULE 部署这样的单元,并使用 systemd 模块启动它。



文件  log  LOC  Local  任务  ANSI  
相关文章