다양한 runit 서비스의 svlogd 로그 병합

다양한 runit 서비스의 svlogd 로그 병합

여러 Node 프로세스가 똑같은 코드를 실행하는 Node.js 애플리케이션을 실행하고 싶습니다. 나는 그것을 사용하고 있다달리다Node 프로세스를 그대로 시작하고 관리합니다.좋은 요리사 지원. 설정을 설명하기 위해 2개의 runit 서비스 디렉터리를 실행하고 있다고 가정해 보겠습니다.

/etc/sv/test-1/run

#!/bin/sh
echo running test 1
sleep 9999

/etc/sv/test-2/run

#!/bin/sh
echo running test 2
sleep 9999

( 실제 Node 애플리케이션을 실행하기 위한 테스트 자리 표시자는 와 입니다. echo)sleep

이것은 훌륭하게 작동합니다... 기본적으로 runit프로그램이 svlogd각 서비스의 로그를 별도의 디렉터리에 저장하려고 한다는 점을 제외하면 말이죠. 문제는 여러 곳에서 애플리케이션의 모든 로그 항목을 보고 싶지 않다는 것입니다.

svlogd동일한 로그 파일 에 쓰기를 시도한 첫 번째 시도는 다음과 같습니다.

/etc/sv/test-1/log/run

#!/bin/sh
exec svlogd -tt /var/log/test

/etc/sv/test-2/log/run

#!/bin/sh
exec svlogd -tt /var/log/test

이건 아니야. 어떤 로그 서비스를 먼저 시작해도 정상적으로 실행됩니다. 두 번째로 시작된 로깅 서비스는 다른 로깅 서비스에 의해 잠겨 있으므로 실행되지 않습니다. 표시하려면:

$ sudo /etc/service/test-2/log/run
svlogd: warning: unable to lock directory: /var/log/test: temporary failure
svlogd: fatal: no functional log directories.

이것을 설정하는 더 좋은 방법이 있습니까? runit동일한 코드를 실행하는 여러 서비스의 모든 로그 항목을 한 곳에서 어떻게 볼 수 있습니까?

답변1

내가 아는 한, svlogd로그를 단일 파일로 병합하는 것은 지원되지 않습니다. 그러나 소켓에 대한 로깅은 지원합니다. 내 해결 방법은 svlogd로그 항목이 UDP를 통해 실행 중인 컴퓨터로 전달되도록 지시하는 것이었습니다.시스템 로그예.

/etc/sv/test-1/log/run

#!/bin/sh
exec svlogd -tt /var/log/test/1

/var/log/test/1/config

ptest-1: 
U127.0.0.1

/etc/sv/test-2/log/run

#!/bin/sh
exec svlogd -tt /var/log/test/2

/var/log/test/2/config

ptest-2: 
U127.0.0.1

여기서는 원하는 작업을 수행하도록 rsyslog를 구성하기만 하면 됩니다.

답변2

"로거"를 사용하여 시스템 로그 기록

syslog에 만족한다면 logger대신 syslog를 사용하십시오 svlogd. 로거에 대한 실행 스크립트 제공의 요점은 로깅에 원하는 모든 프로그램을 실행할 수 있다는 것입니다.

/etc/sv/test-1/log/run

#!/bin/sh
exec logger -i -p daemon.notice -t my_service

.

보기에 병합

또 다른 좋은 아이디어는 로그를 다른 위치에 둔 다음 파일을 볼 때 스크립트를 사용하여 로그를 병합하는 것입니다. 예를 들어 타임스탬프를 사용하면 svlogd다음이 가능합니다 .

cat /var/log/test/*/current | sort | less

여러 로그 파일을 동시에 볼 수 있는 다른 강력한 도구가 있습니다.다중 꼬리

관련 정보