如何将日志文件从多台主机复制到主机目录,该文件由使用ansible的源主机ip命名?

时间:2019-07-31 09:18:49

标签: ansible

我需要分析来自多个主机的Nginx日志文件。

首先,我想将它们复制到主机目录。 例如,我想将nginx错误日志文件从6台主机复制到目标主机目录。

6个主机ips为192.168.0.2-192.168.0.7。 Nginx错误日志路径为/var/log/nginx/nginx_error.log。我想将它们复制到目标主机192.168.0.10中的/ var / log / nginx_error目录。每个文件都由源主机ip命名。如何使用Ansible编写剧本?

[serverB]
192.168.0.10
[serverA]
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5

- hosts: serverB
  tasks:    
   - name: Copy Remote-To-Remote (from serverA to serverB)
     synchronize: src=/var/log/nginx/nginx_error.log dest=/var/log/nginx_error/
     delegate_to: serverA

问题是我不知道如何使用源IP地址命名dest文件?

1 个答案:

答案 0 :(得分:1)

我没有一个优雅的解决方案。一些解决方法。要使用源ip命名目标文件,可以使用ansible定义的ansible_hostnameinventory_hostname变量。 执行之前,请确保已在ansible控制器中创建了/tmp/nginx_logs/目录。

---
- name : Copy Remote
  hosts: serverA, serverB
  tasks:
  - name: Copy the files from the Source Machine(serverA) to Ansible Controller
    synchronize:
      mode: pull
      src: /var/log/nginx/nginx_error.log
      dest: "/tmp/nginx_logs/test_{{ ansible_hostname }}.txt"
    when: "inventory_hostname in groups['serverA']"

  - name: Copy log files to the destination server
    copy:
      src: /tmp/nginx_logs/
      dest: /var/log/nginx_error/
    when: "inventory_hostname in groups['serverB']"