원격 rsyslog 클라이언트가 실행 중인지 확인하는 방법

원격 rsyslog 클라이언트가 실행 중인지 확인하는 방법

현재 저는 rsyslog 및 auditd를 중심으로 구축된 모니터링 시스템의 일부를 구현하고 있습니다. 나는옳은이 사실을 확인하다원격 rsyslog 클라이언트 기능이 실행 중입니다.. 이 확인은 rsyslog 서버에서 더 짧은 간격으로 반복되어야 합니다.

가장 간단한 방법은 최신 로그 파일 수정의 타임스탬프를 추적하는 것입니다. rsyslog 서버가 수신 메시지를 리디렉션하는 데 사용하는 로그 파일이 최근에 수정되지 않은 경우 원격 rsyslog가 다운되어 더 이상 메시지를 보내지 않는다는 결론을 내릴 수 있습니다. 하지만 이 방법의 정확성에 대해서는 의문이 듭니다.

답변1

이것은 나쁜 생각이 아닙니다. 상황을 조금 개선하기 위해 각 클라이언트가 주기적으로 메시지를 보내도록 구성할 수 있습니다("하트비트" 또는 "플래그" 제공). Rsyslog의 경우 지침은 다음과 같습니다 $ActionWriteAllMarkMessages [on|off]. 그러나 매뉴얼 페이지에 주의하십시오.

이 옵션은 자동으로 "off"로 재설정되므로 여러 작업에 사용하려는 경우 이 기능을 제공해야 하는 모든 선택기 줄 앞에 지정해야 합니다.

Syslog 서버에서 발견되지 않은 구성 문제로 인해 메시지가 예기치 않은 위치(예: 클라이언트 활동을 보여 주는 모니터링 파일)로 전달되는 경우 어떻게 됩니까? 아마도 더 엄격한 테스트는 제공된 "하트비트" 또는 "표시" 메시지를 grep/awk하여 $ActionWriteAllMarkMessages특정 호스트에서 보낸 메시지의 시간을 찾는 것일 수 있습니다.

원격 Syslog 서버가 실행 중인지 확인하려면 및 스위치 nc와 함께 netcat( )을 사용할 수 있습니다 . 매뉴얼에서:-z-u

-u 기본 옵션인 TCP 대신 UDP를 사용합니다.

-z는 nc가 데이터를 보내지 않고 청취 데몬만 스캔하도록 지정합니다. [...]

예를 들어 5초의 시간 초과( -w5):

#!/usr/bin/env bash
hostname="<FQDN or IP Address>"
port="514"

if (nc -z -u -w5 "$hostname" "$port" > /dev/null 2>&1); then
    echo "Syslog is up."
else
    echo "Syslog could not be reached."
fi

unset hostname
unset port

또는 Syslog 서버에서도 TCP를 사용하는 경우 이 -u스위치를 생략하여 이 목적으로만 사용되는 경우 TCP의 안정성을 활용할 수 있습니다. Syslog 서버가 연결 확인을 수행하는 서버 위치에서 수신 대기 중이고 사용 가능한지 확인합니다. 똑같이 중요한 또 다른 측면이 있는데, 바로 디스크 공간입니다. (메시지를 쓸 공간이 부족하면 Syslog 서버가 다운된 것으로 간주될 수도 있습니다.)

UDP는 설계상 "신뢰할 수 없다"는 점을 고려하면 혼잡한 네트워크나 Syslog 서버에서는 "표시" 또는 "하트비트" 메시지에 의존하는 것이 항상 작동하지 않을 수도 있습니다. 또 다른 접근 방식은 각 클라이언트에 스크립트를 설치하는 것입니다. 스크립트(BASH, Python 또는 유효한 스크립트)는 사용자가 설계한 오류 코드를 반환할 수 있습니다(예: Syslog 프로세스가 실행되고 있지 않습니까? 1을 반환하거나 Syslog 프로세스를 먼저 시작하거나 연결 테스트와 같은 다른 테스트를 설계해 보십시오). xinetd시작 스크립트 의 경우 /etc/xinetd.d/script_name(RHEL/CentOS에서):

service check_syslog
{
    type        = UNLISTED
    port        = 6777
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    server      = /usr/local/sbin/script_name
    only_from   = 127.0.0.1 10.0.0.110
    disable     = no
}

RHEL에서 재부팅 명령은 입니다 service xinetd restart. /etc/services포트 6777의 이름을 편집합니다 . 섹션 iptables을 확장하는 데 사용하는 것을 좋아합니다 only_from. 그런데 포트 6777은 예시용일 뿐입니다.

관련 정보