centosのシェルスクリプトを使用して、より多くのサーバーからログメッセージを収集します。
ログメッセージを受信するための小さなスクリプトに疲れました。しかし、問題は、ログインしようとすると機能しないことです。したがって、別のサーバーにログインし、そのスクリプトを使用してログメッセージを取得できるスクリプトが必要です。
以下のスクリプトは私が疲れたものです。
#!/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
。
以下は、文書の指示を要約したものです。
メッセージを送る
適切な名前のファイルに次の行を追加します。たとえば、IPアドレスを使用してコンピュータ
/etc/rsyslog.d/
に送信する場合は、次のように呼び出すことができます。mushroom
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
対話型セキュリティシェルを起動して終了するのを待ちます。その後、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
(ただ印刷終了)を使用します。
スクリプトが初期化されていません$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