와일드카드를 사용한 IP 주소 기반 rsyslog 필터링

와일드카드를 사용한 IP 주소 기반 rsyslog 필터링

rsyslog에서 일부 syslog 트래픽을 처리하고 있으며 원본 장치의 IP 주소를 기반으로 로그를 저장하도록 필터를 설정하고 싶습니다. 나는 많은 수의 장치를 가지고 있으며 각 장치에 대한 규칙을 생성하지 않으려고 합니다. IP 체계는 하나의 규칙으로 모든 것을 처리할 수 있을 만큼 일관성이 있지만 이를 작동시키는 데 어려움을 겪고 있습니다.

다음은 제가 달성하려고 시도한 몇 가지 (실패한) 예입니다.

:FROMHOST, regex, "10\.[0-9]+\.1\.2" -/var/log/test.log
& ~

또는

if ( re_match($fromhost-ip, '10\.[0-9]+\.1\.2') ) then { -/var/log/test.log }
& ~ 

기본적으로 이러한 장치의 IP 계획은 항상 10.*.1.2입니다. 여기서 *는 장치의 위치에 해당하는 2자리 숫자입니다.

누군가 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?

감사합니다!

답변1

rsyslog를 실행하기 위한 디버그 옵션을 찾은 후 실제로 솔루션을 직접 찾을 수 있었습니다. 분명히 다음과 같이 콘솔에서 rsyslogd를 직접 호출할 수 있습니다.

rsyslogd -d

그렇게 하면 모든 규칙 구문 분석의 실시간 스트림이 표시됩니다. ~ 후에이 트릭을 사용하여 몇 번의 시행착오를 거친 후, 단순히 이스케이프하는 것이 아니라 여러 부분이 필요하기 때문에 필터링 규칙이 실패하고 있음을 확인할 수 있었습니다.더블탈출했습니다. 이것은 정말 놀랐습니다.

내 최종 규칙은 다음과 같습니다.

:fromhost-ip, regex, "10\\.[0-9]\\+\\.1\\.2" -/var/log/test.log
& ~

다음은 몇 가지 성공적인 사례의 결과입니다. 여기서는 이스케이프된 것으로 +나타나야 합니다. 공식에 연결하면 일치하는 항목을 찾을 수 없기 때문에 이상합니다.rsyslog 정규식 테스터이 방법:

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.24.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

언젠가 이 글을 읽는 사람이 궁금할 경우를 대비해 제가 시행착오를 겪은 몇 가지 예를 소개하겠습니다. 그 중 대부분은 완전한 실패였습니다.

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10.[0-9]+.1.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '^10.[0-9]+.1.2$': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.1\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE

관련 정보