Rsyslog 정규식

Rsyslog 정규식

내 서버 syslog에 들어오는 메시지가 너무 많습니다 . 다양한 카테고리(연결, 네트워크, 경고...)의 메시지를 보냅니다 rsyslog.stormshield

각 카테고리에 대해 서로 다른 기능을 구성할 수 없으므로 정규식을 사용하여 수신 메시지를 여러 파일로 분할해야 합니다.

모든 메시지는 서로 다르며 메시지에 더 많거나 적은 필드가 있지만 logtype카테고리를 식별하는 하나의 필드가 있습니다.

Syslog message 
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent

질문은 다음과 같습니다.

logtypePOSIX 정규식을 사용하여 필드에서 문자열을 수집 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 파일을 보았으므로 실수에 대해 사과드립니다.

관련 정보