美文网首页自留地
多台机器集群日志查找方法

多台机器集群日志查找方法

作者: 定金喜 | 来源:发表于2020-06-14 21:12 被阅读0次

    1.多机器查看日志存在的问题

    为了保持服务高可用和速度,现代的服务器一般都是2台或者以上形成的服务器集群,如果服务器出现故障,运维需要查看线上日志去定位问题,一般有很多方式,一般的公司有日志收集系统,会将所有的日志上传到日志收集系统中,我们可以在这个系统中查找,如果没有这种系统,我们就要去每台服务器上面去定位日志,如果服务器数量较多,则需要每台服务器去查找,非常耗费时间还容易出错,所以我们申请一台单独的日志集群服务器,用这台服务器配置好所有的线上服务器的ip,通过这台服务器就可以一次性查询出所有的日志。

    2.预先工作

    免登
    与免登相关的几个文件
    1)id_rsa:私钥
    2)id_rsa.pub:公钥,和私钥配对生成
    3)authorized_key:记录来访的其他服务器公钥,只有成对生成的私钥才能解密公钥加密的内容,例如A机器可以免登B服务器,则在B服务器这个文件中写入A服务器生成的公钥,公钥存放在A机器的id_rsa.pub文件
    4)known_hosts:记录来访的其他服务器的信息,一般通过ssh,scp和ssh-copy-id命令会记录,例如A机器免登B机器,则A机器的此文件中会记录B机器的信息
    以A->B免登为例,操作顺序如下:
    1) 在A机器执行指令 ssh-keygen -t rsa生成本机的公钥和私钥(已有的跳过这一步),生成文件id_rsa和id_rsa.pub;
    2) A机器使用 ssh-copy-id userid@B服务器ip地址,使用此命令后会将当前机器A的公钥发送到对方B,并保存在对方~/.ssh的authorized_key文件中,这样A就可以免密登录B,初次登录会有提示你确认要访问吗,当第一次连接后,A服务器上会生成known_hosts文件,保存B机器的信息,这样下次A免密登录B就不再提示;
    3)A机器执行指令 userid@B服务器ip地址 来校验免密登录是否生效
    所以我们要使用ssh-copy-id指令拷贝集群服务器的公钥到各个应用服务器,有几个执行几次

    ip配置文件
    新建文件存放所有应用服务器的ip地址,每个ip之间换行,格式如下:
    127.0.0.1
    127.0.0.2
    127.0.0.3
    127.0.0.4

    3.编写执行脚本

    新建sh文件user.sh,脚本内容如下:

    #!/bin/bash
    do_command()
    {
            hosts=`sed -n '/^[^#]/p' ip_hostlist.txt`
            for host in $hosts
                    do
                            echo ""
                            echo HOST $host
                            ssh log@$host "$@"
                    done
            return 0
    }
    
    if [ $# != 1 ]
    then
            echo "=========================================="
            echo "功能:批量在多台服务器上执行命令"
            echo "方法:$0 \"<cmd_to_exec\"  eg:./salarylog.sh \"grep --color 'exception' ~/logs/error.log\" "
            echo "返回:各服务器执行命令返回的结果列表"
            echo "前提:在待执行命令的各个服务器上设置了免密登录"
            echo "警告:禁止执行删除、格式化等这样的可能造成严重后果的命令"
            echo "=========================================="
            exit 1
    fi
    
    
    echo "确定要执行命令?[yes/no]:$@ "
    read to_run
    
    if [ $to_run = "yes" -o $to_run = "YES" -o $to_run = "y" -o $to_run = "Y" ]
    then
            echo ""
            echo -e "\033[31m执行命令 : $@ \033[0m"
            do_command "$@"
    else
            echo "取消执行命令!"
    fi
    
    echo ""
    echo "=========================================="
    

    备注说明:
    ip_hostlist.txt 应用服务器的ip地址列表,例如我们的应用服务器ip列表为:
    10.5.46.110
    10.5.46.111
    10.5.46.112
    10.5.46.113
    10.5.46.114
    10.5.46.115
    10.4.46.116
    10.4.46.117

    ssh log@host "@" 能执行的前提是集群服务器已经配置好ip_hostlist.txt文件ip地址所有的免登信息

    测试执行情况
    如果需要查找所有机器中/home/admin/user.log目录文件中含有'error'字符的日志,则指令如下:
    ./user.sh "cat /home/admin/user.log | grep 'error' "
    执行后会提示确认命令:
    确定要执行命令?[yes/no]:cat /home/admin/user.log | grep 'error'
    输入no后结果:
    取消执行命令!
    **输入yes结果: **
    执行命令 : cat /home/admin/user.log | grep 'error'

    HOST 10.5.46.110

    HOST 10.5.46.111

    HOST 10.5.46.112

    HOST 10.5.46.113

    HOST 10.5.46.114

    HOST 10.5.46.115

    HOST 10.4.46.116

    HOST 10.4.46.117

    很显然文件中没有该字符

    参考文章:
    https://www.cnblogs.com/youngchaolin/p/11706692.html

    相关文章

      网友评论

        本文标题:多台机器集群日志查找方法

        本文链接:https://www.haomeiwen.com/subject/wbptxktx.html