로깅을 비활성화하는 방법은 무엇입니까?

로깅을 비활성화하는 방법은 무엇입니까?

journalctl최근에 내 16GB SD 카드(Raspberry Pi)의 상당 부분을 차지한다는 사실을 알게 되었습니다 .

$ journalctl --disk-usage
Archived and active journals take up 312.1M in the file system.  

나는 이런 느낌이 journalctl들지 않습니다 journald.최선을 다하다이 기계에 대한 나의 사용 사례에서. 오래된 RPi이고 rsyslog작동합니다. 내 요구 사항과 사용량 journalctl은 다음과 같을 것으로 예상됩니다."일생에 한 번". 따라서 나는 journald"피드"를 비활성화하기로 결정했습니다 journalctl. 나는 그것이 다음 부팅시 시작되지 않도록 간단 하다고 생각 systemctl합니다 stop.disablesystemd-journald.service

플러그를 뽑기 전에 나는 몇 가지 조사를 하기로 결정했습니다. "방법" 조언을 제공하는 수천 개의 참고 자료를 찾는 대신 특정 검색어에 대한 결과가 거의 없었습니다."로깅을 비활성화하는 방법". 대신 결과는 주로 감소에 대한 journald제안을 제공합니다.LF. 나는 잠시 멈추게 만드는 몇 가지 참고 자료를 찾았습니다.

journaldArchLinux 포럼의 오래된 게시물에 따르면 없이는 비활성화할 수 없다고 나와 있습니다.반향;즉, "Masking systemd-journald causes all kinds of dependency failures and drops you at an emergency prompt."이 기사는 10년 전의 기사입니다...

이것systemd-journald.서비스 매뉴얼설명하다, "stopping it [systemd-journald.service] is not recommended.". 문서는 거기서부터 시작됩니다네임스페이스?

systemd장치 시작을 방지하는 일반적인 명령은 효과가 없다는 것을 배웠습니다 . 즉, 정상적으로 시작합니다.

$ sudo systemctl disable systemd-journald.service
$ sudo reboot 

# ... and after boot & login:

$ systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
     Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
     Active: active (running) since Fri 2022-06-03 07:30:29 UTC; 1min 59s ago
TriggeredBy: ● systemd-journald-audit.socket
             ● systemd-journald.socket
             ● systemd-journald-dev-log.socket
       Docs: man:systemd-journald.service(8)
             man:journald.conf(5)
   Main PID: 134 (systemd-journal)
     Status: "Processing requests..."
      Tasks: 1 (limit: 1598)
        CPU: 820ms
     CGroup: /system.slice/systemd-journald.service
             └─134 /lib/systemd/systemd-journald

...
$ 

어떻게 journald비활성화할 수 있나요? ...또는 비활성화할 수 있나요?

그렇지 않다면 systemd왜 개발자가 사용자에게 이렇게 하도록 강요하겠습니까? (그렇습니다. 조언을 구하는 것이므로 질문의 해당 부분은 잊어버리십시오.)

답변1

journald사용할 때 없애고 싶지 않은 이유는 그 정보를 얻을 수 있기 rsyslogd때문입니다 .rsyslogd~에서일기장, 그런 식으로 둘이 잘 놀아요.

이는 여기 댓글에 링크된 일부 Q&A와 다소 상반됩니다. 로그가 휘발성(메모리 내) 저장소만 사용하고 rsyslog실제 로그 파일에 쓰도록 구성된 현재 Linux 시스템(Fedora 및 Debian에서 확인)에서 이에 대한 몇 가지 관찰 내용은 다음과 같습니다.

  • /var/run/log은(는) 하나의 하위 디렉토리가 있는 디렉토리입니다. 여기 에는 및 에서 작성한 파일이 journal포함되어 있습니다 .systemd-journald리더 rsyslogd. 이 디렉터리는 tmpfs파티션에 있으므로 메모리 휘발성 저장소로 간주됩니다.
  • /dev/log에 대한 심볼릭 링크입니다 /run/systemd/journal/dev-log.

이러한 시스템에는 /etc/rsyslog.conf다음이 포함됩니다(재고 없음 rsyslog.conf).

# Input
module (
        load="imjournal"
        ...
)

Fedora와 Debian의 차이점은 기본 구성에 있습니다. 전자 imjournal도 사용합니다 imuxsock(사용자 공간 소켓). 1 데비안은 커널 자체를 수신할 필요가 없기 때문에 imuxsockand (커널 로그)를 사용합니다. 저도 성격이 좀 안맞았다고 생각했어요.imklogimjournal

내 요점 중 하나는 로깅을 완전히 제거하는 것이 불가능하지는 않지만 나쁜 생각이라는 것입니다. 이는 현대 시스템 기반 시스템의 핵심 구성 요소입니다. 단점은 rsyslog보다 더 많은 디스크 공간을 사용할 수 있다는 점이지만 이는 및 Storage=volatile(예를 들어) 를 사용하여 쉽게 구성할 수 있습니다 .RuntimeMaxUse=64M/etc/systemd/journald

Journald에서 rsyslogd를 가져오는 것은 백엔드/프론트엔드 관계입니다. rsyslog는 일반 텍스트 로깅과 기록되는 내용, 위치, 방법에 대한 보다 세밀한 제어를 제공하는 반면 Journald는 시스템 서비스와의 더 나은 통합을 제공하므로 훌륭합니다.


  1. rsyslog는 imuxsockas를 사용하는 imuxjournal것이 덜 효율적이며 다른 문제가 발생할 수 있다고 제안합니다. 이에 대한 Andrew Henry의 답변과 아래 설명도 참조하세요.

답변2

로깅을 비활성화하는 방법은 무엇입니까?

우선, 이것은Rsyslogd 문서는 imjournalsystemd 로그에서 로그 메시지를 가져오는 모듈을 설명합니다.(굵은 글씨는 원본이고 이탤릭체는 제가 강조한 것입니다):

이 모듈은 로그 데이터베이스를 읽습니다.상대적으로 성능 집약적인 작업으로 간주되는 작업. 따라서 이 모듈을 활용하는 구성의 성능은 다음과 같습니다.imuxsock을 사용할 때보다 현저히 느림. 이 로그는 모든 "클래식" syslog 메시지의 복사본을 imuxsock에 제공하지만 구조화된 데이터는 제공하지 않습니다. Imjournal은 구조화된 데이터가 필요한 경우에만 사용해야 합니다. 그렇지 않으면 imjournal이 imuxsock으로 대체될 수 있으며 이를 강력히 권장합니다..

의도된 사용 사례에 대한 자세한 내용은 rsyslog 로깅 통합에 대한 짧은 데모를 확인하는 것이 좋습니다.

경고하다: 특정 버전의 systemd 로그에는 데이터베이스 손상 문제가 있어 로그가 긴밀한 루프에서 동일한 데이터를 끝없이 반환하게 됩니다. 이로 인해 rsyslog 내에서 많은 수의 메시지 중복이 발생하여 시스템 리소스가 고갈되면 서비스 거부가 발생할 수 있습니다. 이는 적절한 속도 제한기를 사용하여 어느 정도 완화할 수 있지만, 그래도 오래된 데이터에는 끝없이 반복되는 급증이 있습니다. 기본적으로 속도 제한이 활성화되어 10분 안에 20,000개의 메시지를 처리할 수 있습니다. 이는 대부분의 사용 사례에 충분합니다. 충분하지 않은 경우 아래 매개변수를 사용하여 허용되는 볼륨을 조정하세요.꼭 필요한 경우에만 이 플러그인을 사용하는 것이 좋습니다..

rsyslog에 "구조화된 데이터"를 제공해야 하는 "긴급한 요구"가 있습니까? 이 작업을 수행할 때 더 많은 CPU 주기를 사용하게 되지만 훨씬 느려지나요?

systemd의 로그를 직접 rsyslog로 바꾸는 것은 쉽습니다.

  1. 편집하다 /etc/rsyslog.conf. imjournal및 에 대한 모든 참조를 제거합니다 imuxsock.

  2. 위의 줄을 다음으로 바꾸십시오.

    module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
    SysSock.Use="on") # Turn on message reception via local log socket;

  3. 다음 명령을 실행하십시오.

    systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket

  4. 달리기

    systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket

  5. 달리기

    systemctl restart rsyslog

  6. 확인 메시지가 나타납니다./var/log/messages 외.

특히 더 많은 시스템 서비스를 비활성화하여 이러한 명령 중 일부를 조정해야 할 수도 있습니다.

답변3

이 서비스를 비활성화해도 장치 작동이 중단되지는 않지만 로깅이 눈에 띄게 중지됩니다. 다른 문제는 보이지 않습니다.

관련 정보