在 centos 中使用 shellscript 从更多服务器收集日志消息。
我已经厌倦了一个小脚本来获取日志消息。但问题是当我尝试登录时它不起作用。所以我需要一个脚本,我可以在其中登录不同的服务器并使用该脚本获取日志消息。
下面的脚本是我厌倦的
#!/bin/sh
echo Enter the count of the server that you need to check for the log messages
read countofserver
for (( c=1; c<=$countofserver; c++ ))
do
echo if you want to continue again press 1 or to quit press any number
read continue
if [ $continue -eq 1 ]
then
echo Enter the ip which you want to login
read loginip
ssh root@$loginip
echo Below are the log messages of the server $loginip
cat /var/log/messages
else
echo exit
fi
done
答案1
我假设您正在使用rsyslog
未指定版本的 CentOS。
解决您的问题的最直接的解决方案是使用子系统的每个实现中内置的功能集syslog
,使其能够将消息发送到中央服务器。这样就不需要使用任何形式的脚本来复制日志 - 它会自动发生。
可以找到这样一个食谱rsyslog
:
以下是该文档中的说明的摘要
发送消息
将此行添加到适当命名的文件中
/etc/rsyslog.d/
- 例如,如果您要发送到mushroom
使用 IP 地址调用的计算机192.168.10.1
,您可以将其称为send_to_mushroom.conf
:# Everything to "mushroom" via port 60514 *.* action(type="omfwd" target="192.168.10.1" port="60514" protocol="tcp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000")
如果您只想将事件写入以下内容,请将首字母更改
*.*
为此消息子集/var/log/messages
:*.=info;*.=notice;*.=warn;auth,authpriv.none;cron,daemon.none;mail.none
接收消息
取消注释这些行,或将它们添加到配置文件中,例如
/etc/rsyslog.d/from_remotes
:module(load="imtcp") input(type="imtcp" port="60514")
现在重新启动 的客户端和服务器实例rsyslogd
并观察消息滚滚而来。(请记住允许 tcp/50514 通过任何中间防火墙。)
答案2
在这里,ssh root@$loginip
将启动一个交互式安全 shell 并等待它退出。之后在cat /var/log/messages
本地执行。
您可以输入:
echo Below are the log messages of the server $loginip
ssh root@$loginip cat /var/log/messages
这里,cat /var/log/messages
是远程执行的。
(scp
也可用于复制文件)
请注意,ssh 每次都会询问您密码。您可以使用 ssh 密钥和密钥代理来避免它。
不建议以 root 身份登录。在 Debian 上,/var/log/messages
adm 组的任何成员都可以读取 。您应该使用该组内的普通用户。 (在其他发行版上,请验证ls -l /var/log/messages
)。
如果您想退出,请使用exit
, not echo exit
(仅打印 exit)。
您的脚本未初始化$loginip
。您可以将 for 循环替换为while read loginip;do
答案3
我厌倦了它运行良好。它将日志消息分别存储在以其 IP 地址命名的每个文件夹中。
#!/bin/bash
echo Enter the count of the server that you need to check for the log messages
read countofserver
for (( c=1; c<=$countofserver; c++ ))
do
echo Enter the ip which you want to login
read loginip
mkdir /root/logmessages/$loginip -p
scp root@$loginip:/var/log/messages /root/logmessages/$loginip/
done