2011-11-16 2 views
3

나는 펄이 같은 메시지를 기록하고있다 - 나는이 메시지를 볼 때syslog 메시지에서 호스트 이름을 스푸핑하는 방법은 무엇입니까?

syslog ("LOG_INFO", "this is info"); 
syslog ("LOG_WARNING", "this is warning"); 

, 내가 로그 메시지에 this-

Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is info 
Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is warning 

단어 "우분투"를 얻는 것은의 호스트 이름이 될 일이 로컬 호스트.

로컬로 로그인 할 수 있지만 호스트 이름을 지정할 수있는 방법이 있습니까?

내 앱은 다른 호스트의 데이터를 처리하고 그에 대한 정보를 기록합니다. 메시지를 기록 할 때 호스트 이름을 지정할 수 있다면 좋겠지 만 호스트 이름을 기준으로 로그를 쉽게 필터링 할 수있는 제 3 자 도구를 쉽게 사용할 수 있습니다.

btw, 추가 질문이있는 경우 - 로그에 메시지의 수준이 표시되지 않는 이유는 무엇입니까? 나는 로깅하고있는 정보 syslog 메시지에서 "정보"를 볼 것으로 예상하지 않아야합니까?

+1

UDP 514에서는 표준'syslog', TCP 514에서는'syslog' 또는'rsyslog'의 [RELP] (http://www.librelp.com/) 연결과 같은 것을 사용하고 있습니까? 또는이 모든 작업이 단일 시스템에서 "사실 이후"의 로그 메시지에서 수행되고 있습니까? – sarnold

+0

'tail -f/var/log/syslog' 명령을 사용하여 로그 메시지를 읽었습니다.이 메시지는 로컬로 기록됩니다. 이것이 tcp/udp/relp에서 오는 것인지 어떻게 알 수 있습니까? – user837208

+0

다른 호스트가 자동으로 로컬 시스템으로 메시지를 전달하도록 설정되어 있습니까? 이 경우, 일반적으로 "그냥 작동한다"- 적어도 rsyslog (8)에서는 가능하다. 다른 syslog 데몬은 필수'Host' 헤더를 보내지 않을 수도 있습니다 : http://www.rsyslog.com/article19/ – sarnold

답변

2

아마도이 작업을 수행하는 가장 쉬운 방법은 네트워크를 통해 메시지를 수신하도록 syslog을 설정하는 것입니다. rsyslog를 들어,이 /etc/rsyslog.conf에서 자주 : 나는 그냥 대한 syslog 데몬에 쉽게 할 수 있기 때문에 여기에 UDP를 사용하고 그것을 증명하고 있습니다

# provides UDP syslog reception 
$ModLoad imudp 
$UDPServerRun 514 

쉽습니다 : 한마디로

$ echo "<0>Oct 11 22:14:15 mymachine testing" | nc -u localhost syslog 
^C 
$ tail -1 /var/log/syslog 
Oct 11 22:14:15 mymachine testing 

: <nnn>section 4.1.1 of the RFC에 설명 된대로 시설 및 우선 순위를 나타냅니다. 타임 스탬프는 4.1.2에서 매우 구체적으로 지정됩니다. 즉, 영문자 세 자리 영문 약어 (0) 대신에 Aug_8 (코드 블록에서 공백이 붕괴하기 때문에 밑줄이 사용됨)이 아닌 앞 간격이 Aug__8입니다. 호스트 이름은 도메인 부분을 가질 수 없습니다. IP 주소는 IPv4와 IPv6 모두 괜찮습니다.

/dev/log과 같은 Unix 도메인 소켓 (unix(7))을 사용할 수도 있습니다. 그것은 UDP보다 더 신뢰할 수 있습니다.

+0

감사합니다!정확히 내가 무엇을 찾고 있었는지 – user837208

+0

Heh, 당신 덕분에, 이것은 syslog on-the-wire 프로토콜을 파고 들었을 때 처음이었고, 왜 내가 그렇게 놀랍다는 것은 너무 인간 친화적인지 모르겠다. . 나는 ASN.1 스타일의 무서운 더미를 기대했다. – sarnold

0

로컬 로깅하는 경우 불행히도 호스트 이름을 지정할 수 없다고 생각합니다.

또한 로그 앞에 '정보'가 표시되지 않아야합니다. 로그 레벨은 메시지가 전달되는 위치에 영향을줍니다 (/etc/syslog.conf에서이를 사용자 정의 할 수 있음). 기본적으로 LOG_INFO 및 LOG_WARNING은 /var/log/messages.log로 이동하고 LOG_EMERG 및 LOG_ERR은 /var/log/errors.log로 이동합니다. 출력에 레벨이 나타나지 않습니다.