우리 네트워크에는 장치가 곳곳에 흩어져 있습니다. 나는 다음과 같은 것을하고 싶습니다 :
풀1 { 192.168.1.1-192.168.1.20, 192.168.1.50 } 풀2 { 192.168.1.21-192.168.1.40, 192.168.1.66 }
pool1에서 이렇게 하면
pool2에서 그렇게 하면
그렇게 하면 Mac 로그를 Mac 로그처럼 보이게 하고, Linux 로그를 Linux 로그처럼 보이게 하고, Cisco 로그를 Cisco 로그처럼 보이게 만들 수 있습니다. 인터넷 검색으로는 충분히 구체적인 내용을 찾을 수 없었습니다.
답변1
상당히 최신 버전이 있는 경우rsyslog(최신 버전의 패키지는 해당 웹사이트에서 찾을 수 있습니다.) 그러면 설명된 대로 비교를 위해 배열을 사용할 수 있어야 합니다.여기. 다음과 같은 것 :
if $fromhost-ip == [ "192.168.1.1", "192.168.1.2"... ] then {
action(...do this...)
}
비록제어 구조 문서화그것은 다음과 같아야 할 것 같습니다:
if $variable in [array]
범위가 크다면 그런 foreach 구조로 지역 변수를 채울 수 있어야 합니다. 문서에서 "RainerScript"를 검색하면 스크립팅에 대한 자세한 정보를 찾을 수 있습니다.
답변2
이것은 나에게 효과적입니다.
# accept logging for remote hosts on a per-ip-address basis
$template DirectoryPerHost,"/var/log/REMOTEHOSTS/%fromhost-ip%/%syslogfacility-text%.log"
if ( ( $fromhost-ip != "127.0.0.1" ) and ( $fromhost-ip != "::1" ) ) then {
?DirectoryPerHost
} else {
whatever you want to do with local log files here
}
fromhost-ip 대신 사용할 수 있는 다른 변수가 있습니다. 자세한 내용은 Radu가 링크하는 문서를 참조하세요.
이를 수행하려면 최신 rsyslog가 필요하다는 Radu의 말이 맞습니다.
RHEL6 또는 해당 재구축 중 하나에서 멈춘 경우 기본(이전) rsyslog 대신 사용할 수 있는 OS의 rsyslog7 패키지가 있습니다. 기본 버전은 이 구문을 지원하지 않지만 v7은 지원합니다.