두 개 이상의 서버에서 로그 메시지를 수집하는 쉘 스크립트 작성

두 개 이상의 서버에서 로그 메시지를 수집하는 쉘 스크립트 작성

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 키와 키 에이전트를 사용하면 이를 방지할 수 있습니다.

루트로 로그인하는 것은 권장되지 않습니다. 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 

관련 정보