23.2. Rsyslog의 기본 구성
rsyslog 의 기본 설정 파일은 /etc/journal.conf 입니다. 여기서는 필터 및 동작 부분으로 구성된 글로벌 지시문,모듈 및 규칙을 지정할 수 있습니다. 또한 해시 기호(#)에 따라 텍스트 형태로 주석을 추가할 수 있습니다.
23.2.1. filters 링크 복사링크가 클립보드에 복사되었습니다!
규칙은 syslog 메시지의 하위 집합을 선택하는 필터 부분과 선택한 메시지로 수행할 작업을 지정하는 작업 부분에 의해 지정됩니다. /etc/journal.conf 구성 파일에 규칙을 정의하려면 한 줄에서 필터 및 작업을 모두 정의하고 하나 이상의 공백 또는 탭으로 구분합니다.
rsyslog 는 선택한 속성에 따라 syslog 메시지를 필터링하는 다양한 방법을 제공합니다. 사용 가능한 필터링 방법은 facilities /Priority-based ,Property-based , Expression 기반 필터로 나눌 수 있습니다.
- 기능/우선 순위 기반 필터
syslog 메시지를 필터링하는 데 가장 많이 사용되고 잘 알려진 방법은 두 조건에 따라 syslog 메시지를 필터링하는 기능/우선 기반 필터를 사용하는 것입니다. 기능 및 우선순위는 점으로 구분되어 있습니다. 선택기를 생성하려면 다음 구문을 사용합니다.
FACILITY.PRIORITY다음과 같습니다.
-
FACILITY 는 특정 syslog 메시지를 생성하는 하위 시스템을 지정합니다. 예를 들어
메일하위 시스템은 모든 메일 관련 syslog 메시지를 처리합니다. FACILITY 는 다음 키워드(또는 숫자 코드) 중 하나로 나타낼 수 있습니다. Kern (0),user(1),mail(2),daemon(3),auth(4),syslog(5),lpr(6),news(7),cron(8),authpriv(9)(10),local0에서local7(16 - 23)을 통해 local0. PRIORITY 는 syslog 메시지의 우선 순위를 지정합니다. PRIORITY 는 다음 키워드(또는 숫자) 중 하나로 나타낼 수 있습니다.
debug(7),info(6),notice(5),warning(4),err(3),crit(2),alert(1) 및emerg(0)앞에서 설명한 구문은 정의된 우선 순위가 높은 syslog 메시지를 선택합니다. 등호(
=)가 있는 priority 키워드를 선행하여 지정된 우선순위가 있는 syslog 메시지만 선택하도록 지정합니다. 다른 모든 우선순위는 무시됩니다. 반대로 느낌표(!!)가 있는 우선순위 키워드 앞의 명령은 우선 순위가 정의된 syslog 메시지를 제외한 모든 syslog 메시지를 선택합니다.위에 명시된 키워드 외에 별표(*)를 사용하여 모든 기능 또는 우선 순위를 정의할 수도 있습니다(보장 전 또는 쉼표 뒤에 있는 위치에 따라 다름).
priority 키워드를 지정하면 우선순위가 없는 기능에는 적용되지 않습니다.기능 및 우선 순위 조건은 모두 대소문자를 구분하지 않습니다.여러 기능과 우선 순위를 정의하려면 쉼표(
,)로 구분합니다. 한 줄에 여러 개의 선택기를 정의하려면 Semi-colon(;)과 분리합니다. selector 필드의 각 선택기는 이전 항목을 덮어쓸 수 있으며, 이는 패턴에서 일부 우선순위를 제외할 수 있습니다.예 23.1. 기능/우선 순위 기반 필터
다음은
/etc/journal.conf에 지정할 수 있는 간단한 기능/우선 기반 필터의 몇 가지 예입니다.우선 순위가 있는 커널 syslog 메시지를 모두 선택하려면 구성 파일에 다음 텍스트를 추가합니다.kern.*우선 순위
crit이상에서 모든 메일 syslog 메시지를 선택하려면 다음 양식을 사용하십시오.mail.critinfo또는debug우선 순위가 있는 메시지를 제외한 모든 cron syslog 메시지를 선택하려면 다음 형식으로 구성을 설정합니다.cron.!info,!debug
-
FACILITY 는 특정 syslog 메시지를 생성하는 하위 시스템을 지정합니다. 예를 들어
- 속성 기반 필터
속성 기반 필터를 사용하면
시간 생성또는 syslog 태그와 같은 속성으로syslog 메시지를 필터링할 수 있습니다. 속성에 대한 자세한 내용은 “속성” 을 참조하십시오. 지정된 각 속성을 표 23.1. “속성 기반 비교 작업” 에 나열된 compare-operations 중 하나를 사용하여 특정 값과 비교할 수 있습니다. 속성 이름과 비교 작업은 모두 대소문자를 구분합니다.속성 기반 필터는 콜론(
:)으로 시작해야 합니다. 필터를 정의하려면 다음 구문을 사용합니다.:PROPERTY, [!]COMPARE_OPERATION, "STRING"다음과 같습니다.
- PROPERTY 속성은 원하는 속성을 지정합니다.
-
선택적 느낌표(!
!)는 compare-operation의 출력을 부정합니다. 다른 부울 연산자는 현재 속성 기반 필터에서 지원되지 않습니다. - COMPARE_OPERATION 속성은 표 23.1. “속성 기반 비교 작업” 에 나열된 비교 작업 중 하나를 지정합니다.
STRING 속성은 속성이 제공하는 텍스트와 비교되는 값을 지정합니다. 이 값은 따옴표로 묶어야 합니다. 문자열 내의 특정 문자(예: 따옴표(예:
"))를 이스케이프하려면 백슬래시 문자(\)를 사용합니다.Expand 표 23.1. 속성 기반 비교 작업 compare-operation 설명 contains제공된 문자열이 속성에서 제공하는 텍스트의 모든 부분과 일치하는지 확인합니다.
isequal제공된 문자열을 속성에서 제공하는 모든 텍스트와 비교합니다. 이 두 값은 정확히 일치해야 합니다.
startswith제공된 문자열이 속성에서 제공하는 텍스트의 시작 부분에 정확히 있는지 여부를 확인합니다.
regex제공된 POSIX BRE(Basic Regular Expression)를 속성에서 제공하는 텍스트와 비교합니다.
ereregex제공된 POSIX ERE(Extended Regular Expression) 정규식을 속성에서 제공하는 텍스트와 비교합니다.
isempty속성이 비어 있는지 확인합니다. 값이 삭제됩니다. 이는 정규화 결과에 따라 일부 필드가 채워질 수 있는 정규화된 데이터로 작업할 때 특히 유용합니다.
예 23.2. 속성 기반 필터
다음은
/etc/octets.conf에 지정할 수 있는 속성 기반 필터의 몇 가지 예입니다.메시지 텍스트에 문자열오류가포함된 syslog 메시지를 선택하려면 다음을 사용합니다.:msg, contains, "error"다음 필터는 호스트 이름
host1에서 수신한 syslog 메시지를 선택합니다.:hostname, isequal, "host1"치명적이고 오류 사이에 텍스트가 없는 오류(예:
)에 대한 언급이 포함되지 않은 syslog 메시지를 선택하려면 다음을 입력합니다.fatallib오류:msg, !regex, "fatal .* error"
- 표현식 기반 필터
표현식 기반 필터는 정의된 산술, 부울 또는 문자열 작업에 따라 syslog 메시지를 선택합니다. 표현식 기반 필터는 RainerScript 라는 rsyslog의 자체 스크립팅 언어를 사용하여 복잡한 필터를 빌드합니다.
표현식 기반 필터의 기본 구문은 다음과 같습니다.
if EXPRESSION then ACTION else ACTION다음과 같습니다.
EXPRESSION 속성은 평가할 표현식을 나타냅니다. 예를 들어
$msg는 'DEVNAME' 또는.$syslogfacility-text == 'local0'로 시작합니다및또는연산자를 사용하여 단일 필터에서 둘 이상의 표현식을 지정할 수 있습니다.rsyslog 는 표현식 기반 필터에서 대소문자를 구분하지 않는 비교를 지원합니다. EXPRESSION 속성 내에서
contains_i또는startswith_icompare-operations를 사용할 수 있습니다. 예를 들면 다음과 같습니다.$hostname이with_i "<HOST_NAME>"을 시작하는 경우LATE.-
expression이 true 값을 반환하면 action에 수행할 작업을 나타냅니다.Represents an action to be performed if the expression returns the value
true. 이 작업은 단일 작업 또는 curly braces로 묶은 임의의 복잡한 스크립트일 수 있습니다. 새 줄 시작 시 표현식 기반 필터는 키워드로 표시됩니다. 그런 다음 키워드는 Process에서 EXPRESSION 을 분리합니다. 선택적으로 else 키워드를 사용하여 조건이 충족되지 않는 경우 수행할 작업을 지정할 수 있습니다.
표현식 기반 필터를 사용하면 예 23.3. “표현식 기반 필터” 에서처럼 curly braces로 묶은 스크립트를 사용하여 조건을 중첩할 수 있습니다. 이 스크립트를 사용하면 표현식 내에서 기능/우선 기반 필터를 사용할 수 있습니다. 그러나 여기서는 속성 기반 필터를 사용하지 않는 것이 좋습니다. RainerScript는 특수 함수
re_match()및re_extract()를 사용하여 정규식을 지원합니다.예 23.3. 표현식 기반 필터
다음 표현식에는 두 개의 중첩된 조건이 포함되어 있습니다. prog1 이라는 프로그램에서 생성된 로그 파일은 메시지에 "test" 문자열이 있는지에 따라 두 개의 파일로 나뉩니다.
if $programname == 'prog1' then { action(type="omfile" file="/var/log/prog1.log") if $msg contains 'test' then action(type="omfile" file="/var/log/prog1test.log") else action(type="omfile" file="/var/log/prog1notest.log") }
다양한 표현식 기반 필터의 예제를 보려면 “온라인 문서” 를 참조하십시오. RainerScript는 rsyslog의 새로운 구성 형식을 기반으로합니다. 23.3절. “새 구성 형식 사용”
23.2.2. 작업 링크 복사링크가 클립보드에 복사되었습니다!
작업은 이미 정의된 선택기에서 필터링한 메시지로 수행할 작업을 지정합니다. 다음은 규칙에 정의할 수 있는 몇 가지 작업입니다.
- 로그 파일에 syslog 메시지 저장
대부분의 작업은 syslog 메시지가 저장된 로그 파일을 지정합니다. 이 작업은 이미 정의된 선택기 다음에 파일 경로를 지정하여 수행됩니다.
FILTER PATH여기서 first LTER는 사용자 지정 선택기와 PATH 를 나타내는 대상 파일의 경로입니다.
예를 들어 다음 규칙은 모든 cron syslog 메시지를 선택하는 선택기와 이를
/var/log/cron.log로그 파일에 저장하는 작업으로 구성됩니다.cron.* /var/log/cron.log기본적으로 syslog 메시지가 생성될 때마다 로그 파일이 동기화됩니다. 동기화를 생략하도록 지정한 파일 경로의 접두사로 대시 표시(
-)를 사용합니다.FILTER -PATH쓰기 시도 직후 시스템이 종료되면 정보가 손실될 수 있습니다. 그러나 이 설정은 특히 매우 자세한 로그 메시지를 생성하는 프로그램을 실행하는 경우 성능을 향상시킬 수 있습니다.
지정된 파일 경로는 정적 또는 동적 일 수 있습니다. 정적 파일은 위 예제와 같이 고정 파일 경로로 표시됩니다. 동적 파일 경로는 수신된 메시지에 따라 다를 수 있습니다. 동적 파일 경로는 템플릿과 물음표(? ) 접두사
로표시됩니다.FILTER ?DynamicFile여기서 DynamicFile 은 출력 경로를 수정하는 사전 정의된 템플릿의 이름입니다. 대시 접두사(
-)를 사용하여 동기화를 비활성화할 수도 있으며, 콜론으로 구분된 여러 템플릿을 사용할 수도 있습니다.템플릿에 대한 자세한 내용은 “동적 파일 이름 생성” 을 참조하십시오.지정한 파일이 기존 터미널 또는
/dev/console장치인 경우 각각 X Window System을 사용할 때 표준 출력(특정 터미널처리) 또는 콘솔(특별/dev/console-handling 사용)으로 syslog 메시지가 전송됩니다.- 네트워크를 통해 syslog 메시지 전송
rsyslog 를 사용하면 네트워크를 통해 syslog 메시지를 보내고 받을 수 있습니다. 이 기능을 사용하면 한 시스템에서 여러 호스트의 syslog 메시지를 관리할 수 있습니다. syslog 메시지를 원격 머신으로 전달하려면 다음 구문을 사용하십시오.
@(zNUMBER)HOST:PORT다음과 같습니다.
-
at 기호(
@)는 syslog 메시지가UDP프로토콜을 사용하여 호스트로 전달됨을 나타냅니다.TCP프로토콜을 사용하려면@@) 사이에 공백이 없는 부호에서 두 개를 사용합니다. -
선택적
zNUMBER설정은 syslog 메시지에 대해 zlib 압축을 활성화합니다. NUMBER 속성은 압축 수준을 지정합니다(1에서 가장 낮은 부터 9~최대). 압축은rsyslogd에서 자동으로 확인되며, 압축된 압축이 있는 경우 60바이트 이하의 메시지가 압축되지 않는 경우에만 메시지가 압축됩니다. - HOST 속성은 선택한 syslog 메시지를 수신하는 호스트를 지정합니다.
PORT 속성은 호스트 시스템의 포트를 지정합니다.
IPv6주소를 호스트로 지정할 때 주소를 대괄호([,])로 묶습니다.예 23.4. 네트워크를 통해 syslog 메시지 전송
다음은 네트워크를 통해 syslog 메시지를 전달하는 작업의 몇 가지 예입니다(모든 작업이 우선 순위가 있는 모든 메시지를 선택하는 선택기와 함께 시작됨).
UDP프로토콜을 통해192.168.0.1으로 메시지를 전달하려면 다음을 입력합니다.. @192.168.0.1포트 6514 및
TCP프로토콜을 사용하여 메시지를 "example.com"으로 전달하려면 다음을 사용합니다.. @@example.com:6514다음은 zlib (level 9 압축)로 메시지를 압축하고
UDP프로토콜을 사용하여2001:db8::1로 전달합니다.. @(z9)[2001:db8::1]
-
at 기호(
- 출력 채널
출력 채널은 주로 로그 파일이 확장될 수 있는 최대 크기를 지정하는 데 사용됩니다. 이는 로그 파일 순환에 매우 유용합니다(자세한 내용은 23.2.5절. “로그 순환”참조). 출력 채널은 기본적으로 출력 작업에 대한 정보 컬렉션입니다. 출력 채널은
$outchannel지시문으로 정의됩니다. 출력 채널을/etc/journal.conf에 정의하려면 다음 구문을 사용하십시오.$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION다음과 같습니다.
- NAME 속성은 출력 채널의 이름을 지정합니다.
- FILE_NAME 속성은 출력 파일의 이름을 지정합니다. 출력 채널은 파이프, 터미널 또는 기타 종류의 출력이 아닌 파일에만 쓸 수 있습니다.
- MAX_SIZE 속성은 지정된 파일(GB)이 증가할 수 있는최대 크기를 나타냅니다. 이 값은 바이트 단위로 지정됩니다.
rhcos 속성은 MAX_SIZE 에 정의된 최대 크기가 충돌할 때 수행되는 작업을 지정합니다.
정의된 출력 채널을 규칙 내에서 작업으로 사용하려면 다음을 입력합니다.
FILTER :omfile:$NAME예 23.5. 출력 채널 로그 회전
다음 출력은 출력 채널을 사용하여 간단한 로그 회전을 보여줍니다. 먼저 출력 채널은
$outchannel지시문을 통해 정의됩니다.$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script그런 다음 우선 순위로 모든 syslog 메시지를 선택하고 실행된 syslog 메시지에서 이전에 정의된 출력 채널을 실행하는 규칙에 사용됩니다.
. :omfile:$log_rotation제한이 100MB이면
/home/joe/log_rotation_script가 실행됩니다. 이 스크립트는 파일을 다른 폴더로 이동하는 것을 포함하거나, 특정 콘텐츠를 편집하거나 간단히 제거할 수 있습니다.
- 특정 사용자에게 syslog 메시지 전송
-
rsyslog 는 예 23.7. “여러 작업 지정”같이 메시지를 보낼 사용자의 사용자 이름을 지정하여 syslog 메시지를 특정 사용자에게 보낼 수 있습니다. 둘 이상의 사용자를 지정하려면 각 사용자 이름을 쉼표( )로 구분합니다.
현재 로그인한 모든 사용자에게 메시지를 보내려면 별표(*)를 사용합니다. - 프로그램 실행
rsyslog 를 사용하면 선택한 syslog 메시지에 대한 프로그램을 실행하고
system()호출을 사용하여 쉘에서 프로그램을 실행할 수 있습니다. 실행할 프로그램을 지정하려면 캐럿 문자(^)로 접두사를 지정합니다. 결과적으로 수신된 메시지를 포맷하고 한 줄 매개 변수로 지정된 실행 파일에 전달하는 템플릿을 지정합니다(템플릿에 대한 자세한 내용은 23.2.3절. “템플릿”참조).FILTER ^EXECUTABLE; TEMPLATE여기서 FILTER 조건의 출력은 EXECUTABLE 으로 표시되는 프로그램에 의해 처리됩니다. 이 프로그램은 유효한 실행 파일일 수 있습니다. TEMPLATE 을 형식 템플릿의 이름으로 바꿉니다.
예 23.6. 프로그램 실행
다음 예에서 우선순위가 있는 syslog 메시지가 선택되고
템플릿템플릿으로 포맷되고 test-program 프로그램에 매개 변수로 전달되며, 이 매개변수는 제공된 매개 변수로 실행됩니다.. ^test-program;template주의모든 호스트에서 메시지를 수락하고 쉘 실행 작업을 사용하는 경우 명령 삽입에 취약할 수 있습니다. 공격자는 작업에서 실행되도록 지정한 프로그램에서 명령을 삽입하고 실행할 수 있습니다. 가능한 보안 위협을 방지하려면 쉘 실행 작업을 철저히 고려합니다.
- 데이터베이스에 syslog 메시지 저장
선택한 syslog 메시지는 데이터베이스 작성기 작업을 사용하여 데이터베이스 테이블에 직접 쓸 수 있습니다. 데이터베이스 작성자는 다음 구문을 사용합니다.
:PLUGIN:DB_HOST,DB_NAME,DB_USER,DB_PASSWORD;TEMPLATE다음과 같습니다.
-
PLUGIN 은 데이터베이스 작성(예:
ommysql플러그인)을 처리하는 지정된 플러그인을 호출합니다. - DB_HOST 속성은 데이터베이스 호스트 이름을 지정합니다.
- DB_NAME 속성은 데이터베이스 이름을 지정합니다.
- DB_USER 속성은 데이터베이스 사용자를 지정합니다.
- DB_PASSWORD 속성은 앞서 언급한 데이터베이스 사용자와 함께 사용되는 암호를 지정합니다.
TEMPLATE 속성은 syslog 메시지를 수정하는 템플릿의 선택적 사용을 지정합니다. 템플릿에 대한 자세한 내용은 23.2.3절. “템플릿” 을 참조하십시오.
중요현재 rsyslog 는
MySQL및PostgreSQL데이터베이스만 지원합니다.MySQL및PostgreSQL데이터베이스 작성기 기능을 사용하려면 rsyslog-mysql 및 rsyslog-pgsql 패키지를 각각 설치합니다. 또한/etc/journal.conf 구성 파일에 적절한 모듈을 로드해야 합니다.module(load=”ommysql”) # Output module for MySQL support module(load=”ompgsql”) # Output module for PostgreSQL supportrsyslog 모듈에 대한 자세한 내용은 23.6절. “Rsyslog 모듈 사용” 을 참조하십시오.
또는
omlibdb모듈 (supports)에서 제공하는 일반 데이터베이스 인터페이스를 사용할 수도 있습니다. firebird/Interbase, MS SQL, Sybase, SQLLite, Ingres, Oracle, mSQL).
-
PLUGIN 은 데이터베이스 작성(예:
- syslog 메시지 삭제
선택한 메시지를 삭제하려면
stop을 사용합니다.삭제 작업은 주로 추가 처리를 수행하기 전에 메시지를 필터링하는 데 사용됩니다. 로그 파일을 채울 일부 반복 메시지를 생략하려는 경우 유용할 수 있습니다. 삭제 작업 결과는 지정된 구성 파일에서 작업 목록 위에 이러한 작업을 배치하기 위해 지정된 위치에 따라 달라집니다. 메시지가 삭제되면 나중에 설정 파일 줄에서 검색할 수 없습니다.
예를 들어 다음 규칙은
local5.*필터와 일치하는 모든 메시지를 삭제합니다.local5.* stop다음 예에서 모든 cron syslog 메시지가 삭제됩니다.
cron.* stop참고rsyslog 7 이전 버전에서 틸드 문자(
~)는 syslog 메시지를 삭제하는것을 중지하는 대신 사용되었습니다.
여러 작업 지정
각 선택기에 대해 여러 작업을 지정할 수 있습니다. 하나의 선택기에 대해 여러 작업을 지정하려면 각 작업을 별도의 줄에 작성하고 앞에 (&) 문자를 추가합니다.
FILTER ACTION
& ACTION
& ACTION
여러 작업을 지정하면 지정된 선택기를 한 번만 평가해야 하므로 원하는 결과의 전체 성능이 향상됩니다.
예 23.7. 여러 작업 지정
다음 예에서 중요한 우선 순위(crit)가 있는 모든 커널 syslog 메시지는 템플릿 임시 에 의해 처리되고 테스트 프로그램 실행 파일에 전달되고 UDP 프로토콜을 통해 192.168.0.1 으로 전달됩니다.
kern.=crit user1
& ^test-program;temp
& @192.168.0.1
모든 작업 뒤에 메시지를 포맷하는 템플릿이 올 수 있습니다. 템플릿을 지정하려면 별칭(; )이 있는 작업 접미사를 지정하고 템플릿 이름을 지정합니다. 템플릿에 대한 자세한 내용은 23.2.3절. “템플릿” 을 참조하십시오.
작업에 사용하기 전에 템플릿을 정의해야 합니다. 그러지 않으면 무시됩니다. 즉, 템플릿 정의에서 항상 /etc/journal.conf의 규칙 정의 앞에 와야 합니다.
23.2.3. 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
rsyslog 에 의해 생성된 모든 출력은 템플릿을 사용하여 필요에 따라 수정하고 포맷할 수 있습니다. 템플릿을 생성하려면 /etc/journal.conf에서 다음 구문을 사용합니다.
template(name=”TEMPLATE_NAME” type=”string” string="text %PROPERTY% more text" [option.OPTION="on"])
다음과 같습니다.
-
template()는 템플릿을 정의하는 블록을 도입하는 지시문입니다. -
TEMPLATE_NAME필수 인수는 템플릿을 참조하는 데 사용됩니다.TEMPLATE_NAME은 고유해야 합니다. -
유형필수 인수는 "list", "subtree", "string" 또는 "plugin" 값 중 하나를 가져올 수 있습니다. -
string인수는 실제 템플릿 텍스트입니다. 이 텍스트 내에서 \n 줄 바꿈 또는 \r과 같은 특수 문자를 사용할 수 있습니다.With this text, special characters, such as \n for newline or \r for carriage return. % 또는 "와 같은 기타 문자는 문자 그대로 사용하려는 경우 이스케이프해야 합니다. 이 텍스트 내에서 새 줄의 경우\n또는 캐리지 리턴의 경우\r와 같은 특수 문자를 사용할 수 있습니다.%또는"와 같은 기타 문자는 문자 그대로 사용하려는 경우 이스케이프해야 합니다. -
두 백분율 기호(
%) 간에 지정된 텍스트는 syslog 메시지의 특정 콘텐츠에 액세스할 수 있는 속성 을 지정합니다. 속성에 대한 자세한 내용은 “속성” 을 참조하십시오. OPTION속성은 템플릿 기능을 수정하는 옵션을 지정합니다. 현재 지원되는 템플릿 옵션은 SQL 쿼리로 텍스트를 포맷하는 데 사용되는sql및stdsql또는 JSON 처리에 적합한 텍스트를 포맷하는 json과 속성 이름의대소문자를 구분하는 대소문자를 구분합니다.참고데이터베이스 작성자는
sql또는stdsql옵션이 템플릿에 지정되어 있는지 확인합니다. 그렇지 않은 경우 데이터베이스 작성자는 작업을 수행하지 않습니다. 이는 SQL 삽입과 같은 가능한 보안 위협을 방지하기 위한 것입니다.자세한 내용은 23.2.2절. “작업” 의 데이터베이스에서 syslog 메시지 저장 섹션을 참조하십시오.
동적 파일 이름 생성
템플릿을 사용하여 동적 파일 이름을 생성할 수 있습니다. 파일 경로의 일부로 속성을 지정하면 syslog 메시지를 분류하는 편리한 방법인 각 고유 속성에 대해 새 파일이 생성됩니다.
예를 들어 메시지에서 타임스탬프를 추출하는 timegenerated 속성을 사용하여 각 syslog 메시지에 고유한 파일 이름을 생성합니다.
template(name=”DynamicFile” type=”list”) {
constant(value=”/var/log/test_logs/”)
property(name=”timegenerated”)
constant(value”-test.log”)
}
$template 지시문은 템플릿만 지정합니다. 이를 적용하려면 규칙 내에서 사용해야 합니다. /etc/octets.conf 에서 질문 표시(?)를 작업 정의에서 사용하여 동적 파일 이름 템플릿을 표시합니다.
. ?DynamicFile
속성
템플릿 내에 정의된 속성(두%기호(%))을 사용하면 속성 교체 기를 사용하여 syslog 메시지의 다양한 콘텐츠에 액세스할 수 있습니다. 템플릿 내부에 속성을 정의하려면 두 개의 따옴표("…") 사이에 속성을 정의하려면 다음 구문을 사용합니다.
%PROPERTY_NAME:FROM_CHAR:TO_CHAR:OPTION%
다음과 같습니다.
-
PROPERTY_NAME 속성은 속성의 이름을 지정합니다. 사용 가능한 모든 속성 및 자세한 설명은 사용 가능한 속성 섹션의
rsyslog.conf(5)매뉴얼 페이지에서 확인할 수 있습니다. -
FROM_CHAR 및 TO_CHAR 속성은 지정된 속성이 작동할 문자 범위를 나타냅니다. 또는 정규식을 사용하여 문자 범위를 지정할 수 있습니다. 이렇게 하려면
R문자를 FROM_CHAR 속성으로 설정하고 원하는 정규식을 TO_CHAR 속성으로 지정합니다. -
OPTION 속성은 입력을 소문자로 변환하는
소문자옵션과 같은 속성 옵션을 지정합니다. 사용 가능한 모든 속성 옵션 목록과 자세한 설명은 Property Options 섹션 아래에 있는rsyslog.conf(5)매뉴얼 페이지에서 확인할 수 있습니다.
다음은 간단한 속성의 몇 가지 예입니다.
다음 속성은 syslog 메시지의 전체 메시지 텍스트를 가져옵니다.
%msg%다음 속성은 syslog 메시지의 메시지 텍스트의 처음 두 문자를 가져옵니다.
%msg:1:2%다음 속성은 syslog 메시지의 전체 메시지 텍스트를 가져오고 마지막 줄 피드 문자를 삭제합니다.
%msg:::drop-last-lf%다음 속성은 syslog 메시지가 수신될 때 생성되는 타임 스탬프의 처음 10자를 가져와서 RFC 3999 날짜 표준에 따라 포맷합니다.
%timegenerated:1:10:date-rfc3339%
템플릿 예
이 섹션에서는 rsyslog 템플릿의 몇 가지 예를 보여줍니다.
예 23.8. “자세한 syslog 메시지 템플릿” 메시지의 심각도, 기능, 메시지가 수신될 때의 타임스탬프, 호스트 이름, 메시지 텍스트, 메시지 텍스트 등을 출력하도록 syslog 메시지를 포맷하는 템플릿을 표시합니다.
예 23.8. 자세한 syslog 메시지 템플릿
template(name=”verbose” type=”list”) {
property(name="syslogseverity”)
property(name="syslogfacility”)
property(name="timegenerated”)
property(name="HOSTNAME”)
property(name="syslogtag”)
property(name="msg”)
constant(value=”\n")
}
예 23.9. “월경 메시지 템플릿” 기존 wall 메시지와 유사한 템플릿을 표시합니다(로그인되어 있고 mesg(1) 권한이 yes로 설정된 모든 사용자에게 전송됨). 이 템플릿은 새 줄에 호스트 이름, 메시지 태그 및 타임스탬프와 함께 메시지 텍스트를 출력하고( \r 및 \n을 사용하여) 벨( \7사용)을 사용하여 메시지를 출력합니다.
예 23.9. 월경 메시지 템플릿
template(name=”wallmsg” type=”list”) {
constant(value="\r\n\7Message from syslogd@”)
property(name="HOSTNAME”)
constant(value=” at ")
property(name="timegenerated”)
constant(value=" ...\r\n ”)
property(name="syslogtag”)
constant(value=” “)
property(name="msg”)
constant(value=”\r\n”)
}
예 23.10. “데이터베이스 형식 메시지 템플릿” 데이터베이스 쿼리로 사용할 수 있도록 syslog 메시지를 포맷하는 템플릿을 표시합니다. template 옵션으로 지정된 템플릿 끝에 sql 옵션을 사용합니다. 데이터베이스 작성자가 메시지를 MySQL SQL 쿼리로 포맷하도록 지시합니다.
예 23.10. 데이터베이스 형식 메시지 템플릿
template(name="dbFormat" type="list" option.sql="on") {
constant(value="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag)")
constant(value=" values ('")
property(name="msg")
constant(value="', ")
property(name="syslogfacility")
constant(value=", '")
property(name="hostname")
constant(value="', ")
property(name="syslogpriority")
constant(value=", '")
property(name="timereported" dateFormat="mysql")
constant(value="', '")
property(name="timegenerated" dateFormat="mysql")
constant(value="', ")
property(name="iut")
constant(value=", '")
property(name="syslogtag")
constant(value="')")
}
rsyslog 에는 RSYSLOG_ 접두사로 식별되는 사전 정의된 템플릿 세트도 포함되어 있습니다. 이는 syslog 사용을 위해 예약되어 있으며 충돌을 피하기 위해 이 접두사를 사용하여 템플릿을 생성하지 않는 것이 좋습니다. 다음 목록은 이러한 사전 정의된 템플릿을 정의와 함께 보여줍니다.
RSYSLOG_DebugFormat속성 문제 해결에 사용되는 특수 형식입니다.
template(name=”RSYSLOG_DebugFormat” type=”string” string="Debug line with all properties:\nFROMHOST: '%FROMHOST%', fromhost-ip: '%fromhost-ip%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,\nsyslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',\nTIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',\nmsg: '%msg%'\nescaped msg: '%msg:::drop-cc%'\nrawmsg: '%rawmsg%'\n\n")RSYSLOG_SyslogProtocol23FormatIETF의 인터넷 개발 ietf-syslog-protocol-23에 지정된 형식은 새로운 syslog 표준 RFC로 간주됩니다.
template(name=”RSYSLOG_SyslogProtocol23Format” type=”string” string="%PRI%1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n ")RSYSLOG_FileFormatTraditionalFileFormat과 유사한 최신 스타일 로그 파일 형식이지만, 높은 정밀도 타임 스탬프 및 시간대 정보가 있습니다.
template(name="RSYSLOG_FileFormat" type="list") { property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") }RSYSLOG_TraditionalFileFormat단정밀도 시간 스탬프가 짧은 이전 기본 로그 파일 형식입니다.
template(name="RSYSLOG_TraditionalFileFormat" type="list") { property(name="timestamp") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") }RSYSLOG_ForwardFormat높은 정확도의 타임스탬프 및 시간대 정보가 있는 전달 형식입니다.
template(name="ForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") }RSYSLOG_TraditionalForwardFormat단정밀도가 낮은 타임스탬프가 있는 기존 전달 형식입니다.
template(name="TraditionalForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") }
23.2.4. 글로벌 정책 링크 복사링크가 클립보드에 복사되었습니다!
글로벌 지시문은 rsyslogd 데몬에 적용되는 구성 옵션입니다. 일반적으로 rsyslogd 데몬 또는 다음 규칙의 동작에 영향을 미치는 특정 사전 정의된 변수의 값을 지정합니다. 모든 글로벌 지시문은 글로벌 구성 블록으로 묶습니다. 다음은 로그 메시지에 대한 로컬 호스트 이름을 재정의하는 global 지시문의 예입니다.
global(localHostname=”machineXY”)
/etc/journal.conf 구성 파일에 여러 지시문을 정의할 수 있습니다. 지시문은 동일한 지시문이 다시 발생할 때까지 모든 구성 옵션의 동작에 영향을 미칩니다. 전역 지시문을 사용하여 작업, 큐 및 디버깅을 구성할 수 있습니다. 사용 가능한 모든 구성 지시문의 포괄적인 목록은 “온라인 문서” 에서 확인할 수 있습니다. 현재 $ 기반 구문을 대체하는 새로운 구성 형식이 개발되었습니다( 23.3절. “새 구성 형식 사용”참조). 그러나 클래식 글로벌 지시문은 레거시 형식으로 계속 지원됩니다.
23.2.5. 로그 순환 링크 복사링크가 클립보드에 복사되었습니다!
다음은 샘플 /etc/logrotate.conf 구성 파일입니다.
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# uncomment this if you want your log files compressed
compress
샘플 구성 파일의 모든 행은 모든 로그 파일에 적용되는 전역 옵션을 정의합니다. 이 예에서는 매주 로그 파일이 순환되고 순환된 로그 파일은 4주 동안 보관되며, 순환된 모든 로그 파일은 gzip 에 의해 .gz 형식으로 압축됩니다. 해시 기호(#)로 시작하는 행은 주석이며 처리되지 않습니다.
특정 로그 파일에 대한 구성 옵션을 정의하고 글로벌 옵션에 배치할 수 있습니다. 그러나 /etc/logrotate.d/ 디렉토리에 있는 특정 로그 파일에 대해 별도의 구성 파일을 생성하고 여기에 구성 옵션을 정의하는 것이 좋습니다.
다음은 /etc/logrotate.d/ 디렉토리에 배치된 구성 파일의 예입니다.
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
이 파일의 구성 옵션은 /var/log/message 로그 파일에 만 적용됩니다. 여기에서 지정한 설정은 가능한 경우 전역 설정을 재정의합니다. 따라서 순환된 /var/log/ catalog 로그 파일은 글로벌 옵션에 정의된 4주가 아닌 5주 동안 유지됩니다.
다음은 logrotate 구성 파일에 지정할 수 있는 일부 지시문 목록입니다.
weekly- 매주 수행할 로그 파일의 회전을 지정합니다. 유사한 지시문은 다음과 같습니다.-
daily -
monthly -
yearly
-
compress- 순환된 로그 파일의 압축을 활성화합니다. 유사한 지시문은 다음과 같습니다.-
nocompress -
compresscmd- 압축에 사용할 명령을 지정합니다. -
uncompresscmd -
compressext- 압축에 사용할 확장을 지정합니다. -
compressoptions- 사용되는 압축 프로그램으로 전달할 옵션을 지정합니다. -
delaycompress- 로그 파일의 압축을 로그 파일의 다음 회전으로 연기합니다.
-
-
회전 INTEGER- 특정 주소로 전송되기 전에 로그 파일이 발생하는 회전 횟수를 지정합니다. 0 값을 지정하면 순환하지 않고 이전 로그 파일이 제거됩니다. mail ADDRESS- 이 옵션은rotate지시문에서 지정된 주소에 대해 정의된 횟수만큼 순환된 로그 파일의 우편을 활성화합니다. 유사한 지시문은 다음과 같습니다.-
nomail -
mailfirst- 방금 순환된 로그 파일이 about-to-expire 로그 파일이 아니라 메일로 전송되도록 지정합니다. -
maillast- 방금 순환된 로그 파일 대신 about-to-expire 로그 파일을 메일로 전송하도록 지정합니다. 이는mail이 활성화된 경우 기본 옵션입니다.
-
지시문 및 다양한 구성 옵션의 전체 목록은 logrotate(5) 매뉴얼 페이지를 참조하십시오.
23.2.6. Open 파일의 제한 사항 늘리기 링크 복사링크가 클립보드에 복사되었습니다!
특정 상황에서 rsyslog 는 열린 파일의 최대 수에 대한 제한을 초과합니다. 따라서 rsyslog 가 새 파일을 열 수 없습니다.
rsyslog 에서 열린 파일의 제한을 늘리려면 다음을 수행합니다.
다음 콘텐츠를 사용하여 /etc/systemd/system/rsylog.service.d/increase_nofile_limit.conf 파일을 만듭니다.
[Service]
LimitNOFILE=16384