내 서버 syslog
에 들어오는 메시지가 너무 많습니다 . 다양한 카테고리(연결, 네트워크, 경고...)의 메시지를 보냅니다 rsyslog
.stormshield
각 카테고리에 대해 서로 다른 기능을 구성할 수 없으므로 정규식을 사용하여 수신 메시지를 여러 파일로 분할해야 합니다.
모든 메시지는 서로 다르며 메시지에 더 많거나 적은 필드가 있지만 logtype
카테고리를 식별하는 하나의 필드가 있습니다.
Syslog message
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent
질문은 다음과 같습니다.
logtype
POSIX 정규식을 사용하여 필드에서 문자열을 수집 rsyslog
하고 해당 값에 따라 문자열을 다른 파일로 분할하려면 어떻게 해야 합니까 logtype
?
답변1
조금 늦었다는 걸 알지만 가능합니다. 이러한 로그를 어떻게 얻는지는 모르겠지만(아마도 빠른 웹 검색을 통해 알 수 있음) 비슷한 설정이 있습니다. 당신은 그것을 사용할 수 있습니다규칙 세트, (흥미롭게도) 기본 규칙으로 사용되지 않는 새로운 규칙 세트를 개발합니다. 내장된 스크립팅 언어로레이나 스크립트re_match
, true 또는 false를 반환하는 함수가 있습니다 .
ruleset(name="stormshield") {
if re_match($msg, "your POSIX ERE regex") then {
action(type="omfile" file="/your/file/name/here")
stop
} else if re_match(...) then { ... }
else { ... }
}
$msg
현재 로그에 대한 참조입니다.
omfile
출력 모듈의 경우 데이터베이스 등이 필요한 경우 다른 옵션이 있습니다.
다른 일을 마친 후에 if..else if...else
그곳으로 가세요 . stop
완료되면 메시지를 삭제해야 합니다. 그렇지 않으면 다른 규칙에도 적용됩니다. 작업 후에 물결표를 추가할 수도 있지만 ~
확인해야 할 것 같습니다.
로그가 규칙 세트로 전달되는 방식( bind
문서화된 대로)은 소스에 따라 다릅니다. 네트워크 또는 파일 소스의 경우 이 기능이 있으며 input
,입력 모듈예를 들어 및 "imtcp"
에는 "imfile"
규칙 세트 매개변수가 있습니다. 일부 모듈의 경우 추가 패키지를 구해야 할 수도 있습니다.
input(type="imfile" File="/input/file/here.log" Tag="..." Ruleset="ruleset name")
input(type="imtcp" Port="1234" Name="name" Ruleset="ruleset name")
마지막으로, 특정 시설을 보내야 하는 경우 다음을 사용할 수 있습니다.call
: ( local0.* call rulesetName
인용문이 없는 것 같습니다) 예를 들어 (필요에 따라 녹음해야 할 내용을 선택하세요)
그런 일을 많이 겪은 것 같아요. 방금 conf 파일을 보았으므로 실수에 대해 사과드립니다.