章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • python

  • shell

    • 进程pid判断脚本
    • 日志切割脚本
    • 设置跳板机脚本
    • 编写启动、停止、重启的脚本
    • mysql数据库备份的三种方式
    • jenkins编译服务脚本
    • app编译脚本
    • 常用shell脚本
    • 字符串的截取拼接
    • shell基础
    • centos7主机安全检测脚本和初始化脚本
    • 应用服务重启脚本
    • shell重启python程序脚本
    • rancher的证书制作脚本
    • shell常用脚本集合
    • mysql常用的脚本集合
    • shell批量部署安装包并启动
    • 批量添加定时任务
    • mysql备份企业示例
    • shell脚本创建出色用户体验的6种技巧
    • 多系统一键部署zabbix6脚本(已验证)
    • 批量拿取多台服务器的日志文件
    • shell脚本模块集合
  • go

  • 编程
  • shell
章工运维
2025-04-21

批量拿取多台服务器的日志文件

# 脚本如下

#!/bin/bash

# 脚本配置
SERVERS=("server1" "server2" "server3")  # 服务器列表
KEYWORD="error"  # 搜索关键字
LOG_PATH="/app/logs"  # 日志路径
LOCAL_COLLECT_DIR="/data/log_collection"  # 本地日志收集目录
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

# 创建本地日志收集目录
mkdir -p $LOCAL_COLLECT_DIR/$TIMESTAMP

# 日志收集函数
collect_logs() {
    local server=$1
    
    # 远程搜索日志,使用更精确的查找方式
    matched_logs=$(ssh $server "find $LOG_PATH -type f -print0 | xargs -0 grep -l '$KEYWORD'")
    
    # 如果找到日志文件
    if [ -n "$matched_logs" ]; then
        # 创建临时目录
        ssh $server "mkdir -p /tmp/log_collection"
        
        # 使用数组存储日志文件
        IFS=$'\n' read -d '' -r -a log_array <<< "$matched_logs"
        
        # 复制所有匹配的日志文件到临时目录
        for logfile in "${log_array[@]}"; do
            ssh $server "cp '$logfile' /tmp/log_collection/"
        done
        
        # 压缩日志文件,确保所有文件都被包含
        ssh $server "cd /tmp/log_collection && tar -czvf /tmp/log_collection_${server}.tar.gz ."
        
        # 下载压缩文件
        scp $server:/tmp/log_collection_${server}.tar.gz $LOCAL_COLLECT_DIR/$TIMESTAMP/
        
        # 清理远程临时文件
        ssh $server "rm -rf /tmp/log_collection /tmp/log_collection_${server}.tar.gz"
        
        # 打印收集的日志文件
        echo "Server $server collected logs:"
        printf '%s\n' "${log_array[@]}"
    else
        echo "No logs found on server $server with keyword '$KEYWORD'"
    fi
}

# 并行收集日志
for server in "${SERVERS[@]}"; do
    collect_logs $server &
done

# 等待所有后台任务完成
wait

# 本地打包
tar -czvf $LOCAL_COLLECT_DIR/logs_collection_$TIMESTAMP.tar.gz -C $LOCAL_COLLECT_DIR $TIMESTAMP

echo "日志收集完成,位于 $LOCAL_COLLECT_DIR/logs_collection_$TIMESTAMP.tar.gz"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 单个关键字执行
./collect_logs.sh
# 多个关键字可以这样修改
KEYWORDS=("error" "warning" "critical")
1
2
3
4
微信 支付宝
上次更新: 2025/04/21, 10:03:56

← 多系统一键部署zabbix6脚本(已验证) shell脚本模块集合→

最近更新
01
shell脚本模块集合
05-13
02
生活小技巧(认知版)
04-29
03
生活小技巧(防骗版)
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式