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