JupyterHubの利用状況をLinuxコマンドで手軽に分析する方法

JupyterHubの利用状況をLinuxコマンドで手軽に分析する方法

前提環境

  • AWS EC2上でJupyterHubをsystemdサービスとして運用
  • 認証はPAMAuthenticatorを使用
  • 複数のデータサイエンティストが利用している環境

ログの確認方法

まずは基本的なログの見方から。JupyterHubをsystemdで管理している場合、ログはjournalctlコマンドで確認できます。

journalctl -u jupyterhub --since "1 week ago"

まずは実際のログ形式を確認する必要があります。環境によってログの出力形式が異なるため、以下のコマンドで実際のログを確認してください:

# まずは最近のログを確認
journalctl -u jupyterhub --since "1 day ago" | head -20

ログ形式の例(環境によって異なります):

May 15 09:23:45 server01 jupyterhub[1234]: [I 2025-05-15 09:23:45.123 JupyterHub auth:456] User user001 logged in

利用状況の集計

直近1ヶ月のユニークユーザー数

重要:実際のログ形式を確認してからawkの部分を調整してください

# まずはログ形式を確認
journalctl -u jupyterhub --since "1 week ago" | grep -i "login"

# ログ形式に応じてawkを調整(例)
journalctl -u jupyterhub --since "1 month ago" | grep -i "logged in" | awk '{print $(NF-2)}' | sort | uniq | wc -l

ログ形式によってawkで抽出するフィールドが変わるため、上記は一例です。実際の環境に合わせて調整が必要です。

直近1ヶ月のアクセス数(ログイン回数)

journalctl -u jupyterhub --since "1 month ago" | grep -i "logged in" | wc -l

これで「何回ログインが発生したか」がわかります。JupyterHubでは主にログイン回数がアクセス数の指標となります。

より詳細なアクセス数分析

JupyterHubでは複数のレベルでアクセス数を計測できます:

1. JupyterHub自体へのアクセス

# JupyterHubサービスへの全アクセス
journalctl -u jupyterhub --since "1 month ago" | grep -E "(GET|POST)" | wc -l

2. プロキシ経由のアクセス(configurable-http-proxy使用時)

# プロキシのログも確認
journalctl --since "1 month ago" | grep "configurable-http-proxy" | wc -l

3. Nginxのアクセスログ(リバースプロキシ使用時)

# Nginxのアクセスログからカウント
grep "$(date '+%b/%Y' -d '1 month ago')" /var/log/nginx/access.log | grep "jupyterhub" | wc -l

ユーザー別の利用状況

ログ形式を確認した上で、ユーザー別の集計も可能です:

# 実際のログ形式に応じて調整してください
journalctl -u jupyterhub --since "1 month ago" | grep -i "logged in" | awk '{print $(NF-2)}' | sort | uniq -c | sort -nr

結果例(ユーザー名は仮名):

     15 user001
     12 user002
      8 user003
      3 user004

運用での活用方法

月次レポートを作る際に、これらのコマンドでユーザー数・アクセス数を集計して資料に載せています。特にアクセス数の推移を見ることで、システムの利用状況を把握しやすくなりました。また、利用が少ないユーザーがいた場合は、使い方に困っていないか声をかけるきっかけにもしています。

注意点とトラブルシューティング

環境によるログ形式の違い

  • JupyterHubのバージョンによってログメッセージが変わることがある
  • 認証方式(PAM、LDAP、OAuth等)によってもログの内容が異なる
  • ログローテーションの設定によっては古いログが消えている可能性がある

実際の運用での確認手順

  1. まず実際のログ形式を確認:journalctl -u jupyterhub --since "1 day ago" | head -20
  2. ログイン関連のメッセージを探す:journalctl -u jupyterhub --since "1 day ago" | grep -i login
  3. ログ形式に応じてawkのフィールド番号を調整
  4. 少量のデータで動作確認してから本格運用

grepパターンの調整が必要な場合

  • 「logged in」以外のパターン:「login」「authenticated」「session started」など
  • 大文字小文字を区別しない:grep -iオプションを使用

まとめ

JupyterHubの利用状況を把握するために、systemdのログを活用する方法を紹介しました。ただし、実際の環境では必ずログ形式を確認してからコマンドを調整することが重要です。

実用的なポイント

  • 環境によってログ形式が大きく異なるため、汎用的なコマンドは存在しない
  • まずは小規模なテストで動作確認することを推奨
  • 定期的な運用報告や利用状況の把握には十分実用的

次のステップ

より高度な分析が必要な場合は、JupyterHubのデータベースを直接クエリする方法や、専用の監視ツールの導入も検討できます。

この方法が同じような運用課題を抱えている方の参考になれば幸いです。

Last modified: 2025-05-23

Author