jlogmon

   jlogmon

  사용법


	jlogmon -V
	jlogmon -c config [-i interval][-n|-N][-B][-s | -u offset_file][-E]
	jlogmon -f 'fname:patterns' [-a action] [-i interval][-n|-N][-B][-s |-u offset_file][-E]
	jlogmon -p 'patterns' [-a action] [-i interval][-n|-N][-B][-s |-u offset_file][-E] file ...

	Options are as follows:

	-?                   print this help
	-a action            action when finding matched line
	-B                   run in the background
	-c config            specify configuration file
	-E                   stop command after checking existing data
	-f 'fname:patterns'  specify file name and patterns; pattern format: pat/pat/...
	-i interval          interval time(second)
	-n                   prefix file name without directory name
	-N                   prefix full file name
	-p 'patterns'        set match-pattern; format: pat/pat/...
	-P                   print patterns for test
	-s                   read existing data
	-u offset_file       specify file containing file name and its offset
	-V                   show version
	-w                   disable to print WARNING messages
  설명

jlogmon은 시스템에서 로그를 저장하는 파일을 주기적으로 감시하여 새로운 메세지가 로그 파일에 기록되면, 새롭게 기록된 메세지를 사용자에게 알려준다. 메세지의 단위는 하나의 라인이다.
jlogmon은 여러개의 파일을 동시에 모니터할 수 있고, 새로운 메세지가 기록될 때, 새로 기록된 전체 메세지를 사용자에게 알려주거나 메세지 중에 일정 패턴이 있는 메세지 라인만 선별하여 사용자에게 알려준다.
jlogmon 은 로그 파일의 크기를 비교하여 이전의 크기보다 크기가 늘어나면 새로운 메세지가 들어왔다고 판단하고, 이전 크기 이후의 데이타를 새 메세지로 간주한다.
만일 로그 파일의 크기가 이전 보다 적으면, 로그 파일이 switching된 것으로 보고, 현재 로그 파일에 있는 메세지를 모두 새로운 메세지로 간주한다.
로그파일의 크기가 증가하여도 NEWLINE(줄바꿈 문자)이 없으면, 새로운 메세지가 도착했다고 판단하지 않는다.

메세지를 사용자에게 알려주는 방법에는 세가지의 경우가 있다.


	1. 표준출력에 출력하는 방법.
	2. 특정파일에 저장하는 방법.
	3. 사용자가 지정한 명령어를 실행하는 방법
3 번의 경우, mailx 명령어를 사용하면 새로운 메세지가 도착할 때, 관리자에게 메일 보낼 수 있다. 그리고 sendmsg 명령어를 사용하면 logviewer 화면에 메세지를 전달할 수 있다.

다음은 /var/adm/messages 파일에 'WARNING' 또는 'ERROR' 이라는 단어가 포함된 메세지가 새로 기록되거나 su 명령어를 사용하여 root 사용자로 전환하는 경우에 관리자에게 메일을 보내고 root 사용자로 전환시에는 sendmsg 명령어를 사용하여 logviewer에 메세지를 전달하는 것을 설정하는 예제이다.

su 명령어를 실행하면 /var/adm/sulog 파일에 전환된 내용이 저장된다. root 사용자로 전환했을 경우 다음과 같은 메세지가 기록된다.
	SU 07/11 04:31 + pts/4 guest-root

우선 다음과 같이 구성파일(mon.conf)을 만든다.

FILE /var/adm/messages {
    action {
	| /usr/bin/mailx -s 'warning from /var/adm/message' admin@junsoft.com
    }
    match {
	WARNING
	ERROR
    }
}
FILE /var/adm/sulog {
    action {
	| mailx -s 'su root' admin@junsoft.com
	| /opt/JSparm/bin/sendmsg -s 192.168.10.8
    }
    match {
	-root
    }
}

그리고 다음과 같이 jlogmon 명령어를 실행한다.

# /opt/JSparm/bin/jlogmon -c mon.conf -i 60

위의 명령어는 60초 간격으로 mon.conf 에서 지정한 /var/adm/messages 와 /var/adm/sulog 파일을 조사하여 그 파일의 크기가 변경되면, 추가된 메세지중에 지정한 조건에 맞는 메세지가 있으면, 지정한 명령어를 실행하고 메세지를 그 명령어의 표준 입력으로 전달한다.

구성파일 작성에 대한 자세한 내용은 아래의 "구성파일 작성법" 에서 설명한다.

다음은 구성파일을 지정하지 않고 명령어 라인에서 지정하는 예제이다.

# /opt/JSparm/bin/jlogmon -p 'WARNING/ERROR' -a - -a /log/warning_error.log -i 10 /var/adm/messages

위의 명령어는 /var/adm/messages 파일을 10초 간격으로 조사하여 WARNING 이나 ERROR 글자가 포한된 새로운 메세지가 기록되면 그 내용을 표준 출력에 표시하고 /log/warning_error.log 파일에 저장한다.

다음은 구성파일을 사용하지 않고 명령어 라인상에서 간단히 실행하는 예제이다. 다음의 두개의 명령어는 같은 결과를 가진다.

# /opt/JSparm/bin/jlogmon -s -p 'WARNING' /var/adm/messages

# grep 'WARNING' /var/adm/messages

# /opt/JSparm/bin/jlogmon -s -p + /var/adm/messages

# cat /var/adm/messages

jlogmon 명령어는 사용할 때, -s 또는 -i 또는 -u 옵션중에 최소한 하나는 사용하여야 한다.

다음은 jlogmon 명령어의 옵션에 대한 설명이다.

옵션설명
-a action -a action 옵션은 지정한 파일에 조건에 맞는 메세지가 기록될 때, 그 메세지를 어떻게 처리할 것 인가를 지정한다.
action에는 세가지의 경우가 있다.

1 표준출력에 출력하는 방법 -
2 특정파일에 저장하는 방법 filename
3 사용자가 지정한 명령어를 실행하는 방법 | command

| 버티컬 바로 시작하는 것은 그 뒷부문을 명령어로 인식하여 실행한다.
- 대쉬 한 글자만 있으면 표준출력으로 출력한다.
그외는 파일로 인식하여 그 파일을 APPEND 모드로 오픈하여 새로운 메세지를 저장한다.
action에 지정한 파일은 계속 오픈해 두지 않는다. 출력할 메세지가 있을 때 마다 오픈하고 클로즈한다.
action에 명령어를 지정할 때, 반드시 인용부호로 둘러싸야 한다. 그렇지 않으면 쉘에서 파이프 기호를 인식한다.
특수문자 한 글자로 된 것은 파일명으로 사용할 수 없다.

action이 많은 경우 -a 옵션을 여러번 지정할 수 있다.

-a 옵션을 지정하지 않으면 표준출력으로 출력한다. -a -를 지정한 것과 같다.

(주의)
로그 메세지를 sendmsg 명령어를 사용하여 logviewer 프로세스에게 전달할 수 있는데, 100 라인이 넘는 데이타 부분은 버려진다. sendmsg 명령어는 최대 100 라인의 데이타 밖에 전송하지 못 한다.

-B -B 옵션은 backgroud mode로 jlogmon을 실행한다.
-c config -c config 옵션은 구성파일명을 지정한다.
구성파일 작성에 대한 자세한 내용은 아래의 "구성파일 작성법" 에서 설명한다.
-e -e 옵션을 지정하면, 현재 있는 파일의 내용만 조사하고 명령어를 종료한다.

이 옵션이 사용되지 않으면, 명령어는 종료하지 않고, 지정한 시간 간격으로 계속 파일을 조사하여, 지정한 조건과 일치하는 라인이 있으면, 처리한다.

-f 'fname:patterns' -f 옵션을 사용하면, 구성파일을 사용하지 않고, 모니터할 파일명과 그 조건을 지정할 수 있다.
fname 은 모니터할 파일명을 지정하고 그 다음에 콜론(:)으로 구분한 후에, 메세지중에 찾고 싶은 문자열을 지정하면 된다. patterns 의 지정방법은 아래의 "구성파일 작성법" 에서 설명한다. 찾고자 하는 문자열이 여러개 있을 경우 슬래쉬(/)를 구분자로 사용할 수 있다. 슬래쉬는 구성파일에서 NEWLINE과 같은 의미이다.
모니터할 파일이 여러개 일 경우에 -f 옵션을 여러번 사용할 수 있다.

# jlogmon -f '/var/adm/messages:WARNING/ERROR' -f '/var/adm/sulog:-root' -i 10

위의 명령어는 /var/adm/messages 파일에 'WARNING' 또는 'ERROR' 이라는 단어가 포함된 메세지가 새로 기록되거나 su 명령어를 사용하여 root 사용자로 전환하는 경우에 메세지가 표준출력으로 표시된다.

-i interval 파일을 조사하는 시간 간격을 지정한다. 파일을 조사한 후에 지정한 시간(second) 만큼 sleep한 후에 파일을 재조사 한다.
구성파일에서 INTERVAL 을 지정하고 명령어 라인에도 -i 옵션으로 시간 간격을 동시에 지정하면, 명령어 라인에 지정한 것이 사용된다.
-n,   -N -n-N 옵션을 지정하면 조건에 맞는 메세지를 출력할 때, 그 파일의 파일명을 앞에 붙혀 메세지를 출력한다.
	filename: message
-N 옵션의 경우 구성파일에서 지정한 파일명 그대로 출력하고, -n 옵션을 지정하면 디렉토리 부분은 제거하고 마지막에 있는 파일명만 메세지에 덧붙인다.
-p 'patterns' -p 옵션을 사용하면, 구성파일을 사용하지 않고, 모니터할 파일의 조건을 지정할 수 있다.
patterns 의 지정방법은 아래의 "구성파일 작성법" 에서 설명한다. 찾고자 하는 문자열이 여러개 있을 경우 슬래쉬(/)를 구분자로 사용할 수 있다. 슬래쉬는 구성파일에서 NEWLINE과 같은 의미이다.
-P -P 옵션을 지정하면, 구성파일 및 -f, -p -a 옵션에서 지정한 조건이 제대로 되었는지 확인할 수 있다. 실제 파일을 조사하지 않고 끝난다.
명령어 라인상에서 인용부호나 백슬래쉬와 틸드(~)를 제대로 사용하지 않으면, 쉘에 의해 해석되는 경우가 있다. 이 경우 제대로 jlogmon이 인식했는지 확인하기 위해 사용된다. 명령어를 실행하는 조건과 같이 한 후에 -P 옵션을 추가 한다.

# jlogmon -P -f '/var/adm/messages:WARNING ftp/~ERROR' -f '/var/adm/sulog:-root'
-a - -a '|/opt/JSparm/bin/sendmsg -s tiger' -i 10

INTERVAL: 10
OFFSET_FILE: <Not defined>
FILE: /var/adm/messages  offset: 14577
ACTION: [Standard output] 
ACTION: [Command] /opt/JSparm/bin/sendmsg -s tiger
MATCH PATTERN: 2
 (WARNING) (ftp) 
 CaseIgnore(ERROR) 

FILE: /var/adm/sulog (OPEN ERROR)  offset: 0
ACTION: [Standard output] 
ACTION: [Command] /opt/JSparm/bin/sendmsg -s tiger
MATCH PATTERN: 1
 (-root) 

Configuration is OK

위의 명령어 결과는 다음과 같이 해석된다.

/var/adm/messages 파일의 offset 14577 이후에 메세지가 기록되는지 여부를 조사한다. 새로운 메세지가 도착할 경우 2 개의 패턴과 비교하여 일치되는 라인이 있으면 지정한 action을 실행한다. 패턴 부분에 각각의 단어를 괄호로 쌓여있다. 단어에 공백이 있는지 여부를 보여주기 위해서 이다.
각각의 라인에 있는 것은 OR 조건이고 한 라인에 여러 개 있는 것은 AND 조건이다.
AND 조건의 경우 단어가 순서대로 메세지에 순서대로 있어야 조건에 맞는 메세지가 된다. CaseIgnore 라고 붙은 것은 그 단어는 대소문자 구별없이 조사한다.

-s -s 옵션을 지정하면 파일의 처음부터 조사한다. -s 옵션이 없으면, 기존의 메세지를 조사하지 않고 새로운 메세지만 조사한다. -u offset_file 옵션을 사용하면 offset_file에 지정한 offset 이후에 저장된 메세지만 조사한다.

다음의 명령어는 /var/adm/messages 파일에서 WARNING과 ERROR 단어는 포함하고 있는 것을 찾아서 표준출력으로 출력하는 예제이다.

# jlogmon -p 'WARNING/ERROR' -s  /var/adm/messages

# jlogmon -f '/var/adm/messages:WARNING/ERROR' -s

위의 두개의 예제는 동일한 동작을 한다. -i 옵션으로 시간 간격을 지정하지 않았기 때문에 계속 모니터하지 않고 기존에 있는 파일의 내용만 조사하고 끝난다.

-u offset_file -u offset_file 옵션을 지정하면 offset_file 파일에서 모니터하려고 하는 파일의 offset을 가져와서 그 offset 이후로 저장된 메세지에 대하여 조사한다. 새로운 메세지가 있으면 그것을 처리하고, offset_file에 해당 파일에 대한 offset을 조정한다. 모니터하려고 하는 파일이 offset_file에 정의되어 있지 않으면 그 파일의 현재 크기를 offset로 사용한다. 즉 기존의 메세지는 조사하지 않는다.
모니터할 파일에 새로운 메세지가 기록되면 그것을 처리하고, 변경된 offset을 offset_file 파일에 매번 저장한다. -u 옵션에서 지정한 파일이 없으면 오류가 발생한다.
-u 옵션을 사용하여 파일의 offset를 관리하려면 최초에는 touch 명령어로 size가 0인 파일을 하나 만들어 주어야 한다.

-u 옵션을 사용하면 -i 옵션을 사용하여 계속 실행하지 않아도 된다.

cron에 등록하여 일정시간 간격으로 한번씩 실행할 때에는 -u 옵션을 사용하여야 하고, jlogmon 프로세스를 한번 실행하고 프로세스를 계속 실행해 두려면, -i 옵션을 사용하여야 한다.
-u 옵션과 -i 옵션을 함께 사용하면 더욱 효과적일 수 있다. 만일 /var/adm/messages 파일을 모니터하는데 -i 옵션만 사용할 경우에 시스템이 리붙되어 jlogmon이 다시 실행되는 경우, 시스템 부팅부터 jlogmon을 실행하기 전까지의 메세지에 대해서는 조사되지 않는다.
그러나 -u 옵션과 함께 사용하면 마지막으로 jlogmon 명령어가 /var/adm/messages 파일을 조사한 offset이 offset_file에 기록되어 있기 때문에 시스템을 리붙하는 동안에 발생한 메세지에 대해서도 조사된다.

-V -V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
-w 모니터하고자 하는 파일이 없을 때, 경고 메세지를 출력한다. -w 옵션을 지정하면, 이 경고 메세지를 출력하지 않는다.

  사용 방법

jlogmon을 시스템에 사용하는 방법은 크게 2 가지 경우가 있다.

  • rc script 사용하기

    /etc/jlogmon.conf 파일을 만들어 두면 시스템 부팅시에 /etc/rc2.d/S90jlogmon 스크립트에 의해 자동으로 jlogmon 명령어가 실행된다.
    구성파일에서 INTERVAL은 반드시 지정하여야 하고, OFFSET_FILE은 필요할 경우 지정할 수 있다. 각각은 명령어 라인 -i 옵션과 -u 옵션에 해당한다.
    다음은 간단하게 /var/adm/messages 파일을 10초 간격으로 조사하여 대소문자 구별없이 error 나 warning이나 fail 이라는 단어가 있는 메세지가 있으면 사용자 PC(mypc)로 메세지를 보내라고하는 간단한 예제이다.

    INTERVAL 10 OFFSET_FILE /etc/jlogmon_offset.dat FILE /var/adm/messages { ACTION { | /opt/JSparm/bin/sendmsg -s mypc } MATCH { ~error ~warning ~fail } }

    위의 예제 파일은 /opt/JSparm/etc/jlogmon.conf 파일의 내용이다.

    이 파일을 복사하여 사용하려면, 이 파일을 /etc/jlogmon.conf로 복사하고, /etc/jlogmon_offset.dat 파일을 하나 만들어 두고, mypc 대신 관리자의 PC의 호스트명이나 IP를 지정하고 다음과 같이 /etc/rc2.d/S90jlogmon 명령어를 실행하면 된다.

    # /etc/rc2.d/S90jlogmon start
    

  • cron에 등록하여 사용하기

    다음과 같이 cron에 등록하여 주기적으로 한번씩 실행할 수 있다.

    * * * * * /opt/JSparm/bin/jlogmon -c /data/mon.conf -u /data/offset.info 
    

    /data/offset.info 파일은 미리 만들어져 있어야 한다.
    이 명령어는 cron에 의해 1분에 한번씩 실행되고, 실행될 때마다 /data/offset.info 파일을 참조하여 그 파일에서 감시하고자 하는 파일의 offset 정보를 가져와서 이후에 저장된 메세지에 대하여 처리한다. 처리가 끝난 뒤에 offset의 변경이 있었을 경우, 그 내용을 /data/offset.info 파일에 저장한다.

  •   구성파일 작성법

    Format 1:
    INTERVAL second
    OFFSET_FILE filename
    FILE filename {
    ACTION {
    action
    ...
    }
    MATCH {
    pattern
    ....
    }
    SKIP {
    pattern
    ....
    }
    }
    

    Format2:
    INTERVAL second
    OFFSET_FILE filename
    FILE !GLOBAL {
    ACTION {
    action
    ...
    }
    MATCH {
    pattern
    ....
    }
    }
    
    FILE  filename1
    FILE  filename2
    FILE  filename3 {
    ACTION {
    !GLOBAL
    action
    ...
    }
    MATCH {
    !GLOBAL
    pattern
    ...
    }
    }
    
    FILE  filename4 {
    ACTION {
    action
    ...
    }
    }
    
    

    Description:

    구성파일에는 감시의 대상이 되는 로그 파일에 어떤 메세지를 조사할지 와 조사된 메세지를 어떻게 처리할지를 각각 MATCH 부분과 ACTION 부분으로 나누어 정의한다. MATCH 부분에 정의된 것과 일치된 메세지 중에서 SKIP 라인에 정의된 것과 일치하면 그 메세지는 생략된다.
    그리고 INTERVAL 과 OFFSET_FILE 이라는 키워드를 사용하여 로그 파일을 조사할 시간 간격과 로그파일의 offset 정보를 가지고 있는 파일을 각각 지정할 수 있다(생략가능).
    OFFSET_FILE 파일을 지정할 경우, 이 파일은 jlogmon 명령어를 실행하기 전에 만들어져 있어야 한다.
    맨 처음에 사용할 때에는 touch 명령어로 빈 파일을 하나 만들어 두면 된다.
    이것은 명령어 라인에서 각각 -i 옵션과 -u 옵션에 지정하는 것과 같다. 구성파일과 명령어 라인에 동시에 지정하면 명령어 라인에서 지정한 것이 사용된다.
    구성파일에서 # 으로 시작하는 것은 주석으로 처리한다.

    구성파일의 형식은 왼쪽에 있는 것 처럼 FILE이라는 키워드로 시작하고 그 다음에 모니터하려고 하는 파일명을 지정하고 그 다음에 "{" 로 라인이 끝나야 한다. 이 세개의 문자가 한 라인에 있어야 한다.
    여기에 지정된 파일은 한 번 open한 후 프로그램이 종료될 때까지 open 한 상태를 유지한다.
    키워드는 대소문자 구별없이 사용된다.
    FILE 부분에서 파일명으로 !GLOBAL 이라는 특별한 의미를 가지는 것을 정의할 수 있다. 이것은 글로벌 정의(global definition)에 해당한다. 각각의 로그파일에 공통적으로 사용하는 MATCH나 ACTION 부분에 대하여 한 곳에 정의해서 전체가 공통으로 사용할 수 있다.
    이렇게 공통으로 정의된 것을 사용하려면 각각의 파일에서 MATCH나 ACTION 부분을 정의를 하지 않으면 된다. 글로벌 정의 부분도 사용하고 개별 파일에 대하여 추가적으로 더 사용하고 싶으면 MATCH나 ACTION 부분에서 !GLOBAL 키워드를 지정하면 된다. 이것은 글로벌 정의를 포함하라는 의미이다.

    그 다음에 ACTION이라는 키워드로 시작하고 그 다음에 "{" 로 라인이 끝나야 한다. 이 두개의 문자도 한 라인에 있어야 한다. 그리고 그 다음 라인에서 조건에 맞는 메세지가 기록되었을 때, 동작할 행위를 지정한다.

    1 표준출력에 출력하는 방법 -
    2 특정파일에 저장하는 방법 filename
    3 사용자가 지정한 명령어를 실행하는 방법 | command

    | 버티컬 바로 시작하는 것은 그 뒷부문을 명령어로 인식하여 실행한다.
    지정한 명령어를 실행하고 메세지를 그 명령어의 표준 입력으로 전달한다. 메세지를 전달한 후 그 프로세스가 종료할 때까지 기다린다.
    이 명령어는 popen() 라이브러리를 사용하여 쉘 명령어에 의해 실행한다. 자세한 내용은 popen 메뉴얼을 참고하십시오.

    - 대쉬 한 글자만 있으면 표준출력으로 출력한다.

    그외는 파일명으로 인식하여 그 파일을 APPEND 모드로 오픈하여 새로운 메세지를 저장한다. 파일은 계속 오픈해 두지 않는다. 출력할 메세지가 있을 때 마다 오픈하고 클로즈한다.
    특수문자 한 글자로 된 것은 파일명으로 사용할 수 없다.

    (주의)
    로그 메세지를 sendmsg 명령어를 사용하여 logviewer 프로세스에게 전달할 수 있는데, 100 라인이 넘는 데이타 부분은 버려진다. sendmsg 명령어는 최대 100 라인의 데이타 밖에 전송하지 못 한다.


    ACTION 부분의 정의가 완료되었으면 새로운 라인에 "}" 으로 마감한다.

    그 다음에 MATCH이라는 키워드로 시작하고 그 다음에 "{"로 라인이 끝나야 한다. 이 두개는 한 라인에 있어야 한다.
    그 다음 라인 부터는 찾고자 하는 문자열을 지정할 수 있다. 한 라인에 한개 또는 여러개를 지정할 수 있다. 단어 사이의 공백은 단어를 분리하는 기능을 가질 뿐이다. 만일 공백이 포함된 문자열을 찾고 싶으면 인용부호(단일 또는 이중인부호)로 둘러 싸야 한다.

    각각의 라인에 있는 것은 OR 조건이고 한 라인에 여러 개 있는 것은 AND 조건이다.
    AND 조건의 경우 지정한 순서대로 메세지에 있어야 조건에 맞는 메세지가 된다.

    단어앞에 ~를 시용하면 그 단어는 대소문자 구별없이 사용한다는 것을 의미한다.
    + 한 글자만 있으면 이것은 특별한 의미를 가진다. 이것은 파일에 기록되는 모든 메세지를 선택하게 한다.
    #로 시작하는 것은 주석으로 처리된다. 주석으로 사용하지 않고 조사할 문자열로 사용하고 싶으면 인용부호로 둘러싸거나 백스페이스를 앞에 붙이면 된다.

    대소문자를 구분하는 특수문자 ~ 도 조사할 문자열로 사용하고 싶으면 인용부호로 둘러싸거나 백스페이스를 앞에 붙이면 된다.

    다음의 예제를 살펴보자.

    ~warning ftp
    'is '  ~fail
    ~error
    in.telnetd
    
    -----> (1)
    -----> (2)
    -----> (3)
    -----> (4)
    


    로그 파일에서 한 라인식 읽어서 그 라인에 대소문자 구별없이 warning 이라는 문자열과 ftp 라는 문자열이 있는지 조사한다. warning과 ftp는 순서대로 있어야 한다. 즉, 다음의 라인은 첫번째 줄은 조건에 일치하지 않고, 두번째 줄이 조건에 일치한다.
    	ftp is failed: WARNING ID = 10230
    

    (1)의 조건에 만족되지 않으면 (2)의 조건을 조사한다. 'is ' 는 is 단어에 SPACE까지 포함한 단어가 있고 그 뒤에 대소문자 구별없이 fail 이라는 단어가 오면 조건에 맞는다.
    이 조건에 맞지 않으면, (3)의 조건, (4)의 조건을 차례로 조사한다.

    만일 인용부호를 포함하는 문자열을 찾고 싶으면 인용부호 앞에 백슬래쉬를 사용하거나 전체를 이중인용부호를 사용할 수 있다.

    Can't open ---> Can\'t
    ---> "Can't"

    단일인용부호는 이중인용부호로 이중인용부호는 단일인용부호로 둘러쌀 수 있다.

    !GLOBAL 이라는 문자열을 찾고 싶으면, 인용부호로 둘러싸거나 느낌표 앞에 백슬래쉬를 사용하면 된다.
    MATCH 부분에서 특별한 의미를 가지는 문자 (~+) 자제의 의미를 사용하지 않고 메치되는 문자로 사용하려면, 인용부호로 감싸면 된다.

    MATCH 부분의 정의가 완료되었으면 새로운 라인에 "}" 으로 마감한다.

    SKIP 부분은 생략할 수 있다. SKIP에 지정되는 내용은 MATCH에 지정되는 내용과 같다. SKIP에서는 +가 특별한 의미를 가지지 않는다.

    글로벌 정의에 SKIP에 대하여 정의해 두고, 각파일에 대해서 SKIP 정의를 하지 않으면 글로벌 정의가 사용된다. 글로벌 정의에 정의된 내용을 사용하고 싶지 않으면 다음과 같이 빈 body를 만들어 두어야 한다.

    	 SKIP {
    	}
    

    전제 FILE에 대한 정의가 완료되면 새로운 라인에 "}" 으로 마감한다.

    Example: test.conf
    # An example of configuration file
    INTERVAL 10
    FILE /var/adm/messages {
    ACTION {
    | mailx -s 'messages from /var/adm/messages' admin@junsoft.com
    }
    MATCH {
    ~warning
    ~error
    'REPEATED LOGIN FAILURES'
    inetd bind
    }
    }
    
    FILE /var/adm/sulog {
    ACTION {
    | /opt/JSparm/bin/sendmsg -s junsoft.com
    /var/log/su-root.log
    }
    MATCH {
    -root
    }
    }
    
    FILE /user1/log/error.log {
    ACTION {
    | /opt/JSparm/bin/sendmsg -s junsoft.com
    }
    MATCH {
    +
    }
    }
    
    Description:

    왼쪽의 예제는 /var/adm/messages 파일에서
    1) 대소문 구별없이 warning 이라는 문자열이 있거나,
    2) 대소문 구별없이 error 이라는 문자열이 있거나,
    3) REPEATED LOGIN FAILURES 이라는 문자열(공백포함)이 있거나,
    4) inetd와 bind 라는 문자열이 순서대로 한 라인에 있는 메세지가 있으면, 시스템 명령어 mailx를 사용하여 admin@junsoft.com 사용자에게 메일을 보낸다.

    /var/adm/sulog 파일에 대하여 -root 라는 문자열을 가지는 메세지가 있으면, sendmsg 명령어를 사용하여 로그 모니터 프로그램에게 전달하고 /var/log/su-root.log 파일에 저장한다.

    /user1/log/error.log 파일에 새로운 메세지가 기록되면, sendmsg 명령어를 사용하여 로그 모니터 프로그램에게 전달한다.

    특수 문자 "+" 의 의미는 모든 문자열과 일치된다. 따라서 /user1/log/error.log에 새로운 메세지가 기록되면, ACTION을 취한다.

    Example: test2.conf
    # An example of configuration file
    FILE /var/adm/messages {
    ACTION {
      | mailx -s 'messages from /var/adm/messages' admin@junsoft.com
    }
    MATCH {
      ~warning
      ~error
      'REPEATED LOGIN FAILURES'
      inetd bind
    }
    SKIP {
      mail
    }
    }
    
    Description:

    왼쪽의 예제는 /var/adm/messages 파일에서
    [MATCH 부분]
    1) 대소문 구별없이 warning 이라는 문자열이 있거나,
    2) 대소문 구별없이 error 이라는 문자열이 있거나,
    3) REPEATED LOGIN FAILURES 이라는 문자열(공백포함)이 있거나,
    4) inetd와 bind 라는 문자열이 순서대로 한 라인에 있는 메세지 중에서 , 즉 4 개의 조건을 통과 한 것 중에서

    [SKIP 부분]
    mail 이라는 문자가 있는 메세지는 제외한다.

    [ACTION 부분]
    이렇게 선택된 메세지는 시스템 명령어 mailx를 사용하여 admin@junsoft.com 사용자에게 메일을 보낸다.

    다음은 위에서 정의한 것이 jlogmon의 -P 옵션을 사용하여, 재대로 되었는지 구성파일을 점검하는 예제이다.

    # jlogmon -c test.conf -P
    
    INTERVAL: 10
    OFFSET_FILE: <Not defined>
    FILE: /var/adm/messages  offset: 2328
    ACTION: [Command] mailx -s 'messages from /var/adm/messages' admin@junsoft.com
    MATCH PATTERN: 4
     CaseIgnore(WARNING)
     CaseIgnore(ERROR)
     (REPEATED LOGIN FAILURES)
     (inetd)  (bind)
    SKIP PATTERN: <Not defined>
    
    FILE: /var/adm/sulog (OPEN ERROR)  offset: 22178
    ACTION: [Command] /opt/JSparm/bin/sendmsg -s junsoft.com
    ACTION: [File] /var/log/su-root.log
    MATCH PATTERN: 1
     (-root)
    SKIP PATTERN: <Not defined>
    
    FILE: /user1/log/error.log (OPEN ERROR)  offset: 0
    ACTION: [Command] /opt/JSparm/bin/sendmsg -s junsoft.com
    MATCH PATTERN: <+ All>
    SKIP PATTERN: <Not defined>
    
    Configuration is OK
    
    

    # jlogmon -i 60 -c test2.conf -P
    
    INTERVAL: 60
    OFFSET_FILE: <Not defined>
    FILE: /var/adm/messages  offset: 67894
    ACTION: [Command] mailx -s 'messages from /var/adm/messages' admin@junsoft.com
    MATCH PATTERN: 4
     CaseIgnore(WARNING) 
     CaseIgnore(ERROR) 
     (REPEATED LOGIN FAILURES) 
     (inetd) (bind) 
    SKIP PATTERN: 1
     (mail) 
    
    Configuration is OK