【问题标题】:Python script to return list of a systemd units log messages from systemd's journal用于从 systemd 日志返回 systemd 单元日志消息列表的 Python 脚本
【发布时间】:2019-05-09 09:12:57
【问题描述】:

我有一个学校作业,我需要编写一个 python 脚本,该脚本从 systemd 的日志中返回一个 systemd 单元日志消息的列表。此外,它应该是最近的消息(过去 24 小时和 30 分钟)。例如,我想获取 sshd.service 的日志消息。 感谢您提供任何帮助我入门的提示。

【问题讨论】:

    标签: python logging system monitoring


    【解决方案1】:

    python-systemd

    systemd 有官方的python bindings,通常可以通过你的包管理器安装,例如

    $ dnf install python3-systemd
    

    对于 Fedora,或

    $ apt install python3-systemd
    

    适用于 Debian 及其衍生产品。如果在 virtualenv 中,您可以使用 pip 直接从 Git repo 安装:

    $ pip install git+https://github.com/systemd/python-systemd
    

    python-systemd 有清晰简洁的 API;这是一个示例脚本,用于获取过去 24 小时内为 sshd.service 记录的日记条目,模仿 journalctl 默认格式:

    import datetime
    import systemd.journal
    
    
    if __name__ == '__main__':
        date_last_24h = datetime.datetime.now() - datetime.timedelta(hours=24)
        reader = systemd.journal.Reader()
        reader.seek_realtime(date_last_24h.timestamp())
        reader.log_level(systemd.journal.LOG_INFO)
        reader.add_match(_SYSTEMD_UNIT='sshd.service')
        for entry in reader:
            print(
                '{} {} {}: {}'.format(
                    entry['__REALTIME_TIMESTAMP'].strftime('%B %d %H:%M:%S'),
                    entry['_HOSTNAME'],
                    entry['_SELINUX_CONTEXT'],
                    entry['MESSAGE'],
                )
        )
    

    仅使用 stdlib 查询日志 (subprocess)

    如果您不允许安装python-systemd,请使用适当的查询参数调用journalctl

    import subprocess
    import shlex
    
    if __name__ == '__main__':
        result = subprocess.run(shlex.split('journalctl -u systemd-udevd --since today'))
        raw_output = result.stdout
        print(raw_output)
    

    但是,您负责将输出分成几行并解析出每个条目的相关信息,这很快就会比使用绑定更麻烦。

    【讨论】:

      【解决方案2】:

      您可以按照以下步骤操作:

      【讨论】:

      • 您好,第一个链接是“未找到”。 ://
      猜你喜欢
      • 2014-12-07
      • 1970-01-01
      • 2019-02-04
      • 2013-09-13
      • 1970-01-01
      • 2015-08-27
      • 2015-09-05
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多