2013-11-15 3 views
0

두 개의 사용자 프로세스 A와 B가 있습니다. 둘 다 syslog 시설 LOG_USER을 사용합니다.syslog : 프로세스 특정 우선 순위

내가 그들에 대해 서로 다른 임계 값 레벨을 갖고 싶어 : 우선 순위 CRIT - 및 - 위의 우선 순위 ERR-및-위의 B에 대한

  • 로그인해야합니다 메시지 만의

    A의
    • 메시지 만

  • 을 로그인해야합니다 나는 것을 발견하면 내가 설정 /etc/syslog.conf
    user.err /var/log/messages 
    
    로그러면 ERR 이상 메시지가 기록되지만 A와 B 모두에서 기록됩니다.

    다른 프로세스에 대해 최소 임계 값 레벨을 어떻게 다르게 할 수 있습니까?

    참고 : 구성 파일 기반 솔루션이 있는지 탐색합니다. 그렇지 않으면 또 다른 접근 방법이 있습니다. 각 프로세스에서 setlogmask()을 사용하여 프로세스 특정 우선 순위 마스크를 설치할 수 있습니다.

    EDIT (년 11 월 18) : 나는 syslog 일부 휴대용 솔루션을 사용하고 싶습니다.

    +0

    사용중인 syslog의 구현에 대해 언급하십시오. 대답은 구현 특정 구성 파일 구문에 다소 의존합니다. –

    +0

    @Sam : Linux CentOS를 사용하고 있습니다. 어떤 정보를 찾고 계십니까? 일부 명령을 실행하거나 파일을 찾아서 찾을 수 있습니까? – Arun

    답변

    1

    구성 파일 기반 솔루션을 사용할 수 있습니다. CentOS는 기본적으로 rsyslog와 함께 제공되며, 그렇지 않은 경우에도 yum을 사용하여 항상 rsyslog를 설치할 수 있다고 생각합니다. 이 솔루션은 rsyslog와 만 작동합니다.

    그러나 잡기입니다. 동일한 이름을 가진 프로세스간에 rsyslog (또는 거의 모든 syslog 데몬 구현)로 로그 메시지를 분리 할 수 ​​없습니다. 같은 실행 경로. 그러나 rsyslog를 사용하면 프로그램 이름을 기반으로 메시지를 필터링 할 수 있습니다. 대부분의 프로그램은 argv [0]을 사용하여 openlog (3)를 호출합니다. 첫 번째 인수로 실행 파일 이름. 이제 실행중인 실제 프로그램을 공개하지 않았으므로이를 확인할 방법이 없지만 항상 자신의 프로그램 소스를 읽을 수 있습니다.

    대부분의 경우 실행 파일 경로는 프로그램 이름이지만 일부 데몬은 argv [0]을 사용합니다 (주목할만한 예는 postfix와 sendmail입니다). 반면에 Rsyslog는 보내는 프로그램의 이름을 기반으로 메시지를 필터링 할 수있는 필터링 메커니즘을 제공합니다 (이제는 openlog (3)이 호출되는 방법과 관련이있는 것을 볼 수 있습니다). 따라서 프로세스를 직접 필터링하는 대신 프로그램 이름을 필터링 할 수 있습니다. 그리고 우리는 심볼릭 링크를 만들어 영향을 미칠 수 있습니다.

    따라서이 솔루션은 다음 조건에서만 작동합니다. a) 실행중인 프로세스가 실행을 시작한 후 argv [0]을 사용하지 않습니다. b) 바이너리에 대한 심볼릭 링크를 만들어 동일한 프로그램에 대해 서로 다른 두 개의 이름을 만들 수 있습니다. c) 프로그램은 argv [0]을 호출의 첫 번째 매개 변수로 사용하여 openlog (3)를 호출합니다. 이 두 조건을 감안할 때

    , 당신은 단순히 (rsyslog documentation에서 직접 예를 들어)이 같은 /etc/rsyslog.conf에 메시지를 필터링 할 수 있습니다

    if $programname == 'prog1' then { 
        action(type="omfile" file="/var/log/prog1.log") 
    } 
    if $programname == 'prog2' then { 
        action(type="omfile" file="/var/log/prog2.log") 
    } 
    

    일예프로그램이 /usr/bin/foobar이고 심볼릭 링크 /usr/bin/prog1/usr/bin/prog2이 모두 /usr/bin/foobar을 가리키는 경우 위의 구성 파일 예제는 "prog1"및 "prog2"로 시작된 프로세스의 메시지를 각각 다른 로그 파일로 보냅니다. 이 예제는 다른 것을 사용하지 않기 때문에 명시 적으로 필터링하지 않으면 모든 메시지가 일반 로그 파일로 이동합니다.

    +0

    감사 (+1), 그러나, 나는 syslog만을 사용하고 싶습니다. 나는 그것을 명시 적으로 지금 주목했다. – Arun

    +0

    그러면 질문에 대한 대답은 간단합니다. 이것은 syslog로만 수행 할 수 없습니다. –