自留地

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

2020-06-14  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读