드물지만 중요한 정보를 기록하는 하나의 특정 서비스가 있습니다. 몇 달 전에 설정했으며 오늘 journalctl -n 50 --unit=my-service
은 항목이 없음을 찾기 위해 실행했습니다 .
나는 대부분의 부대에서이 행동에 완벽하게 만족합니다. 즉시 (또는 며칠 전까지) 일어난 일이 필요하며 몇 개월 전의 기록은 신경 쓰지 않습니다.
그러나 journald
하나의 특정 장치 레코드에 대해 독립적 인 저장 및 보존 정책을 갖도록 지시 할 수있는 방법이 있습니까? 크기에 관계없이 5 년 동안 특정 로그를 유지하고 싶습니다. 다른 유닛의 로그는 이것에 영향을받지 않아야하며 기존 동작을 유지해야합니다.
나는 이해를 잃어 버렸고 journald.conf(5)
단위 당 구성이 가능할 때마다 파악할 수 없습니다. 그렇다면-간단한 구체적인 예제를 고맙게 생각합니다-어떤 파일을 편집 / 만들어야하고 무엇을 써야합니까? 또는 확실하지 않다는 것을 확실히 알고 있다면 좋은 답변이 될 것입니다.
참고 : 나의 특별한 경우는 아치 리눅스 호스트와 관련이 있지만, 이것이 중요하지 않다고 생각합니다.
답변
내가 일하는 것은 운이 좋지 않은 것 같습니다. 독립적 인 “장기 저장”저널을 생성하는 방법 (현재 사용자마다 다른 저널이 존재하는 것처럼)을 생성하지 않는 한, 그것이 실행 가능하고 제정신 접근법인지 확실하지 않습니다. syslogd (및 logrotate)를 설정하는 것이 더 쉬울 것 같습니다.
이 기능 은 Lennart가 확인한 2014 년 후반 에는 없었습니다 .
그리고 아직 여기에없는 것 같습니다. 최소한 “journald : 회전 / 진공시 우선 순위 및 서비스 별 유지 시간 허용”행 이 여전히 TODO 파일에 있습니다 (2016-07-11의 개정 링크).
답변
로그 파일을 생성하는 것은 매우 간단합니다. 기본적으로 저널링에 대한 모든 로깅은 syslog로 이동하며이 기본값이 있어야합니다. rsyslog.conf는 syslog에 전달 된 항목이 처리되는 방식을 제어합니다. 또한 SyslogFacility
기본값 daemon
은 모든 서비스의 로그 항목이 일반적으로의 daemon.log
파일에있게 /var/log
됩니다.
서비스 파일에서 [service] 섹션에 추가하십시오.
SyslogFacility=local2
(숫자는 0과 7 사이 일 수 있음) https://www.freedesktop.org/software/systemd/man/systemd.exec.html
local2가 특정 파일 (첫 번째 줄)에 기록되고 이상적 local2.none
으로 표시된대로 추가하여 syslog에 기록되지 않도록 /etc/rsyslog.conf (기존 줄 찾기)를 수정하십시오 ( 이미 저널에 있음).
local2.* /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none -/var/log/syslog
[편집] 당신은 또한 모든 캐치를 수정해야합니다
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none,local2.none -/var/log/messages
물론 실제 보존은 logrotate에 의해 수행되어야합니다.
HTH