Kibana の使い方
概要
このドキュメントでは、Kibana とは何か、検索方法、結果の解釈方法、特定の情報を取得するためのヒントとコツを提供します。
Kibana の使い方
Kibana は Elasticsearch 用の オープンソースのデータ可視化プラグイン です。Elasticsearch クラスタ上にインデックスされたコンテンツに対する可視化機能を提供します。Support Engineering は Kibana を使って、GitLab.com 上のエラーイベントの検索と、ユーザーによってその様々な側面に対して特定の変更がいつ行われたかの検出の両方を行っています。
ステージング (gstg) のような非本番環境では https://nonprod-log.gitlab.net/ を使用してください。
Note: Kibana はデフォルトで UTC タイムゾーンになっています。30 日より古いログは保持されません。古いログへのアクセスがあれば役立ったチケットに取り組んでいる場合は、
Support::SaaS::Log retention period reachedマクロでフラグを立ててください(これは追跡目的のみの内部マクロです)。
パラメータ
Kibana で どこを 検索するかを知ることは、適切な結果を得るために最も重要です。検索しているアプリケーション (GitLab.com) のエリアは Kibana では Index として知られています。検索に使われるデフォルトのインデックスは pubsub-rails-inf-gprd-* ですが、(change) ボタンをクリックすることで変更できます:

インデックスはほとんどの場合、私たちの一般的な ログ構造 と密接に対応しています。その他のよく使われるインデックスは以下のとおりです:
pubsub-gitaly-inf-gprd-*pubsub-pages-inf-gprd-*pubsub-runner-inf-gprd-*
例えば、ログイン失敗を追跡しようとしている場合は、pubsub-rails-inf-gprd-* インデックスを検索します。コントローラに関する 500 エラー を検索する場合は、デフォルトインデックスである pubsub-rails-inf-gprd-* で検索します。
インデックスとともに、追跡しようとしている特定のエラーやイベントが いつ 発生したかを知ることも重要であり、GitLab.com の Kibana ログは 30 日間保持されることを覚えておくことが重要です。Kibana では検索結果に対して相対時刻と絶対時刻の範囲を選択でき、これは日付範囲を操作することで変更できます:

フィールドとフィルタ
Note: 2022 年 3 月時点で、Kibana の検索には Filters を使用することが推奨されています。一般的な検索ボックスを使用すると X of Y Shards Failed の形式でいくつかのエラーが発生する可能性があるため、推奨されません。Infra Issue を参照してください。
各ログエントリは多数の Fields で構成されており、エントリに関する具体的な情報がそこに表示されます。検索結果にどのフィールドを適用し、どのようにフィルタリングするかを知ることは、どこ と いつ を検索するかを知ることと同じくらい重要です。最も重要なフィールドは以下のとおりです:
json.methodjson.actionjson.controller- 詳細については GitLab ソースコードのコントローラ定義 を参照してくださいjson.statusjson.path
利用可能なすべてのフィールドは左側のメニューに表示されており、それぞれの上にホバーして add ボタンをクリックすることで検索結果に追加できます。

特定のフィールドでフィルタリングしないと、検索クエリで多数のログエントリが返された場合に特定のものを見つけるのが困難になります。
例えば、過去 15 分以内に GitLab.com ユーザー tristan によって生成された 404 ステータスコードを返したログイベントを見つけようとしているとします。pubsub-rails-inf-gprd-* インデックスで json.username : tristan を検索することから始めます。その時間範囲内で検索し、左側のサイドバーで json.status フィールドの隣にある add をクリックすると、次のような結果が得られます:

結果の大部分は 200 を返すエントリで、これらは私たちが探しているものの範囲外です。404 が返された結果を検索するには、検索バーの下にある + Add Filter をクリックし、json.status is 404 の positive フィルタを設定すると、まさに私たちが探していた以下の結果が得られます。

IP ブロックの原因の特定
こちら に IP ブロックに関連するエラーについて Kibana を検索する役立つヒントがあります。
ログの特定
何を探せばいいかわからない?調査しているバグ/アクションを再現するためにセルフマネージドインスタンスの利用を検討してください。これにより、Issue が GitLab.com 固有のものかどうかを確認しつつ、Kibana で検索する際の参照に簡単にアクセス可能なログも提供できます。
セルフマネージドインスタンスの設定を希望する Support エンジニアは、利用可能な(会社が提供する)ホスティングオプションのリストについて、私たちの Sandbox Cloud ページ をレビューすべきです。
ログの共有
ログ検索の現在の状態を共有するには、Elastic の ログ共有 ドキュメントに従ってください。URL を直接コピーすると、他のユーザーが使用しようとしたときに検索の読み込みに失敗します。エンコードされているため、検索パラメータは URL に含まれません。
ダッシュボード
パターンの特定に役立つ可視化を作成するために設計された、利用可能なダッシュボードがいくつかあります。製品の特定の領域を絞り込んだり、特定の Issue やバグを特定したりするのにも役立ちます。GitLab チームメンバーであれば誰でも誰でも使えるダッシュボードを作成できますが、いくつかのサポート固有のダッシュボードがあります:
- Correlation Dashboard
- Rate Limit & Requests Dashboard
- Integrations Dashboard
- Errors & Exceptions Dashboard
Kibana で Analytics > Dashboard の下からダッシュボードにアクセスし、Support タグでフィルタリングするか、ダッシュボード名で検索できます。
自分のダッシュボードの作成に興味がある場合、ダッシュボード作成についての Elastic のガイド を読むことを検討してください。より広く役立ちそうなものを作成した場合、他のサポートチームメンバーが見つけやすくなるよう、ダッシュボードに Support タグを追加することを検討してください。
ダッシュボードを使用するには、必ず View モードになっていることを確認してください。view モードでは値を入力でき、ビジュアルがそれに応じて更新されますが、ダッシュボードには保存されません。キャプチャしたスナップショットを共有する必要がある場合は Share > Get Links を使用します。
既存のダッシュボードを 編集 する前に、自分のコピーを作成し、それに応じてラベルを付けるよう クローン することを検討してください。
Correlation Dashboard
トラブルシューティングに関連する Correlation ID が見つかった場合、correlation ダッシュボードを利用して、各個別のインデックスを検索することなく、インデックス全体の関連するすべてのコンポーネントを素早く表示できます。ダッシュボードを表示したら、json.correlation_id フィルタをクリックして、見つけた相関 ID を入力するだけです。それから web、workhorse、sidekiq、gitaly インデックスを検索します。
Rate Limit & Requests Dashboard
このダッシュボードを使用してユーザー名、IP、パス、または Namespace でレコードを素早くフィルタリングできます。これは、ユーザーまたは IP がレート制限の対象になっているかを判断しようとしており、使用パターンを発見および可視化する必要がある場合に役立ちます。
Integrations Dashboard
Namespace 全体にわたる特定の連携に関連するエラーを追跡するのに役立ちます。
Errors & Exceptions Dashboard
このダッシュボードは、Namespace またはパス/プロジェクト全体にわたって特定の HTTP ステータスを取得し、クラスで絞り込むのに使用できます。これは Namespace 全体、または GitLab.com 全体にわたるエラーパターンを理解するのに役立ちます。
ヒントとコツ
このセクションでは、特定のフィールドを検索しフィルタリングすることで、Kibana で非常に具体的な情報を見つけられる方法を詳述します。各ヒントには、参照用に例で使用されたグループ、サブグループ、またはプロジェクトへのリンクが含まれます。
Runner 登録トークンのリセット
例のグループ: gitlab-bronze
GitLab Runner 登録トークンがグループまたはプロジェクトに対してリセットされたかを確認し、どのユーザーがいつリセットしたかを確認できます。この例では、Runner 登録トークンがグループレベルの gitlab-bronze でリセットされました。ログエントリを見つけるには:
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - グループのパスについて
json.pathに positive フィルタを追加します。この例では単にgitlab-bronzeです。 json.actionにreset_registration_tokenの positive フィルタを追加します。- 結果を観察します。何かあれば、結果の
json.usernameフィールドにリセットを引き起こしたユーザーのユーザー名が含まれます。
アクセストークンのアクティビティ
アクセストークン (Group、Project、Personal) が実行しているアクティビティの種類を判断できます。ログエントリを見つけるには:
- API または UI を使用して、関心のあるアクセストークンの
idを見つけます。 pubsub-rails-inf-gprd-*で、結果が含まれると思われる値に日付範囲を設定します。不明な場合はLast 7 daysに設定します。- ステップ 1 の
idについてjson.token_idに positive フィルタを追加します。 - 関心のある可能性がある他のフィルタを追加します:
json.usernamejson.pathjson.methodjson.token_type
削除されたグループ/サブグループ/プロジェクト
- 例のグループ: gitlab-silver
- 例のプロジェクト: gitlab-silver/test-project-to-delete
Kibana を使用して、誰が GitLab.com 上のグループ、サブグループ、またはプロジェクトの削除を実行したかを判断できます。ログエントリを見つけるには:
pubsub-rails-inf-gprd-*で、結果が含まれると思われる値に日付範囲を設定します。不明な場合はLast 7 daysに設定します。- プロジェクトのパス(該当する場合はグループとサブグループを含む)について
json.pathに positive フィルタを追加します。この例ではgitlab-silver/test-project-to-deleteです。 json.methodにDELETEの positive フィルタを追加します。- 結果を観察します。何かあれば、結果の
json.usernameフィールドに削除を引き起こしたユーザーのユーザー名が含まれます。 プロジェクトまたはグループが最初に保留中の削除になる際、ログエントリはjson.params.key: [_method, authenticity_token, namespace_id, id]を持ちます。これに対し、ユーザーが 削除を強制 する場合は、ログエントリはプロジェクトの場合json.params.key: [_method, authenticity_token, permanently_delete, namespace_id, id]のようになり、グループの場合はjson.params.key: [_method, authenticity_token, permanently_remove, id]のようになります。
(サブ)グループ削除の一環として削除されたプロジェクトのリストを見るには、sidekiq で:
json.messageを “was deleted” でフィルタリングします。- 2 つ目のフィルタとして
json.messageにpath/groupを設定します。
表示された CI/CD 変数
CI/CD 変数に対する 変更 は グループイベントの監査ログ には特に記録されませんが、Kibana を使って variables ページを表示した可能性のあるユーザーを確認する方法があります。問題の変数を変更するには、variables ページの表示が必要です。これは、対象ページを表示した人が必ずしも変数に変更を加えたことを示すものではありませんが、変更を加えた可能性のあるユーザーのリストを絞り込むのに役立つはずです。(これらの変更を記録してほしい場合、コメントを集めるための Issue が開かれています)。
json.pathをisに設定し、関連する対象プロジェクトの完全パスに続けて/-/variablesを入力します。例えばtanuki-rulesという名前のプロジェクトがあればtanuki-rules/-/variablesと入力します。- Kibana の日付を変更が行われたと思われる範囲に設定します。
- その時間枠内でそのページにアクセスした人を表示できるはずです。
json.meta.userはユーザーのユーザー名を表示し、json.timeはページにアクセスされたタイムスタンプを表示します。 json.graphql.operation_nameをisgetProjectVariablesで検索することもできます。- 一般的に、
json.actionフィールドがupdateを返しjson.controllerがProjects::VariablesControllerを返す結果は、変数が更新されたことを意味する可能性が高いです。
Let’s Encrypt 証明書の問題を見つける
場合によっては、1 つ以上の理由で Let’s Encrypt 証明書の発行が失敗することがあります。正確な理由を判断するために、Kibana でこれを調べることができます。
json.messageに “Failed to obtain Let’s Encrypt certificate” の positive フィルタを設定します。- 検索バーで、GitLab Pages のドメイン名を入力します。例:
json.pages_domain: "sll-error.shushlin.dev" json.acme_error.detailでフィルタするか見つけます。これは関連するエラーメッセージを表示します。この場合、エラー “No valid IP addresses found for sll-error.shushlin.dev” が見えます。
削除されたユーザー
検索時から過去 30 日以内に発生した場合、Kibana を使用して GitLab.com 上のアカウントが削除されたか、いつ削除されたかを確認できます。
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。
アカウントが自己削除された場合、これらのフィルタで検索を試みます:
- ユーザーのユーザー名を取得している場合は、
json.usernameに positive フィルタを追加します。 json.controllerにRegistrationsControllerの positive フィルタを追加します。
アカウントが管理者によって削除された場合、これらのフィルタで検索を試みます:
- ユーザーのユーザー名について
json.params.valueに positive フィルタを追加します。 json.methodにDELETEの positive フィルタを追加します。
結果を観察します。フィルタリングされたアカウントが指定された期間内に削除された場合、結果は 1 つだけのはずです。
未確認のアカウント を削除する cron ジョブによってアカウントが削除されたと疑う場合は、これらのフィルタで検索を試みます:
- インデックスを
pubsub-sidekiq-inf-gprd*に変更します。 - ユーザーのユーザー名について
json.meta.userに positive フィルタを追加します。(あるいは、ユーザーのユーザー ID を取得している場合はjson.args.keywordを使用できます)。 json.classにDeleteUserWorkerの positive フィルタを追加します。
二要素認証の無効化
Kibana を使用して、どの管理者が GitLab.com アカウントの 2FA を無効化したかを確認できます。ログエントリを表示するには:
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - 2FA を無効化された
usernameについてjson.locationに positive フィルタを追加します。 json.actionにdisable_two_factorの positive フィルタを追加します。- 読みやすくするため、
json.locationとjson.usernameフィールドのみを表示します。 - 結果を観察します。
SSO 強制の有効化/無効化
Kibana を使用して、GitLab.com 上のグループで SSO 強制が有効化または無効化されたか、いつ、どのユーザーによってかを確認できます。
- 例のグループ: gitlab-silver
SSO 強制の有効化
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 json.controllerにGroups::SamlProvidersControllerの positive フィルタを追加します。json.actionにupdateの positive フィルタを追加します。json.methodにPATCHの positive フィルタを追加します。- グループのパスについて
json.pathに positive フィルタを追加します。この例ではgitlab-silverです。 - 結果がある場合、
json.paramsフィールドを観察します。\"enforced_sso\"=>\"1\"が存在する場合、そのエントリはjson.usernameフィールドのユーザーが SSO 強制を有効化した時に記録されたものです。
SSO 強制の無効化
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 json.controllerにGroups::SamlProvidersControllerの positive フィルタを追加します。json.actionにupdateの positive フィルタを追加します。json.methodにPATCHの positive フィルタを追加します。- グループのパスについて
json.pathに positive フィルタを追加します。この例ではgitlab-silverです。 - 結果がある場合、
json.paramsフィールドを観察します。\"enforced_sso\"=>\"0\"が存在する場合、そのエントリはjson.usernameフィールドのユーザーが SSO 強制を無効化した時に記録されたものです。
SAML ログイン
SAML ログインの問題を調査するには:
pubsub-rails-inf-gprd-* ログで:
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - SAML グループのドキュメント で推奨されている positive フィルタを追加します。
SAML 応答をデコードし、選択したフィルタに対応する結果を観察すると、欠落または誤設定された属性があるかを確認できます。
SAML 応答
特定のユーザーの SAML 応答を取得するには:
- 例のグループ: gitlab-silver
- 例のユーザー:
[email protected]
pubsub-rails-inf-gprd-* ログで:
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - グループのパスについて
json.saml_response.audiencesに positive フィルタを追加します。この例ではgitlab-silverです。 json.payload_typeにsaml_responseの positive フィルタを追加します。- 取得する
saml_responseの対象ユーザーのメールアドレスについて、json.saml_response.attributes.emailに positive フィルタを追加します。この例では[email protected]です json.saml_response.attributesの値をレビューします
例: 1
"attributes": {
"email": [
"[email protected]"
],
"groups": [
"saml-group-1-developer",
"saml-group-2-maintainer"
]
},
例 2:
"attributes": {
"email": [
"[email protected]"
],
"firstname": [
"John"
],
"lastname": [
"Doe"
],
"name": [
"John Doe"
]
}
SCIM プロビジョニングとデプロビジョニング
SCIM の問題を調査するには:
pubsub-rails-inf-gprd-* ログで:
- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 json.pathに positive フィルタを追加します:- グループ全体の SCIM リクエストを見る場合は
/api/scim/v2/groups/<group name>。このパスはグループの SAML 設定にも見つかります。 - 特定のユーザーの SCIM リクエストを見る場合は
/api/scim/v2/groups/<group name>/Users/<user's SCIM identifier>。
- グループ全体の SCIM リクエストを見る場合は
json.methhodにPOSTまたはPATCHの positive フィルタを追加します(それぞれ初回プロビジョニングまたは更新/デプロビジョニング)。- 特定のアクションをさらに識別するため
json.params.valueにフィルタを追加します:json.params.value=Addは初回プロビジョニング、またはアカウント詳細の変更を示しますjson.params.value=Replaceは SCIM デプロビジョニングを示します。ユーザーが IdP App/グループから削除された時に発生しますjson.params.value=<External ID>は識別された External ID に関連する SCIM アクティビティを示します。
SCIM プロビジョニングされたアカウントが削除された場合:
- 上記の手順に従い、
json.methodがPOSTのプロビジョニングレコードからcorrelation_idを取得します。 - Correlation Dashboard に行き、関連する
correlation_idを検索します。 - 結果の中から、
Correlation Dashboard - Webセクションのレコードを探し、json.subcomponentがelasticsearchのエントリを探します。そのエントリで、json.tracked_items_encoded内の[[numbers,"User <user_id> user_<user_id>"]]の形式のuser_idを見つけます。
ユーザーが未確認のメールにより削除されたかを調査するには、削除されたユーザー の手順に従ってください。
グループまたはサブグループからのユーザー削除の検索
保持期間内(30 日)に発生した場合、Kibana を使用して、ユーザーがグループまたはサブグループから削除されたか、いつ、誰によってかを判断できます。
pubsub-rails-inf-gprd-* で以下のデータポイントでログエントリを見つけるには:
ユーザー削除の確認 (DELETE)
json.meta.caller_idにGroups::GroupMembersController#destroyの positive フィルタを追加します- UI でユーザー削除アクションを実行した人物のユーザー ID について
json.meta.user_idに positive フィルタを追加します json.methodにDELETEの positive フィルタを追加します
ユーザー削除リクエストに関するさらなる詳細の取得
以下のフィルタは、削除されたユーザーと、対象ユーザーがどのグループまたはサブグループから削除されたかを識別するのに役立ちます
json.custom_messageにMembership destroyedの positive フィルタを追加しますjson.meta.caller_idにGroups::GroupMembersController#destroyの positive フィルタを追加します- ユーザー削除アクションを実行したユーザーのユーザー ID
json.meta.user_idまたはユーザー名json.meta.userでフィルタを追加します - ターゲットユーザー ID
json.details.target_idでフィルタを追加します
削除されたコンテナレジストリタグの検索
削除が過去 30 日以内に発生した場合、Kibana を使用して、コンテナレジストリタグが削除されたか、いつ、誰がトリガーしたかを判断できます。
pubsub-rails-inf-gprd-* でログエントリを見つけるには:
- 対象のコンテナレジストリのリンクを取得します。(例: https://gitlab.example.com/group/project/container_registry/
) - 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 json.graphql.variablesに*ContainerRepository/<regitsry id>.*の positive フィルタを追加します。json.graphql.operation_nameにdestroyContainerRepositoryTagsの positive フィルタを追加します。
500 レベルエラーの Kibana 検索
14.7 以降、Correlation ID が提供されます。インターフェース使用時の 500 エラーページに表示されます。お客様にこれを提供してもらい、Kibana で json.correlation_id でフィルタリングできます。
通常、Kibana は 5XX エラーの特定には使用されませんが、Sentry で簡単に見つけられず、最初に Kibana を検索することが有益な場合があります。Kibana で一般的な検索を実行するには:
- エラー発生時にユーザーが訪問していた完全な URL を取得します。
- Kibana にログイン します。
- 適切な時間フィルタ(右上)を選択します - 例: 過去 30 分、24 時間、または 7 日間。
- 検索フィールドに、
json.path : "the_path_after_gitlab.com_from_the_URL"と入力します。 - サイドバーから関連するフィールドを選択します。
500エラーの場合、json.statusでフィルタしisを選び、500を入力します。 - サイドバーのリストから関連するフィールドを使用し続けて検索を絞り込みます。
GitLab.com でのエラー検索と検出について詳しくは、500 エラーのワークフロー を参照してください。
IP 範囲によるフィルタ
お客様は時々、Kubernetes クラスタやその他 GitLab にアクセスする必要のある外部サーバーといった、お客様のリソースの IP 範囲を提供することがあります。Elasticsearch Query DSL を使用して範囲を検索できます。
+ Add Filter>Edit as Query DSLをクリックします- クエリを作成するには以下の形式を使用します:
{
"query": {
"term": {
"json.remote_ip": {
"value": "192.168.0.1/20"
}
}
}
}
- Save をクリックしてクエリを実行します。
範囲によっては、この操作はコストがかかる可能性があるため、まず日付範囲を絞り込むことをお勧めします。
インポートエラー
ほとんどのタイムアウト関連のインポートは、Issue やマージリクエストがほとんどまたはまったくない部分的なインポートになります。比較的小さな差(10% 以下)がある場合、それらの特定の Issue やマージリクエストにエラーがある可能性が最も高いです。
エラーがあるたびに、エクスポートが 互換性のある GitLab のバージョン から発生したことを確認します。
Kibana でインポートエラーを検索するためのいくつかのヒントを以下に示します:
- pubsub-sidekiq-inf-gprd インデックスパターン (Sidekiq ログ) を使用し、フィルタを追加して絞り込みます
- json.meta.project:
path/to/project - json.severity: (
INFOではない) - json.job_status: (
doneではない) - json.class が
RepositoryImportWorker
- json.meta.project:
- pubsub-rails-inf-gprd インデックスパターン (Rails ログ) を使用し、フィルタを追加して絞り込みます
- json.controller: エラーステータスの
Projects::ImportsController - json.path:
path/to/project
- json.controller: エラーステータスの
- Sentry で、
Projects::ImportService::Errorを検索/探します。is:unresolvedフィルタを必ず削除してください。
エラーがある場合は、既存の Issue を検索します。メタデータがエラーをスローしており Issue が存在しないエラーについては、Sentry から Issue を作成することを検討してください。
エラーが見つからずインポートが部分的である場合、おそらくタイムアウトの問題です。
エクスポートエラー
エクスポートエラーは、ユーザーが UI または この API エンドポイント 経由でエクスポートを試みる時に発生する可能性があります。API のパラメータにより、事前署名された AWS S3 URL のような外部 URL へのエクスポートが可能です。通常、エクスポートプロセスは以下で構成されます:
- エクスポートが開始されたことを確認する初期
202応答をクライアントに返す - プロジェクトサイズに応じて、エクスポートの処理に数秒から数分かかる
- 指定されたアップロード URL へのアップロードを開始
Kibana でエクスポートログを検索するためのいくつかの提案を以下に示します:
pubsub-sidekiq-inf-gprd(Sidekiq) で、フィルタを追加して検索を絞り込みます:- json.class:
Projects::ImportExport - json.meta.project
path/to/project
- json.class:
Projects::ImportExport クラスは以下のサブコンポーネントを含みます:
Projects::ImportExport::RelationExportWorkerProjects::ImportExport::CreateRelationExportsWorkerProjects::ImportExport::ParallelProjectExportWorkerProjects::ImportExport::WaitRelationExportsWorkerProjects::ImportExport::AfterImportMergeRequestsWorker
Correlation Dashboard を使用すると、エクスポートプロセス全体を通じて Sidekiq イベントを追跡し、json.severity: ERROR でフィルタリングしてエラーを特定できるはずです。以下に AWS S3 へのアップロードが失敗する例を示します:
"severity": "ERROR",
"meta.caller_id": "ProjectExportWorker",
"subcomponent": "exporter",
...
"message": "Invalid response code while uploading file. Code: 400",
"response_body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>EntityTooLarge</Code><Message>Your proposed upload exceeds the maximum allowed size</Message><ProposedSize>6353524398</ProposedSize><MaxSizeAllowed>5368709120</MaxSizeAllowed><RequestId><omitted></RequestId><HostId><omitted></HostId></Error>",
XML 応答は、プロジェクトが最大許容サイズを超過しているなど、失敗の理由の指標を提供できます:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>EntityTooLarge</Code>
<Message>Your proposed upload exceeds the maximum allowed size</Message>
<ProposedSize>6353524398</ProposedSize>
<MaxSizeAllowed>5368709120</MaxSizeAllowed>
<RequestId>
<omitted>
</RequestId>
<HostId>
<omitted>
</HostId>
</Error>
Container Cleanup Worker のログを見つける
コンテナレジストリのクリーンアップログは、レジストリクリーンアップのステータスを確認するのに使用できます。これらのログには通常とは異なるスキームがあり、ほとんどの json.meta タグを使用しません。
Kibana でこれらのログを見つけるには:
pubsub-sidekiq-inf-gprd*インデックスを使用します。json.meta.feature_category: container_registryの positive フィルタを追加します。- 数値プロジェクト ID について
json.extra.container_expiration_policies_cleanup_container_repository_worker.project_idに positive フィルタを追加します。 - 数値コンテナリポジトリ ID について
json.extra.container_expiration_policies_cleanup_container_repository_worker.container_repository_idに positive フィルタを追加します。
json.extra.container_expiration_policies_cleanup_container_repository_worker 配下のその他のフィールドには、レジストリクリーンアップ操作に関する関連統計が含まれます。
既知のインポート Issue
- インポートしたプロジェクトのサイズが、その元と異なる
- その理由については このコメント を参照してください。アーティファクトはリポジトリサイズの一部であるため、それらが存在するかどうかは大きな違いを生む可能性があります。
- リポジトリのコミットが 0。
- 15348 を参照してください。
購入エラー
Kibana を使用して、購入試行に関連する特定のエラーを検索できます。購入は GitLab.com または CustomersDot のいずれかで行えるため、お客様がどのシステムを使用して購入していたかを判断することが重要です。その後、システム固有の以下のヒントを使用してください。Note: チケットの送信者が購入したお客様ではない場合があります。
GitLab.com 購入エラー
Note: 購入に使用されたアカウントの GitLab ユーザー名 が必要です。場合によってはユーザーがチケットフィールドの GitLab username 値を埋めているか、GitLab Super App の User Lookup でチケット依頼者の GitLab ユーザー名を確認できます。
- Kibana に移動します
pubsub-rails-inf-gprd-*インデックスパターン (GitLab.com ログ) が選択されていることを確認します。- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - 購入に使用されたアカウントのユーザー名について
json.user.usernameに positive フィルタを追加します。 json.tags.feature_categoryにpurchaseの positive フィルタを追加します。
面倒? https://log.gprd.gitlab.net/goto/6aac4580-9d9b-11ed-85ed-e7557b0a598c に行き、json.user.username の値を更新してください。
汎用的なエラーメッセージに遭遇した場合、より具体的なエラーのために Kibana または GCP で CustomersDot 購入エラーログを確認してみてください。
Tip: ユーザーの購入試行の詳細を見るには、https://log.gprd.gitlab.net/goto/45bb89c0-6ccc-11ed-9f43-e3784d7fe3ca に行き、json.username の値を更新してください。
CustomersDot 購入エラー
Note: 購入に使用されたアカウントの CustomersDot 顧客 ID が必要です。顧客 ID の取得方法については、このセクション の Step 1 を参照してください。
- Kibana に移動します
pubsub-rails-inf-prdsub-*インデックスパターン (CustomersDot ログ) が選択されていることを確認します。- 結果が含まれると思われる値に日付範囲を設定します。不明な場合は
Last 7 daysに設定します。 - 購入に使用されたアカウントのユーザー名について
json.customer_idに positive フィルタを追加します。 json.severityにERRORの positive フィルタを追加します。
面倒? https://log.gprd.gitlab.net/goto/9c28ba80-9d9b-11ed-9f43-e3784d7fe3ca に行き、json.customer_id の値を更新してください。
Namespace の詳細がある場合、Namespace ID を取得し、https://log.gprd.gitlab.net/goto/b598dfe0-9d9b-11ed-9f43-e3784d7fe3ca に行き、json.params.gl_namespace_id の値を更新してください。
リポジトリでのユーザーアクションの確認
pubsub-rails-inf-gprd-* インデックスを見ると、ユーザーが最近リポジトリをクローン/プッシュ (HTTPS で)、またはダウンロードしたかを判断できます。json.username、json.path (リポジトリ)、および json.action でフィルタリングして特定のイベントを見つけることができます:
action: git_upload_packは誰かがリポジトリのクローンを実行した時です。action: git_receive_packは誰かがリポジトリにプッシュした時です。action: archiveは誰かが UI のDownload source codeボタン経由でリポジトリをダウンロードした時です。
SSH 経由の git アクティビティを検索するには、代わりに pubsub-shell-inf-gprd-* インデックスで特定のイベントを探すことができます (アンダースコアの代わりにマイナス記号に注意):
command: git-upload-packは誰かが SSH 経由でクローンを実行した時です。command: git-receive-packは誰かが SSH 経由でプッシュを実行した時です。
上記リストのリンクを使用して、関心のあるプロジェクトの json.path または json.gl_project_path を埋めることができます。
Webhook 関連のイベント
GitLab.com の Webhook イベント は Kibana で見つけることができます。グループまたはプロジェクトが 強制レート制限 を超えた場合の特定も含みます。レート制限はサブスクリプションプランと 加えて サブスクリプション内のシート数に応じて変わります。
いくつかの提案を示します:
pubsub-sidekiq-inf-gprd(Sidekiq) をjson.class: "WebHookWorker"およびjson.meta.project : "path/to/project"フィルタとともに使用して webhook イベントを特定します。pubsub-rails-inf-gprd-*(Rails) をjson.message : "Webhook rate limit exceeded"およびjson.meta.project : "path/to/project"フィルタとともに使用して、レート制限により送信に失敗した webhook を特定します。json.meta.related_class : "GroupHook"またはjson.meta.related_class : "ProjectHook"を使用して、グループフックとプロジェクトフックの間でフィルタリングできます。
Service Desk メールの検索
Kibana で json.to_address を検索する際、これがメールの to: 行に表示されるアドレスであることを確認してください。たとえこれが GitLab プロジェクトのメールアドレスにエイリアスされていても同様です。プロジェクトのメールアドレスを検索し、Service Desk メールがそのエイリアス(例えば [email protected])に送信された場合、検索には表示されません。
ID 検証 SMS ログの検索
ID 検証 SMS ログを検索する際は、pubsub-rails-inf-gprd-* インデックスを使用し、以下のフィルタを適用します:
json.message: "IdentityVerification::Phone"json.username: <username>- 特定のユーザー/お客様のログを確認する場合
この本人確認 SMS 用の保存された検索 も使用できます。便利なフィールドが事前選択され、上記のフィルタが適用されています。
注目すべき主要な JSON フィールドは以下のとおりです:
json.telesign_responsejson.telesign_status_code- Telesign でさらに確認する必要がある場合は
json.telesign_reference_id json.reason
GitLab がメッセージを配信した良いケースでは、ステータスコード 200 で Delivered to handset のような telesign_response が見られると予想されます。Delivered to handset が見えるのにユーザー/お客様がまだコードを受信していない場合、お客様のデバイス/キャリア/メッセージングアプリが問題を引き起こしている可能性があります。
c955a93f)