Auth0のログをクエリを使って検索

2020.08.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Auth0では、ダッシュボードを使用して管理者が実行したアクション、管理APIを介して実行された操作、およびユーザーが行った認証に関するログデータがダッシュボード/管理APIを使って取得できます。

ログに関して

ダッシュボードでログの画面にいくと、テキストボックス(クエリを使ってログフィールド検索), Filter(イベントタイプによる絞り込み),Dateによる検索ができるようになっています。

クエリを使ってログフィールド検索を行うことをあまりやったことがないので、今回はこの検索について実際に試してまとめようと思いました。

Auth0では、Luceneクエリ構文 を使用することにより検索を絞り込むことができます。

ドキュメントにも記載がありますが、クエリ文字列は一連の用語と演算子に解析されます.

  • 用語は単一の単語にすることもでき、二重引用符で囲まれた単語("customer log": 完全一致検索)にすることもできます。
  • 複数の用語を括弧でグループ化して、サブクエリを作成することができる。
  • すべての検索フィールドでは大文字と小文字が区別される。
  • 演算子(AND、OR、NOT)が使用できる。
  • フィールド名のない用語は、選択されたフィールドにのみ一致
  • ワイルドカード検索が可能
  • クエリによる範囲検索が可能

フィールドに関しては 検索可能なフィールド が定義されています。

クエリのフォーマットは、

フィールド名:用語 になっています。

検索可能なフィールドに対してのクエリ例

log_id: ログイベントのIDで絞り込む

  • 完全一致
    log_id:90020200731132441259000068188768169435080200371958710370

  • 前方一致

    log_id:90020200731132*

  • 後方一致

    log_id:*97152834

    エラーとなってしまう。

    ※ 2020-08-05 追記          Auth0にフィードバック済み

date: イベントが発生した瞬間

  • 2020年8月1日以降のログ(範囲検索)
    date:[2020-08-01 TO *]
  • 2020年7月のログ(範囲検索) }を使うと、指定した日は含めないということになる。]は含める。

    date:[2020-07 TO 2020-08-01}

connection:イベントに関連する接続名

  • google-oauth2 という接続名でのイベントを検索
    connection:google-oauth2

connection_id:イベントに関連する接続id

  • con_3F66IUAL2pCWxqVa という接続IDでのイベントを検索
    connection_id:con_3F66IUAL2pCWxqVa
  • 接続IDが空っぽのイベントを検索
    connection_id:""

client_id: イベントに関連するクライアントID

  • client_idの検索
    # 完全一致
    client_id:4R3vtkTTtYsol3zGrLol0R3ZPMUcmKJY
    
    # 前方一致
    client_id:4R3vtk*
    
    # 後方一致
    client_id:*ZPMUcmKJY

後方一致に関しては、リテラルは3文字以上である必要がある

client_id:*JY はシンタックスエラーとなってしまう。

client_name: イベントに関連するクライアントの名前

  • miscから始まるクライアント名を検索
client_name:misc*
  • クライアント名が空っぽのやつを検索
client_name:""

ip: ログエントリの原因となったリクエストの発信元のIPアドレス

  • 10.1.1.10というIPアドレスからのアクセスを検索
ip:10.1.1.10

ip:10.1.* とワイルドカードを使用するとシンタックスエラーになった。

user_id: イベントに関連するユーザーID

  • auth0から始まるユーザーIDでの検索
    user_id:auth0*

user_name: イベントに関連するユーザー名

  • oで始まりclassmethod.jpでおわるユーザー名を検索
    user_name:o*classmethod.jp

description: イベントの説明

  • Successfulのイベントの検索
    description:Successful*

結果が何故か空っぽになる(確認中)

  • ruleのイベントを検索(タイプがAPIオペレーション)
    description:*rule

タイプがAPIオペレーションのものはdescriptionの検索が可能だった。

  • emailと含まれているエベントを検索
    description:*email*

ドキュメントには明記されていないが、タイプ指定があるのかもしれない。

※ 2020-08-05 追記

ログのrawで表示されるdescriptionがrawでなく、実際の検索索引ではこれらの項目に値が入っていない、または異なる値が入っているという状況のためこのような現象となる.

制限事項

user_agent:イベントに関連するユーザーエージェント

  • chromeからのアクセスを検索
user_agent:Chrome*

何故か結果がからっぽ(確認中)

user_agent:*Chrome*

なら検索可能となった。

  • Macからのアクセスを検索
user_agent:*Mac*

※ 2020-08-05 追記

ログのrawで表示されるuser_agentがrawでなく、実際の検索索引ではこれらの項目に値が入っていない、または異なる値が入っているという状況のためこのような現象となる.

type: 可能なイベントタイプの 1つ

  • タイプがfで始まるすべてのログを検索(Failed~~)
type:f*

strategy: イベントに関連する接続戦略

  • smsを使ったイベントを検索
    strategy:sms

strategy_type:イベントに関連する接続戦略タイプ

  • databaseログインを行ったイベントを検索
    strategy_type:database

  • ソーシャルログインを使ったイベントを検索

strategy_type:socail

hostname: 認証フローに使用されているホスト名

  • ホスト名がauth0
    hostname:*auth0.com

  • ホスト名に独自ドメインを設定した場合(例えばclassmethod.net)

    hostname:*classmethod.net

演算子を使ったクエリ例

  • client_nameとuser_nameで検索(AND)

    client_name:misc-study-archives AND user_name:mori*

  • 2020年7月の失敗したイベントを検索(AND)

    date:[2020-07 TO 2020-08-01} AND type:f

  • google-oauth2を使ったログイン または 失敗したイベントを検索 (AND, OR)
    (connection:google-oauth2 AND type:s) OR type:f

  • API Operation以外のイベントを検索(NOT)
    NOT type:sapi