rsyslog를 사용하여 syslog 메시지를 별도의 MySQL 테이블로 구문 분석합니다.

rsyslog를 사용하여 syslog 메시지를 별도의 MySQL 테이블로 구문 분석합니다.

상자 밖에시스템 로그SystemEvents모든 것이 Syslog 데이터베이스 내의 테이블 에 덤프됩니다 (제공된 기본 스키마를 사용하는 경우). 정규식을 사용하여 인바운드 메시지를 별도의 데이터베이스 테이블로 필터링하고 싶습니다.

나는 이것을 가지고 놀았지만 이것을 달성하는 가장 좋은 방법(또는 효율적인 방법)을 찾는 데 어려움을 겪고 있습니다.

내 rsyslog.conf에서:

$template wireless, \
 "insert into RogueAPs \
 (ReceivedAt, DeviceReportedTime, Facility, Priority, FromHost, Message) \
 VALUES('%timegenerated%', '%timereported%', '%syslogfacility%', '%syslogpriority%', '%fromhost-ip%', '%msg%');", \ 
 stdsql

if $msg contains 'subtype=wireless' then :ommysql:127.0.0.1,Syslog,dbusername,dbpassword;wireless

*.* :ommysql:127.0.0.1,Syslog,dbusername,dbpassword

이것이 나의 최근 시도인데 막혔습니다.

(RogueAPs 테이블은 rsyslog와 함께 제공되는 기본 SystemEvents 테이블의 복제본일 뿐입니다)


버전 정보:

shell# /usr/local/sbin/rsyslogd -v
rsyslogd 5.5.5, compiled with:
        FEATURE_REGEXP:                         Yes
        FEATURE_LARGEFILE:                      No
        FEATURE_NETZIP (message compression):   Yes
        GSSAPI Kerberos 5 support:              No
        FEATURE_DEBUG (debug build, slow code): No
        Atomic operations supported:            Yes
        Runtime Instrumentation (slow code):    No

See http://www.rsyslog.com for more information.

답변1

한눈에이것튜토리얼인데 별 차이가 없네요.

하지만 보세요rsyslog의 템플릿 문서, 파라미터 설정에 따라 mysql 과 다른 것 같습니다 NO_BACKSLASH_ESCAPES.

문서에서:

sql - format the string suitable for a SQL statement in MySQL format. This will 
replace single quotes ("'") and the backslash character by their backslash-escaped
counterpart ("\'" and "\\") inside each field. Please note that in MySQL
configuration, the NO_BACKSLASH_ESCAPES mode must be turned off for this format to
work (this is the default).

stdsql - format the string suitable for a SQL statement that is to be sent to a
standards-compliant sql server. This will replace single quotes ("'") by two single
quotes ("''") inside each field. You must use stdsql together with MySQL if in MySQL
configuration the NO_BACKSLASH_ESCAPES is turned on.

답변2

불행하게도 rsyslog 문서는 일부 측면에서 매우 완전하지 않거나 이해하기 쉽지 않습니다. 나는 지난 몇 주 동안 rsyslog/MySQL/regex 관련 작업을 하면서 많은 시간을 보냈습니다.

정규식 일치를 시도하려는 로그 줄의 예, 해당 테이블의 스키마 등을 게시할 수 있습니까? 귀하가 게시한 내용이 유효한 것 같습니다. 무엇을 필터링하려고 하시나요? 기본 모드가 작동합니까?

그런데, 나는 당신이 RogueAPs라는 테이블을 사용하고 있다는 것을 눈치채지 않을 수 없었습니다. 어떤 공급업체를 사용하고 있는지는 모르지만 Meru Networks 및 BlueSocket 컨트롤러의 인증 로그 메시지에 대한 정규식 규칙이 있습니다.

관련 정보