UDP 포트에서 받은 로그 메시지를 구문 분석하여 MYSQL 데이터베이스에 삽입하려고 합니다. 내 syslog-ng.conf 파일의 목표는 다음과 같습니다.
source syslog_udp {
udp(port(<port num>) flags(no-parse));
};
제가 작성한 파서는 다음과 같습니다.
parser p_logparser{
csv-parser(columns("<column1>", "<column2>", ...)
flags(strip-whitespace)
delimiters(",")
template("${<column1}\n")
);
};
또한 필터를 사용하여 로그 메시지의 특정 부분을 "삭제"합니다.
filter log_filter { not (match("<string>") and match("<string>"));};
궁극적으로 "column1"의 내용을 MYSQL 데이터베이스에 쓸 수 있기를 원하지만 테스트 목적으로 현재 파일에 쓰고 있습니다.
destination d_file {
file("<path>/${ISODATE}" template("Testing : ${column1}"));
};
log {
source(syslog_udp);
parser(p_logparser);
filter(log_filter);
destination(d_file);
};
그러나 d_file에 설명된 파일을 열면 "Testing:"만 표시되고 컬럼1의 내용은 실제로 존재하지 않습니다. 내 파서가 소프트 매크로를 올바르게 생성하지 않기 때문이라고 생각합니다. 내가 뭘 잘못했나요?
답변1
파서에는 "템플릿" 줄이 필요하지 않습니다. 이 옵션은 CSV 파서를 사용하려는 로그 메시지 부분을 지정하며 기본값(${MESSAGE})일 수 있습니다.