サービスに特定のクエリ文字列パラメータを渡したユーザーの数など、いくつかの統計情報を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/
。