7.5. 로그 파일을 이름이 지정된 파이프로 교체


많은 관리자는 특정 이벤트만 기록하도록 액세스 로그 구성과 같은 로깅 데이터로 일부 특수 구성 또는 작업을 수행하려고 합니다. 이는 표준 Directory Server 로그 파일 구성 속성을 사용할 수 없지만 로그 데이터를 명명된 파이프로 보낸 다음 다른 스크립트를 사용하여 데이터를 처리할 수 있습니다. 로그에 이름이 지정된 파이프를 사용하면 다음과 같이 이러한 특수 작업이 간소화됩니다.

  • 실패한 바인딩 시도 또는 특정 사용자 또는 IP 주소의 연결과 같은 특정 이벤트 로깅
  • 특정 정규식 패턴과 일치하는 로깅 항목
  • 로그를 특정 길이로 유지(마지막 행 수만 기록)
  • 이벤트 발생 시 이메일과 같은 알림 전송

로그 파일을 파이프로 교체하면 특히 작업 속도가 높은 서버에서 성능이 향상됩니다.

로그 버퍼에서 데이터를 처리하는 방법 때문에 이름이 지정된 파이프는 스크립트를 사용하여 로그에서 데이터를 추출하는 것과 다릅니다.

로그가 버퍼링되면 서버 성능은 좋지만 중요한 데이터는 이벤트가 발생하는 즉시 디스크에 기록되지 않습니다. 서버에 충돌하는 데 문제가 있는 경우 데이터가 디스크에 기록되기 전에 충돌할 수 있으며 스크립트를 추출할 데이터가 없습니다.

로그가 버퍼링되지 않은 경우[1]에서는 쓰기가 각 작업을 사용하여 디스크에 플러시되므로 디스크 I/O 및 성능 저하가 많이 발생합니다.

파이프에서 읽는 스크립트가 메모리에서 들어오는 로그 데이터를 버퍼링할 수 있기 때문에 로그 디스크 파일을 파이프로 교체하면 버퍼링의 이점이 있습니다(단일 스크립트와 함께 사용할 수 없음).

스크립트의 사용법 및 옵션 세부 정보는 9.4절. “ds-logpipe.py” 에서 다룹니다. 기본 형식은 다음과 같습니다. ds-logpipe.py/path/to/named_pipe--userpipe_user--maxlinesnumber--serverpidfilefile.pid--servertimeoutPID--servertimeoutseconds--plugin=/path/to/plugin.arg=value

7.5.1. 로깅에 이름 지정된 파이프 사용

Directory Server 인스턴스는 단순히 이름이 지정된 파이프 로그 스크립트를 실행하고 파이프 이름을 지정하여 로깅에 이름이 지정된 파이프를 사용할 수 있습니다. (서버가 이미 실행 중인 경우 로그를 다시 열어야 하지만 그렇지 않은 경우 구성이 필요하지 않습니다.)

# ds-logpipe.py /var/log/dirsrv/slapd-example/access

이러한 방식으로 ds-logpipe.py 를 실행하면 쉽게 구현할 수 있고 Directory Server 구성을 변경할 필요가 없다는 이점이 있습니다. 특히 특정 유형의 이벤트를 검색하는 경우 빠른 디버깅 또는 모니터링에 유용합니다.

Directory Server 인스턴스가 로깅에 실제 파일이 아닌 자주 또는 영구적으로 이름이 지정된 파이프를 사용하는 경우 이름이 지정된 파이프를 만들고 로깅에 사용할 수 있도록 인스턴스를 재구성할 수 있습니다(기본적으로 로그 파일의 경우).

인스턴스의 로그 구성에 대해 다음 세 가지를 구성해야 합니다.

  • 사용할 로그 파일을 파이프(nsslapd-*log )로 변경해야 합니다. 여기서 *는 액세스, 오류 또는 감사일 수 있습니다.[2]구성 중인 로그 유형에 따라 다름)
  • 스크립트가 이미 로그 항목을 버퍼링하므로 버퍼링을 비활성화해야 합니다 (nsslapd-*log-logbuffering)
  • 서버가 이름이 지정된 파이프를 회전하지 않도록 로그 교체를 비활성화해야 합니다(nsslapd-*log-maxlogsperdir,nsslapd-*log-logexpirationtime, nsslapd-*log-logrotationtime)

이러한 구성 변경은 Directory Server Console에서 수행하거나 ldapmodify 를 사용하여 수행할 수 있습니다.

예를 들어 액세스 로그를 전환하여 access.pipe:

# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=config
changetype: modify
replace: nsslapd-accesslog
nsslapd-accesslog: /var/log/dirsrv/slapd-instance/access.pipe
-
replace: nsslapd-accesslog-logbuffering
nsslapd-accesslog-logbuffering: off
-
replace: nsslapd-accesslog-maxlogsperdir
nsslapd-accesslog-maxlogsperdir: 1
-
replace: nsslapd-accesslog-logexpirationtime
nsslapd-accesslog-logexpirationtime: -1
-
replace: nsslapd-accesslog-logrotationtime
nsslapd-accesslog-logrotationtime: -1
참고

이러한 변경을 수행하면 서버에서 현재 로그 파일을 닫고 이름이 지정된 파이프로 즉시 전환합니다. 이는 실행 중인 서버를 디버깅하고 특정 메시지에 대한 로그 출력을 스프링하는 데 매우 유용할 수 있습니다.

7.5.2. 서버로 이름 지정된 파이프 시작

인스턴스의 init 스크립트 구성 파일을 편집하여 이름이 지정된 파이프를 Directory Server 인스턴스와 함께 시작하고 종료할 수 있습니다.

참고

명명된 파이프 스크립트는 서버의 시작 시 호출되기 전에 인스턴스의 dse.ldif 파일에서 구체적으로 구성해야 합니다.

  1. 서버 시스템의 인스턴스 구성 파일을 엽니다.

    /etc/sysconfig/dirsrv-instance_name
    주의

    /etc/sysconfig/dirsrv 파일을 편집 하지 마십시오.

  2. 파일 끝에는 다음과 같은 행이 표시됩니다.

    # Put custom instance specific settings below here.

    해당 행 아래에 ds-logpipe.py 명령을 삽입하여 서버가 시작될 때 시작합니다. 예를 들면 다음과 같습니다.

    # only keep the last 1000 lines of the error log
    python /usr/bin/ds-logpipe.py /var/log/dirsrv/slapd-example/errors.pipe -m 1000 -u dirsrv -s /var/run/dirsrv/slapd-example.pid > /var/log/dirsrv/slapd-example/errors &
    
    # only log failed binds
    python /usr/bin/ds-logpipe.py /var/log/dirsrv/slapd-example/access.pipe -u dirsrv -s /var/run/dirsrv/slapd-example.pid --plugin=/usr/share/dirsrv/data/failedbinds.py failedbinds.logfile=/var/log/dirsrv/slapd-example/access.failedbinds &
    참고

    s 옵션은 둘 다 서버가 PID를 작성할 .pid 파일을 지정하고 서버 프로세스로 시작하고 중지하도록 스크립트를 설정합니다.

7.5.3. Named Pipe Log와 함께 플러그인 사용

플러그인을 호출하여 이름이 지정된 파이프에서 로그 데이터를 읽고 이에 대해 일부 작업을 수행할 수 있습니다. named pipe 로그 스크립트에서 플러그인을 사용하는 경우 몇 가지 고려 사항이 있습니다.

  • 플러그인 함수는 이름이 지정된 파이프에서 읽은 모든 행에 대해 호출됩니다.
  • 플러그인 함수는 Python 스크립트여야 하며 .py 로 끝나야 합니다.
  • 모든 플러그인 인수는 명령줄에서 이름이 지정된 파이프 로그 스크립트로 전달됩니다.
  • 플러그인을 로드할 때 미리 작동하는 함수를 지정할 수 있습니다.
  • 스크립트가 종료될 때 작업 후 함수를 호출할 수 있습니다.

7.5.3.1. 이름 지정된 파이프 로그 스크립트를 사용하여 플러그인 로드

ds-logpipe.py 에는 플러그인에 사용할 두 가지 옵션이 있습니다.

  • plugin 옵션은 플러그인 파일(Python 스크립트이어야 하며 .py로 끝나야 함)의 경로를 제공합니다.
  • plugin.arg 옵션은 플러그인 인수를 named pipe 로그 스크립트에 전달합니다. 플러그인 파일 이름( .py 확장자 제외)은 플러그인 이며 해당 플러그인에서 허용되는 인수는rg일 있습니다.

예를 들면 다음과 같습니다.

ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe --plugin=/usr/share/dirsrv/data/example-funct.py example-funct.regex="warning" > warnings.txt

동일한 인수에 대해 전달되는 값이 두 개 이상 있는 경우 플러그인 dict의 값 목록으로 변환됩니다. 예를 들어 이 스크립트는 arg1 에 대한 두 개의 값을 제공합니다.

--plugin=/path/to/pluginname.py pluginname.arg1=foo pluginname.arg1=bar pluginname.arg2=baz

플러그인에서 다음과 같이 변환됩니다.

{'arg1': ['foo', 'bar'],
 'arg2': 'baz'}

두 개의 키가 있는 Python dict 오브젝트입니다. 첫 번째 키는 arg1 문자열이며 해당 값은 두 개의 요소가 있는 Python 목록 오브젝트이며 문자열 foobar 입니다. 두 번째 키는 arg2 문자열입니다. 값은 baz 문자열입니다. 인수에 단일 값만 있는 경우 단순 문자열로 유지됩니다. 단일 인수 이름에 대한 여러 값이 문자열 목록으로 변환됩니다.

ds-logpipe.py 명령은 플러그인(), pre () post ()에서 최대 세 가지 함수를 예상합니다.

ds-logpipe.py 명령과 함께 사용되는 모든 플러그인은 플러그인 기능을 지정해야 합니다.

플러그인() 기능은 로그 데이터의 모든 행에 대해 수행되며, 스크립트를 각각 시작하고 중지할 때 pre()post () 함수가 실행됩니다.

각 함수에는 인수가 정의되어 있을 수 있으며, 이러한 인수는 plugin.arg 옵션을 사용하여 스크립트로 전달할 수 있습니다. 또한 각 함수에는 자체 반환 값과 해당 함수에 대해 정의된 작업이 있을 수 있습니다.

예 7.8. 간단한 이름이 지정된 파이프 로그 플러그인

def pre(myargs):
    retval = True
    myarg = myargs['argname']
    if isinstance(myarg, list): # handle list of values
    else: # handle single value
    if bad_problem:
        retval = False
    return retval

def plugin(line):
    retval = True
    # do something with line
    if something_is_bogus:
        retval = False
    return retval

def post(): # no arguments
    # do something
    # no return value


[1] 로그 수준이 로그 로그에서 변경되거나 감사 로깅을 사용하는 경우 액세스 로그에서 로그 버퍼링이 비활성화되면 서버 성능이 저하됩니다.
[2] 감사 로그는 기본적으로 활성화되어 있지 않으므로 이름이 지정된 파이프를 사용하여 교체하려면 이 로그를 활성화해야 합니다.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동