syslog-ng 메시지 분할

syslog-ng 메시지 분할

sshd로그 항목 의 소스 IP 주소를 syslog-ng. 현재 원하는 로그 항목의 하위 문자열과 일치하는 필터가 정의되어 있습니다.

로그 항목 전체를 DB에 저장할 수 있지만 $MSGsyslog 항목의 일부에는 원하지 않는 추가 데이터가 많이 포함되어 있습니다. IP 주소만 DB에 기록하도록 syslog 항목의 필드를 "분할"하는 방법이 있습니까?

이것은 내 구성입니다.

filter f_sshd
{
   # (log entry) Sep  5 14:59:20 myhost4 sshd Starting session: shell on pts/0 for rbackup from 10.120.192.25 port 36894 id 0
   match("Starting session:" value ("MESSAGE") );
};


destination d_sshd
{
   sql( type(mysql)
   username("xxxxx")
   password("xxxxxxx")
   database("syslog")
   host("localhost")
   table("ssh")
   columns("host", "facility", "priority", "level", "pid", "tag", "timestamp", "program", "msg")
   values("$HOST", "$FACILITY", "$PRIORITY", "$LEVEL", "$PID", "$TAG","$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC","$PROGRAM", "$MSG")
   indexes("timestamp", "host", "program", "pid", "message"));
};

log
{
   # s_stunnel is defined in syslog-ng/conf.d/stunnel.conf
   source(s_stunnel);
   filter(f_sshd);
   destination(d_sshd);
};

답변1

다음을 사용하여 파서를 만들 수 있습니다.syslog-ng-patterndb메시지의 일부를 추출합니다.

파서를 정의하는 XML 파일을 만듭니다( /etc/syslog-ng/template_sshd.xml).

<patterndb version='4' pub_date='2010-10-17'>
    <ruleset name='ssh' id='123456678'>
        <pattern>ssh</pattern>
            <rules>
                <rule provider='me' id='182437592347598' class='system'>
                    <patterns>
                        <pattern>Starting session: shell on @ESTRING:SSH_TERMINAL: @for @ESTRING:SSH_USERNAME: @from @ESTRING:SSH_CLIENT_ADDRESS: @port @NUMBER:SSH_PORT_NUMBER:@ id @NUMBER:SSH_ID@</pattern>
                    </patterns>
                    <examples>
                        <example>
                            <test_message program="ssh">Starting session: shell on pts/0 for rbackup from 10.120.192.25 port 36894 id 0</test_message>
                            <test_values>
                                <test_value name="SSH_TERMINAL">pts/0</test_value>
                                <test_value name="SSH_USERNAME">sampleuser</test_value>
                                <test_value name="SSH_CLIENT_ADDRESS">192.168.10.12</test_value>
                                <test_value name="SSH_PORT_NUMBER">42156</test_value>
                                <test_value name="SSH_ID">1</test_value>
                            </test_values>
                       </example>
                    </examples>
                </rule>
            </rules>
    </ruleset>
</patterndb>

그런 다음 syslog-ng.conf:

파서를 정의합니다.

parser sshd_pattern { db_parser(file("/etc/syslog-ng/template_sshd.xml")); };

로그 지시문에서 파서를 호출합니다.

log
{
   # s_stunnel is defined in syslog-ng/conf.d/stunnel.conf
   source(s_stunnel);
   parser(sshd_pattern);  <---- call parser
   filter(f_sshd);
   destination(d_sshd);
};

SSH_CLIENT_ADDRESS대상 내의 파서에서 변수를 사용하십시오 .

destination d_sshd
{
  file("/var/log/sshd.log"
  template("${SSH_USERNAME}; ${SSH_CLIENT_ADDRESS}; ${HOST}; ${FACILITY}; ${PRIORITY}; ${LEVEL}; ${PID}; ${TAG}; ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MIN}:${SEC}; ${PROGRAM}; \n")
  template_escape(no)
 );
};

단위 테스트 실행 중:

pdbtool match -P "ssh" -M "Starting session: shell on pts/0 for rbackup from 10.120.192.25 port 36894 id 0" -p template_sshd.xml -c -D -v

다음을 반환해야 합니다.

SSH_TERMINAL=pts/0
SSH_USERNAME=rbackup
SSH_CLIENT_ADDRESS=10.120.192.25
SSH_PORT_NUMBER=36894
SSH_ID=0

이 링크에서 수정되었습니다.https://gist.github.com/linickx/8002981


아래 귀하의 의견과 관련하여 편집하십시오.

이상적으로 SSH_TERMINAL 키는 세션 후 공간에서 베어워드의 모든 것을 삼킬 수 있습니다.

다음과 같이 XML의 패턴을 변경합니다.

<pattern>Starting session: @ESTRING:SSH_TERMINAL:from @@ESTRING:SSH_CLIENT_ADDRESS: @port @NUMBER:SSH_PORT_NUMBER:@ id @NUMBER:SSH_ID@</pattern>

다음을 반환합니다.

# pdbtool match -P "ssh" -M "Starting session: shell on pts/0 for rbackup from 10.120.192.25 port 36894 id 0" -p template_sshd.xml -c -D -v

SSH_TERMINAL=shell on pts/0 for rbackup  <-- you got all between "session:" to "from"
SSH_CLIENT_ADDRESS=10.120.192.25
SSH_PORT_NUMBER=36894
SSH_ID=0

패턴 파서에 대한 추가 정보:https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.16/administration-guide/72

관련 정보