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 키와 키 에이전트를 사용하면 이를 방지할 수 있습니다.
루트로 로그인하는 것은 권장되지 않습니다. 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