ユーザー セッションの統計情報を分析する、パート1
IBM i 上でのユーザー アクティビティについてレポートしたいと思いました。利用できるSQL表関数が豊富にあることを知っていたので、役に立ちそうなものを見つけるのは難しくないことは分かっていました。このレポートで確認したかったのは、一定の期間内にユーザーがシステムに何回ログインしたかということでした。
私が使用した表関数は、 QSYS2.HISTORY_LOG_INFOです。まず、私が作成したコードを示してから、コードの各部を見て行きます。
以下は、ユーザーがサインインした回数を判別するためのSQLステートメントです。
SELECT COUNT(DISTINCT DATE(MESSAGE_TIMESTAMP)) AS DAYS_LOGGED_IN
FROM TABLE(QSYS2.HISTORY_LOG_INFO(
START_TIME => CURRENT TIMESTAMP - 5 days,
END_TIME => CURRENT TIMESTAMP
)) AS H
WHERE MESSAGE_ID = 'CPF1124'
AND from_job_user = 'USER_ID';
1人のユーザーが1日に複数回ログインおよびログアウトすることもあるため、ログインした回数を重複なしで集計することとしました。結果を絞り込むために、私は過去5日間の日付範囲を使用しました。自分のニーズに合わせて日付範囲は変更することができます。 where 節に、2つの条件があることに注目してください。SQLステートメントで使用した最初の列は MESSAGE_IDです。こうしたのは、メッセージID CPF1124 は、ジョブがいつ開始したかを知らせてくれることが分かっているからです。私が使用した2つ目の抽出条件は from_job_userです。ここでは、私が確認したいユーザーIDを指定しました。
このステートメントを実行すると、重複分を除いた、ユーザーが過去5日間にログインした回数が得られます。
このSQLステートメントに少し変更を加えることによって、ユーザーがシステムからログアウトした回数を判別することもできます。
SELECT COUNT(DISTINCT DATE(MESSAGE_TIMESTAMP)) AS DAYS_LOGGED_IN
FROM TABLE(QSYS2.HISTORY_LOG_INFO(
START_TIME => CURRENT TIMESTAMP - 5 days,
END_TIME => CURRENT TIMESTAMP
)) AS H
WHERE MESSAGE_ID = 'CPF1164'
AND from_job_user = 'USER_ID';
コードには小さな変更が1つあります。すなわち、フィルタリングする MESSAGE_ID です。ジョブがいつ終了したかを確認するために、この選択基準を CPF1164に変更します。このコードを実行すると、以下の結果が得られます。
これらのSQLステートメントを使用することで、ユーザーがシステムに何回サインインしているかについての有用な洞察が得られます。この記事のパート2では、ユーザーがシステムにサインインした日数、および彼らのセッションがどれくらいの期間アクティブだったかを取得する方法について紹介する予定です。
