내 서비스에 특정 쿼리 문자열 매개변수를 전달한 사용자 수와 같은 일부 통계를 systemd 로그 파일에서 수집해야 합니다. Journalctl에서 이 정보를 볼 수 있다는 것을 알고 있지만 데이터를 집계할 수 있도록 Go(또는 Python)에서 이 정보를 보는 방법을 모르겠습니다. 이에 대한 라이브러리를 찾고 있었지만 아무것도 찾을 수 없는 것 같고 로그 파일이 실제로 어디에 저장되어 있는지 알 수 없습니다.
답변1
Journal API를 사용하여 프로그래밍 방식으로 systemd 로그에 액세스할 수 있습니다.
또는 호스트에서 systemd-journal-gatewayd 서비스를 실행하여 HTTP 서버를 통해 로그 데이터를 내보내는 것을 고려할 수 있습니다. 이 경우 다른 언어로 HTTP 클라이언트 구현을 사용하여 로그를 직접 쿼리할 수 있습니다.
저널 API
공식 Journal API는 systemd 자체의 일부로 제공되며 Journalctl을 구현합니다. 이것은 C API입니다.
/var/log/journal
이 API는 systemd-journald 또는 직접 작성된 파일에 액세스하므로 /run/log/journal
이러한 위치에서 읽으려면 적절한 권한이 필요합니다. 이는 일반적으로 코드를 루트로 실행해야 함을 의미합니다.
또한 이 API를 사용하려면 시스템 라이브러리에 연결하고 런타임에 사용할 수 있도록 해야 합니다. libsystemd-dev
이 패키지를 컴파일하고 링크하려면 Ubuntu 18.04 시스템에 이 패키지를 설치 해야 합니다 .
sudo apt-get install libsystemd-dev
맨 페이지를 찾을 수 있습니다SD저널(3)이 API의 일반적인 개요입니다. 저널 쿼리에 대한 보다 구체적인 예는 다음을 참조하세요.sd_journal_next(3)(여기에는 완전한 간단한 프로그램이 포함된 좋은 예제가 포함되어 있습니다)sd_journal_add_match(3)얻을 수 있는 일치 항목을 제한합니다(저널 쿼리를 효과적으로 구현합니다.) 또한 다음이 필요합니다.sd_journal_get_data(3),sd_journal_open(3)잠깐만요. 이 포인터가 로그에 직접 액세스하는 데 도움이 되기를 바랍니다. )
Python 바인딩
가지다Python 바인딩Journal API에 대한 바인딩을 포함하는 공식 systemd 프로젝트의 systemd입니다.
이러한 모듈은 다음 명령을 사용하여 설치할 수 있는 Ubuntu 18.04 패키지로도 제공됩니다.
sudo apt-get install python3-systemd
...Python 3(권장)의 경우 또는 여전히 Python 2를 사용해야 하는 경우 다음을 사용할 수 있습니다.
sudo apt-get install python-systemd
systemd.journal
Reader
모듈 클래스에 대한 설명서를 참조하세요.코드 독스트링에. 이 과정은 귀하가 관심을 가질 수 있는 저널에 대한 읽기 액세스를 제공합니다.
바인딩 이동
systemd 라이브러리에 대한 Go 바인딩이 있습니다.github.com/coreos/go-systemd기준 치수.
필터링을 위한 일치 항목을 포함하여 로그에서 읽기 위한 sdjournal
하위 모듈, 특히 유형을 살펴보세요 . JournalReader
이에 대한 자세한 정보를 찾을 수 있습니다.소스 코드에서
저널 게이트웨이
Journal API를 사용하여 로그 파일에 직접 액세스하는 또 다른 방법은 HTTP 서버를 통해 로그 파일을 내보내는 서비스를 실행하는 것입니다. Systemd는 다음을 통해 이러한 서비스를 제공합니다.systemd-저널-gatewayd.
이 프로그램은 Ubuntu 18.04에서 systemd-journal-remote 패키지의 일부로 제공되므로 다음 명령을 사용하여 설치하고 활성화할 수 있습니다.
sudo apt-get install systemd-journal-remote
sudo systemctl enable --now systemd-journal-gatewayd
그러면 로그를 찾아보고 쿼리하는 데 사용할 수 있는 포트 19531에서 HTTP 서버가 내보내집니다.
자세한 내용은 매뉴얼 페이지를 참조하세요.systemd-journal-gatewayd.service(8), 여기에는 컬을 사용하여 액세스하는 방법에 대한 몇 가지 예가 포함되어 있습니다. 자체 기본 내보내기 데이터를 사용하도록 할 수 있습니다.저널 내보내기 형식, JSON 또는 syslog와 유사한 일반 텍스트입니다.
systemd-journal-gatewayd 경로를 선택하는 경우 HTTP 서버를 통해 로그 데이터 내보내기의 보안 영향을 이해해야 합니다. 최소한 localhost에서만 포트를 노출하는 것을 고려하십시오.
답변2
나는 그것이 알고 있는 것의 journalctl
일부를 포착한다고 생각합니다 . /var/log/syslog
이것은 단지 관찰일 뿐입니다. 매개변수 없이 실행 하면 journalctl
모든 로그가 표시됩니다. Exit를 누른 q
다음 Run을 누르세요 tail /var/log/syslog
. 동일한 출력이 표시되지만 파일의 정보에는 출력보다 더 많은 정보가 syslog
포함됩니다 .journalctl
따라서 아래 설명에 따라 syslog가 설치되어 있는지 확인한 다음 /var/log/syslog
필요한 것만 구문 분석할 수 있습니다. 또한 귀하의 서비스(무엇인지 확실하지 않음)가 자체 로그인에 기록하도록 할 수도 있습니다 /var/log/
.