Ansible切割日志使用Rsync同步

Rsync设置

Rsync服务端
vim /etc/rsyncd.conf
uid = root
gid = root
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
secrets file = /etc/rsyncd.secrets
auth users = root  # 这个授权的用户名,是给rsync指定的用户名,可以和server当前的系统用户名相同,也可以不同。这里测试用的
是和系统用户名相同的。
[log]  # log模块名,可以随意取,但是在做同步指令操作的时候,cms就是目标机器server上的根目录,这里,设定的这个根目录/LogBak 。
path = /LogBak
read only = no

echo "root:rootlogpasswd" && chmod 600 /etc/rsyncd.secrets #写入rsync连接密码,格式为 用户名:密码
/usr/bin/rsync --daemon &&  echo "/usr/bin/rsync --daemon" >> /etc/rc.Local &&  chmod +x /etc/rc.local # 启动并加入开机自启

Rsync客户端
echo "export RSYNC_PASSWORD=rootlogpasswd" >> /etc/profile && source /etc/profile #将密码写入变量
传输文件命令
rsync 文件路径  root@192.168.10.27::log

示例: 传输文件,并生成本机客户端ip地址为文件路径存储
rsync -avz /var/log/*  root@192.168.10.27::log/$(ifconfig $( ip route show | awk '/default/ { print $5 }' ) |sed -n 2p |awk -F ' ' '{print$2}' |sed 's/.*://')/  

Ansible设置

host文件

在host文件里直接设置日志路径等其他变量,待会直接在yaml文件中调用


cat host

[all:vars]
#ansible_ssh_private_key_file=/root/yangshuo
ansible_ssh_port=22
ansible_ssh_user=root

[zzfwzyk]
192.168.1.128  ansible_host=192.168.1.128    nginx_log_dir=/var/web/nginx/logs     nginx_pid=/var/web/nginx/logs   tomcat_log_dir=  tomcat_pid=

Yaml文件
cat log.yaml


---

- hosts: "{{ host }}"
  gather_facts: No
  tasks:
  ########  设置变量 ###################
    - name: add time_log
      blockinfile:
        path: /etc/bashrc
        marker_begin: "start logvariate"
        marker_end: "end logvariate"
        insertafter: "End of file"
        state: present
        block: |
          export RSYNC_PASSWORD=rootlogpasswd
          export TIME_LOG=$(date -d "-1 day"  +%Y-%m-%d)
          export NGINX_LOG_DIR={{ nginx_log_dir }}
          export TOMCAT_LOG_DIR={{ tomcat_log_dir }}
          
  ######## 生效变量   #####################
    - name: source profile
      shell: |
        source /etc/bashrc
      args:
        executable: /bin/bash
  
  ######## 切割nginx规则 #################
    - name: create nginxlog rule
      shell: touch /etc/logrotate.d/nginxlog
      args:
        executable: /bin/bash
    
    - name: nginxlog incise rule
      blockinfile:
        path: /etc/logrotate.d/nginxlog
        marker_begin: "start nginxlog"
        marker_end: "end nginxlog"
        insertafter: "End of file"
        state: present
        block: |
          {{ nginx_log_dir }}/*.log {
              daily
              rotate 10
              missingok
              nocompress
              nodelaycompress
              copytruncate
              dateext
              dateformat -%Y-%m-%d
              dateyesterday
              postrotate
                if [ -f {{ nginx_pid }}/nginx.pid ];then           # 这里要改对应机器nginx 的PID位置
                kill -USR1 `cat {{ nginx_pid }}/nginx.pid`  # 这里要改对应机器nginx 的PID位置
                fi
              endscript
          }

  ######## 切割 Tomcat 日志规则 #################
    - name: create tomcatlog rule
      shell: touch /etc/logrotate.d/tomcatlog
      args:
        executable: /bin/bash

    - name: tomcatlog incise rule
      blockinfile:
        path: /etc/logrotate.d/tomcatlog
        marker_begin: "start tomcatlog"
        marker_end: "end tomcatlog"
        insertafter: "End of file"
        state: present
        block: |
          {{ tomcat_log_dir }}/*.log {
              daily
              rotate 10
              missingok
              nocompress
              nodelaycompress
              copytruncate
              dateext
              dateformat -%Y-%m-%d
              dateyesterday
              postrotate
                if [ -f {{ tomcat_pid }}/tomcat.pid ];then           # 这里要改对应机器 tomcat 的PID位置
                kill -USR1 `cat {{ tomcat_pid }}/tomcat.pid`  # 这里要改对应机器tomcat 的PID位置
                fi
              endscript
          }

  ######## 设置计划任务   #####################

    - name: nginxlog incise rule
      blockinfile:
        path: /var/spool/cron/root
        marker_begin: "start cronloh"
        marker_end: "end cronlog"
        insertafter: "End of file"
        state: present
        block: |
          echo "00 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginxlog" >> /var/spool/cron/root
          echo "05 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/tomcatlog" >> /var/spool/cron/root
          echo "10 00 * * * rsync -avz   {{nginx_log_dir}}/*$(date -d "-1 day"  +%Y-%m-%d)  root@192.168.10.27::log/$(ifconfig $( ip route show | awk '/default/ { print $5 }' ) |sed -n 2p |awk -F ' ' '{print$2}' |sed 's/.*://')/" >> /var/spool/cron/root
          echo "20 00 * * * rsync -avz    {{tomcat_log_dir}}/*$(date -d "-1 day"  +%Y-%m-%d)  root@192.168.10.27::log/$(ifconfig $( ip route show | awk '/default/ { print $5 }' ) |sed -n 2p |awk -F ' ' '{print$2}' |sed 's/.*://')/" >> /var/spool/cron/root

为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

king config

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值