複数のサーバーからログメッセージを収集するシェルスクリプトの作成

複数のサーバーからログメッセージを収集するシェルスクリプトの作成

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

以下は、文書の指示を要約したものです。

  1. メッセージを送る

    適切な名前のファイルに次の行を追加します。たとえば、IPアドレスを使用してコンピュータ/etc/rsyslog.d/に送信する場合は、次のように呼び出すことができます。mushroom192.168.10.1send_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
    
  2. メッセージを受け取る

    次の行のコメントを外すか、設定ファイルに追加してください。例 /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/messagesadm グループのすべてのメンバーが読むことができます。このグループ内では、一般ユーザーを使用する必要があります。 (他のディストリビューションではご確認くださいls -l /var/log/messages)。

終了するには、exitnot 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 

関連情報