診断 (Pro)
診断は、DefectDojoが自身の外部と通信を試みたすべての試行、そして他のシステムがDefectDojoと通信を試みたすべての試行を記録する、単一の台帳です。チケットが作成されなかったとき、スキャンがインポートされなかったとき、あるいはユーザーがサインインできなかったとき、何が起きたのか、いつ起きたのか、どの設定に対してか、そして誰がそれを引き起こしたのかを教えてくれるのがこのページです。
Diagnosticsは DefectDojo Pro の機能です。Connect > Diagnostics の下にあります。

記録される内容
DefectDojoの外部に到達するすべてのサブシステムについて、試行ごとに1行が記録されます。
| ソース | 生成される行の内容 |
|---|---|
| コネクタ | アップストリームコネクタによるdiscoverおよびsyncの実行 |
| ダウンストリームインテグレーター | Jira、GitHub、GitLab、ServiceNow、その他のダウンストリームコネクタへのプッシュ |
| Jira | レガシーJira連携: プッシュ、コメント、プレビュー |
| SSO (OIDC/OAuth2) | OAuthプロバイダー経由のサインイン試行 |
| SAML | SAMLアサーション(署名や属性の失敗を含む) |
| LDAP | LDAPバインドおよびルックアップ |
| インポート / 再インポート | UI、API、スケジュールのいずれかによるスキャンのアップロード |
| ルールエンジン | ルール評価とそれが試みるアクション |
| スケジューリング | スケジュール実行(一度も開始されなかったものを含む) |
| Sensei | リポジトリスキャンおよび修正の実行 |
| 通知 | 送信通知の配信 |
| システム | どの製品にも属さないインスタンスレベルの活動 |
行はサブシステムの代わりにではなく、サブシステムと並行して書き込まれます。各アダプターは元のレコードに紐付けられており、意図的にフェイルセーフに設計されています。診断行の書き込みで例外が発生しても、そのエラーは握りつぶされ、元の操作はそのまま続行されます。したがって、診断がプッシュ、インポート、ログインの失敗の原因になることは決してありません。
行はそれを生成したレコードをキーとしているため、元のレコードを再保存すると、重複を追加するのではなく既存の診断行が更新されます。1回の試行は、Queued から Running を経て結果に至るまで、その生涯を通じて1つの行のままです。
行のフィールド
| フィールド | 意味 |
|---|---|
| 日時 | 行が記録された日時。開始、終了、所要時間 は試行自体を表します |
| ソース | 上記の表にあるサブシステム |
| プロバイダー | そのソース内の具体的なツールまたはプロバイダー(jira、github、okta、スキャナー名など) |
| 操作 | 試みられた内容(push、sync、login、reimport、rule_run) |
| ステータス | Queued、Running、Success、Failed、Timed out、Skipped、または Dry run |
| 深刻度 | Info、Warning、Error、または Critical |
| 概要 | ひと目で安全に読める一行の結果 |
| トリガー | 試行を開始させたもの: UI、API、Scheduled、Webhook、Automatic、Command line、または System |
| 実行者 | 責任を持つユーザー、または無人実行の場合は System |
| アセット | 試行が属する製品。空欄はインスタンスレベルを意味します |
| 関連オブジェクト | 試行の対象となった検出事項、エンゲージメント、その他のレコード |
| 設定 | どの設定が使用されたか、そのラベルで示します |
| 外部参照 | 作成されたIssueキーなど、他システムが返した識別子 |
| 相関ID | 1つの論理操作に属する行をひも付けます |
| 報告された詳細 および コンテキスト | 完全な技術的詳細(制限あり、誰が何を見られるか を参照) |
4つのビュー
テーブル上部のタブは、あらかじめ用意された起点であり、自分で組み立て直す必要のあるフィルターではありません。
- エラー — 失敗とタイムアウト。最初に開くべきタブです。
- 成功 — 動作している連携が実際に機能している証拠。「何も同期されていない」という報告を受けたときに役立ちます。
- 完了しなかった — 完了すべき時間をとうに過ぎても、まだ
QueuedまたはRunningのままの試行。これらは静かな失敗です。何も失敗していないので何も報告されませんが、何も届いてもいません。 - すべてのイベント — フィルターなしのすべて。

現在表示中のビューはページURLの一部になっているため、ビューにリンクを張ることができ、リフレッシュしても保持されます。
一覧を絞り込む
- 期間 — ヘッダーのボタンから、24時間、7日間、30日間、または90日間を選択できます。
- ソース件数 — サマリーカード下の色付きの件数もクイックフィルターとして機能します。クリックするとそのソースのみを表示し、もう一度クリックする(または ソースフィルターを解除)と元に戻ります。一度にアクティブにできるのは1つまたはゼロです。
- 列ごとのフィルターと並べ替え — 深刻度やソースを含め、すべての列でフィルターと並べ替えができます。深刻度は五十音順ではなく重大さ順(
Critical→Info)で並べ替えられ、ソースは内部で保持されている値ではなく画面に表示されているラベルで並べ替えられます。 - キーワード検索 — テキストフィールドを横断して一度に検索します。
- 列の表示設定 — 列の選択やその保存済みレイアウトは、他のPro一覧と同様に動作します。

行の先頭にある虫眼鏡アイコンをクリックすると、試行の全体を開くことができます。

行が書き込まれる前に認証情報は除去されます
連携エラーは失敗したリクエストを引用しますが、その引用には Authorization ヘッダー、クエリ文字列内のトークン、接続URL内のパスワードなど、機密情報が含まれることがあります。診断は入力の時点でそれらを取り除くため、元の値がデータベースに到達することはなく、後から気が変わってもそれが露出することはありません。
除去される対象は2種類あります。
- 認証情報らしいキーの下にある値 —
password、token、secret、api_key、authorization、private_keyなど、キー名が秘密情報らしく見えるものすべて(大文字小文字やハイフン・スペースの有無は問いません)。ごく一部のキーは、その内容ではなく存在すること自体が重要であるため対象外です。 - どこに現れても認証情報らしく見える値 — bearerおよびbasic認証ヘッダー、JWT、URLに埋め込まれた認証情報(
https://user:pass@host)、識別可能なベンダーのトークンプレフィックス、PEMブロック。
それぞれは [redacted] に置き換えられます。周囲のメッセージはそのまま残るため、エラーは読める状態を保ちます。
401 Unauthorized: Authorization: [redacted]
upload rejected: https://svc:[redacted]@sftp.example/out/…長い値は切り詰められ、深くネストしたコンテキストはフラット化されるため、一つの巨大なペイロードによってテーブルが肥大化することはありません。
行から何かが除去された場合、そのフィールドが元々空だったのか除去されて空になったのか迷わせることなく、行自体がその旨を示します。
マスキングは設計上ベストエフォートです。 スクラバーは認証情報の形状を認識します。機密情報らしく見えないキーの下にある、普通の文章のように見える秘密情報は、記録されてしまう可能性があります。診断を、秘密情報が絶対に存在しないことが保証された場所としてではなく、運用ログとして扱ってください。そして技術的な詳細は、必要な人だけに閲覧を制限しておいてください。
誰が何を見られるか
診断は階層化されています。失敗の概要は製品オーナーにとって有用ですが、その背後にある生のリクエストはそうではないためです。
| スーパーユーザー | それ以外のユーザー | |
|---|---|---|
| 自分が権限を持つ製品の行 | はい | はい |
| インスタンスレベルの行(製品に紐付かない) | はい | いいえ |
| 概要、ソース、ステータス、深刻度、日時、設定 | はい | はい |
| 報告された詳細、コンテキスト、リモートIP | はい | 非表示(非表示である旨が表示されます) |
スーパーユーザー以外のユーザーには、データが欠落しているように見える空欄ではなく、詳細情報が存在していて非表示になっていることが示されます。SSO、SAML、LDAPなど、どの製品にも属さない活動を示すインスタンスレベルの行は、アクセスを許可し得る製品メンバーシップが存在しないため、スーパーユーザー専用です。
レコードの保持期間
スケジュールタスクが台帳を刈り込むため、無制限に増え続けることはありません。
| 深刻度 | 保持期間 |
|---|---|
Info | 30日間 |
Warning、Error、Critical | 180日間 |
両方の期間は DIAGNOSTIC_EVENT_INFO_RETENTION_DAYS および DIAGNOSTIC_EVENT_RETENTION_DAYS の設定で変更できます。削除はバッチ単位で実行されるため、大規模な削除でも長時間トランザクションを保持し続けることはありません。
API
この台帳はAPI経由では読み取り専用で、/api/v2/diagnostic_events/ で提供されます。
| エンドポイント | 返される内容 |
|---|---|
GET /api/v2/diagnostic_events/ | 以下のフィルターに対応した一覧 |
GET /api/v2/diagnostic_events/{id}/ | 1件のイベント |
GET /api/v2/diagnostic_events/summary/ | ヘッダーカードの元になる件数(ソースごとの集計を含む) |
GET /api/v2/diagnostic_events/choices/ | source、status、severity、trigger の有効な値 |
便利なパラメーター:
| パラメーター | 効果 |
|---|---|
source、status、severity、trigger | カンマ区切りで複数の値を同時に指定できます |
failures_only=true | 失敗とタイムアウト |
unresolved_only=true | まだキューにあるか実行中の試行 |
product_name | 製品名でフィルタリング |
object_model | 試行の対象となったレコードの種類でフィルタリング |
o= | 並べ替え。- を付けると逆順になります(o=-created_at) |
同じアクセス規則が適用されます。スーパーユーザー以外は、制限されたフィールドが非表示になった、製品スコープの行のみを取得します。
何が問題だったのかを突き止める
- チケットが一度も作成されなかった。 ソースをインテグレーター(またはJira)に絞り込み、ステータスを確認します。
Failedであれば概要に理由が示されます。事後もずっとQueuedのままであれば、ジョブが一度も実行されなかったことを意味し、認証情報の問題ではなくワーカーやスケジューリングの問題です。 - ユーザーがサインインできない。 ソースをSSO、SAML、またはLDAPに絞り込み、そのユーザーの試行の失敗内容を確認します。不正なアサーション署名、拒否されたバインド、一致しない属性などです。これらの行はインスタンスレベルのため、スーパーユーザーのみが閲覧できます。
- スキャンが表示されない。 ソースをインポート / 再インポートに絞り込みます。トリガーを見れば無人のスケジュールアップロードか誰かの手動アップロードかが分かり、実行者を見れば誰に確認すればよいかが分かります。
- 何かが延々とリトライしている。 相関IDで並べ替える、または1つに絞り込むことで、同一の論理操作に属するすべての試行をまとめて確認できます。
- 「何も動いていない」。 まず同じ期間の成功を開いてください。そこで健全な一覧が見えれば、漠然とした障害を具体的なものに絞り込めます。
関連項目
- Feature Flags — オプションのPro機能のオン・オフ切り替え
- Connectors — 検出事項を取り込む
- Pro Integrations — 検出事項を送信する
- Single Sign-On — サインイン試行がここに表示されるIDプロバイダー