我需要从我的systemd日志文件中收集一些统计数据,比如有多少用户将某个查询字符串参数传递给我的服务。我知道我可以在journalctl中查看这些信息,但是我不知道如何在Go (或Python)中这样做,这样我就可以聚合数据。我一直在为此寻找一个库,但似乎什么都找不到,我也不知道日志文件实际存储在哪里。
发布于 2018-10-11 23:51:51
您可以使用日志API以编程方式访问systemd日志。
或者,您可能需要考虑在主机上运行systemd日志gatewayd服务,该服务通过HTTP服务器导出日志数据,在这种情况下,您可以使用另一种语言的HTTP客户端实现直接查询日志。
官方日志API是作为systemd本身的一部分提供的,用于实现日志and。这是一个C API。
这个API直接访问/var/log/journal或/run/log/journal下由systemd日志编写的文件,因此需要适当的权限才能从这些位置读取,这通常意味着您需要以root用户的身份运行代码。
此API还要求您链接到systemd库,并使这些库在运行时可用。您需要在您的Ubuntu18.04系统上安装libsystemd-dev包,以便能够编译并链接到它。
sudo apt-get install libsystemd-dev您可以查找sd-期刊(3)的手册页,以了解该API的总体概况。有关查询日志的更具体情况,请参见标清_日志_下一个(3) (其中包括一个包含完整简单程序的示例),以及限制您获得的匹配(有效地实现日志查询)的标清_日志_添加_比赛(3)。您还需要标清_日志_到达_数据(3)、标清_日志_开放(3)等,但希望这些指针能够让您开始直接访问日志。)
官方的systemd项目中有Python绑定,其中包括日志API的绑定。
这些模块也可作为Ubuntu18.04软件包使用,您可以通过以下方式安装这些软件包:
sudo apt-get install python3-systemd...for Python3(推荐),或者如果您仍然需要使用Python2,您可以使用:
sudo apt-get install python-systemd有关systemd.journal模块的Reader类在代码文档字符串上,请参阅文档。这门课让您可以阅读日记,这可能就是您感兴趣的内容。
github.com/coreos/go-systemd模块中的systemd库有Go绑定。
查看sdjournal子模块,特别是JournalReader类型,以便从日志中读取,包括用于筛选的匹配。你可以找到更多关于它的从源代码
使用日志API直接访问日志文件的一个替代方法是运行一个服务,该服务通过HTTP服务器导出日志文件。Systemd通过系统-日志-网关%d提供这样的服务。
此程序可在Ubuntu 18.04上作为系统日志远程包的一部分使用,因此您可以使用以下方法安装和启用该程序:
sudo apt-get install systemd-journal-remote
sudo systemctl enable --now systemd-journal-gatewayd它将在端口19531上导出HTTP服务器,您可以使用该端口来浏览和查询日志。
请参阅有关系统-日志-网关。服务(8)手册页的更多详细信息,其中包括一些如何使用curl访问它的示例。您可以让它使用自己的本机期刊导出格式导出数据,如JSON或类似syslog的纯文本。
如果您使用systemd日志网关路由,请确保您了解通过HTTP服务器导出日志数据的安全含义。至少,考虑只在本地主机上公开端口。
https://unix.stackexchange.com/questions/474383
复制相似问题