Ubuntu 13.X에서 Upstart 로그 메시지는 어디에 있습니까?


28

Ubuntu 12.04의에서 Upstart 로그 메시지를 찾을 수 있습니다 /var/log/syslog.

명령 :

# initctl log-priority info
# initctl emit hello

로그:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

Ubuntu 13.10에서는 메시지가 디렉토리 내 syslog또는 /var/log디렉토리 아래에 나타나지 않지만 명령이 logger hello예상대로 작동합니다. 다른 곳에서 찾아야합니까? 어딘가에 변경해야 할 구성 설정이 있습니까?

Ubuntu 13.04에서 동일한 문제가있는 것으로 보이는 누군가의 서버 결함에 대한 질문 이 있으며 여기여기 에서도 동일한 문제를 설명 할 수 있습니다. 불행히도, 이러한 질문은 문제의 리드를 제공하지 않습니다.

답변:


39

2016-06-02 편집

일반적으로 "업 스타트 로그 메시지"를 찾으려면을 확인하십시오 /var/log/upstart/. 이것이 바로 Upstart가 Upstart 서비스를 저장 stdout하고 저장하는 곳 stderr입니다. 이것을 지적한 leopd의 답변에 감사드립니다.

Upstart 자체에서 로그 메시지를 찾으려면에서 구성 initctl log-priority및 생성 한 로그 메시지를 initctl emit읽으십시오!

짧은 버전

로그 항목은 실제로 dmesg에 표시되어야합니다. 그럼에도 불구하고 기본적으로는에 표시 되지 않습니다/var/log .

그것들을 원한다면 rsyslogd의 설정에 /var/log추가하십시오 $KLogPermitNonKernelFacility on. dpkg에서 관리 /etc/rsyslog.d/60-custom.conf하기 때문에 편집하지 않으려 는 사용자 정의 파일을 만드는 것이 좋습니다 /etc/rsyslog.conf. 이제 갑자기 출세 한 메시지에 표시해야 /var/log/syslog당신이 갑자기 출세의 설정하면, log-priorityinfo정도.

긴 버전

이 추적하는 일이 걸렸습니다,하지만 분명히 갑자기 출세 한 (1.5) 않습니다 하지 syslog에 로그입니다, 그것은 glibc는 함수를 호출하지 않습니다 syslog(). 대신, Upstart는 dmesg가 읽는 커널 링 버퍼에 기록합니다. 이제는 사용자 공간 프로세스가 해당 버퍼에 쓸 는 없다고 생각 했지만 분명히 쓸 수 있습니다 /dev/kmsg. 이것이 바로 Upstart가하는 일입니다. 이것이 퍼즐의 첫 번째 부분입니다.

두 번째 부분은 커널 링 버퍼에 작성된 메시지가 커널에 의해 syslog에 자동으로 복사된다는 믿음이 널리 퍼져 있다는 것입니다. 이것은 실제로 syslogd와 함께 작동하는 전통적으로 klogd 인 사용자 공간 데몬에 의해 수행됩니다. 분명히 rsyslogd는 syslogd를 대체하지만 klogd도 대체합니다 (종종 : 끝에있는 참고 사항 참조).

세 번째 부분은 사용자 공간에서 커널 링 버퍼에 기록 된 메시지가 실제로 커널 공간에서 작성된 메시지와 다르게 보이는 것입니다. 서로 다른 기능이 있습니다. dmesg는이 기능과 상호 작용할 수있는 몇 가지 옵션을 제공합니다 -x. 기능 (및 우선 순위) 을 표시 -u하고 -kdmesg에 사용자 기능 메시지와 커널 기능 메시지 만 각각 표시하도록 지시합니다.

이제 clincher가 있습니다. 기본적으로 rsyslogd 커널 링 버퍼에서 메시지를 읽을 때 비 커널 기능이있는 메시지를 무시 합니다. 관련 구성 옵션은입니다 $KLogPermitNonKernelFacility. 이는 기본적으로 해제되어 있으며 rsyslogd가 이러한 메시지를 처리하도록하려면 설정해야합니다. rsyslogd의 나머지 구성은 커널 링 버퍼에있는 kern기능과 상관없이 커널 링 버퍼의 모든 메시지를 기능 을 갖는 것으로 간주 합니다.

더 많은 정보

syslog

코드는 syslog()에 설명 된 glibc 함수를 호출하여 syslog에 쓸 수 있습니다 man 3 syslog. 분명히이 함수는에 쓴다 /dev/log. 코드는을 읽어 syslog에서 읽을 수 /dev/log있으며 이것이 syslogd대체하는 것입니다. 입력 모듈을 사용하여 rsyslogd읽습니다 ./dev/logimuxsock

커널 링 버퍼

커널 공간은 커널 함수를 호출하여이 버퍼에 printk()쓰므로 때로는 printk 버퍼라고합니다. 사용자 공간은에 쓰면 쓸 수 있습니다 /dev/kmsg. 그것은에서 읽을 수 있습니다 : 사용자 공간은 여러 가지 방법으로이 버퍼에서 읽을 수 있습니다 /proc/kmsg(dmesg를 기본적으로 무엇을), 또는에서 읽을 수있다 /dev/kmsg, 또는 시스템 호출을 호출 할 수 있습니다 syslog()에 설명되어 man 2 syslog이며 완전히 다른 glibc는 기능에서 syslog()설명을 에서 man 3 syslog. glibc는 실제로 시스템 호출에 래퍼 제공 syslog()이라고를, klogctl()도움이 혼란을 완화.

일반적 klogd으로 이러한 인터페이스 중 하나 에서 읽은 다음 glibc 함수 syslog()를 호출 하여 syslog에 복사합니다. rsyslogd는 imklog입력 모듈을 통해 이러한 인터페이스 중 하나를 읽지 만 AFAIK는 glibc 호출을 방해하지 않으므로 syslog()klogd와 정확히 일치하지 않습니다. imklog다른 입력 모듈 의 출력을 처리하는 것처럼 출력을 처리합니다. 커널 링 버퍼에있는 기능 메시지와 상관없이 모든 imklog출력에 kern기능 이 있다는 추가 경고가 있습니다.

참고 문헌


4
작동하지 않는 이유와 해결 방법에 대한 심층적 인 설명에 감사드립니다. 언급 된 관련 질문에 대한 답변 중 하나 dmesg이지만 여기에 주어진 맥락이 없으면 의미가 없습니다.
Bradd Szonye

16

나는 내 것을 찾았다 /var/log/upstart/


내 직업의 이름이있는 파일 /var/log/upstart/job.log에서 내 것을 찾았 job습니다.
Kenny Evitt

AFAIK는 작업의 stdout / stderr이있는 곳입니다. 이 질문은 특정 작업과 관련이없는 Upstart 자체의 로그 메시지에 관한 것입니다.
Vanessa Phipps
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.