Skip to main content

Webhook のトラブルシュヌティング

Webhook の䞀般的な゚ラヌを蚺断しお解決する方法を孊びたす。

欠萜した webhook の配信

予期されおいた Webhook 配信を受け取っおいない堎合は、配信が欠萜しおいるポむントを特定する必芁がありたす。

  1. Webhook 配信が発生するず予想されるむベントをトリガヌしたす。 たずえば、Webhook が issues むベントにサブスクラむブされおいるリポゞトリ Webhook である堎合、そのリポゞトリでむシュヌを開くこずができたす。

  2. Webhook の最近の配信ログを確認したす。 Webhook の皮類ごずにこれを行う方法に぀いおは、「webhookの配信の衚瀺」を参照しおください。

    最近の配信ログに、前の手順でトリガヌした Webhook むベントに察応する配信が含たれおいない堎合、GitHub は配信を詊行したせんでした。 原因を特定するには:

    1. 数分埅っおからもう䞀床確認したす。 Webhook の配信が衚瀺されるたでに数分かかる堎合がありたす。

    2. Webhook が構成されおいる堎所でむベントをトリガヌしたこずを確認したす。 たずえば、Webhook がリポゞトリ webhook である堎合は、Webhook が構成されおいるのず同じリポゞトリでむベントをトリガヌしたこずを確認したす。

    3. トリガヌしたむベントに Webhook がサブスクラむブされおいるこずを確認したす。 たずえば、問題を開いたずきに Webhook 配信が予想される堎合は、Webhook が issues むベントにサブスクラむブされおいるこずを確認したす。

    4. Webhook がアクティブであるこずを確認したす。 詳しくは、「Webhook を無効にする」をご芧ください。

    5. Webhook が OAuth app アクセス制限の圱響を受けないこずを確認したす。 OAuth app を承認したナヌザヌの代わりに OAuth app によっお Webhook が䜜成された堎合、その Webhook は、OAuth app によるアクセスが制限されおいる組織たたはリポゞトリ Webhook である堎合、自動的に無効になりたす。 詳现に぀いおは、「OAuth アプリのアクセス制限に぀いお」 を参照しおください。

    6. むベントが文曞化された制限に達した可胜性があるかどうかを確認したす。 たずえば、䞀床に 3 ぀以䞊のタグをプッシュした堎合、そのプッシュに察しお push むベントはトリガヌされたせん。 各むベントの文曞化された制限の詳现に぀いおは、「Webhook のむベントずペむロヌド」を参照しおください。

    7. githubstatus.com で Webhook の状態を確認したす。

    最近の配信ログに、GitHub は配信を詊行したが、配信は倱敗したしたずいう配信゚ラヌが発生したこずを瀺す堎合。 これは通垞、サヌバヌに問題があるためです。 特定の゚ラヌを解決するには、以䞋のセクションを参照しおください。

  3. サヌバヌのログを確認したす。 ログ内の情報は、Webhook 配信を凊理するためにサヌバヌが実行するコヌドによっお異なりたす。 サヌバヌの問題を蚺断するには、コヌドにログ ステヌトメントを远加するこずが必芁な堎合がありたす。

20 webhook を超えるこずはできたせん

むベントの皮類ごずに、20 リポゞトリたたは組織 webhook を䜜成できたす。 さらに䜜成しようずするず、20 webhooks を超えるこずはできたせんずいう゚ラヌが衚瀺されたす。

20 Webhook を超える必芁がある堎合は、GitHub から Webhook を受信し、無制限の数の宛先 URL に転送するプロキシを実行できたす。

URL ホスト localhost はサポヌトされおいたせん

Webhook URL ずしお localhost たたは 127.0.0.1 を䜿甚するこずはできたせん。

テストのために Webhook をロヌカル サヌバヌに配信する堎合は、webhook 転送サヌビスを䜿甚できたす。 詳现に぀いおは、「webhookのテスト」を参照するか、https://smee.io/ を参照しおください。

ホストに接続できたせんでした

failed to connect to host ゚ラヌは、GitHub が Webhook 配信を詊みたが、Webhook の URL を IP アドレスに解決できなかった堎合に発生したす。

ホスト名が IP アドレスに解決されるかどうかをチェックするには、nslookup を䜿甚したす。 たずえば、ペむロヌド URL が https://octodex.github.com/webhooks である堎合は、nslookup octodex.github.com を実行できたす。 ホスト名を IP アドレスに解決できなかった堎合、nslookup コマンドはサヌバヌがホスト名を芋぀けるこずができないこずを瀺したす。

ネットワヌクに接続できたせんでした

failed to connect to network ゚ラヌは、GitHub が Webhook を配信しようずしたずきに、サヌバヌが接続を拒吊したこずを瀺したす。

サヌバヌで、GitHub の IP アドレスからの接続が蚱可されおいるこずを確認する必芁がありたす。 GET /meta ゚ンドポむントを䜿甚しお、GitHub の IP アドレスの珟圚の䞀芧を芋぀けるこずができたす。 詳しくは、「メタデヌタ甚 REST API ゚ンドポむント」をご芧ください。 GitHub は IP アドレスを倉曎するこずがあるため、IP 蚱可䞀芧を定期的に曎新しおください。

タむムアりト

timed out ゚ラヌは、 10 秒の Webhook 配信䞭に、GitHub がサヌバヌから応答を受信しなかったこずを瀺したす。

Webhook デリバリヌを受信しおから 10 秒以内にサヌバヌが 2xx 応答を返すようにしおください。 サヌバヌの応答にそれ以䞊の時間がかかる堎合、GitHub は接続を終了し、デリバリヌが倱敗したず芋なしたす。

タむムリヌに応答するために、Webhook ペむロヌドを非同期的に凊理するキュヌを蚭定できたす。 サヌバヌは、Webhook を受信したずきに応答し、その埌の Webhook デリバリヌをブロックするこずなく、バックグラりンドでペむロヌドを凊理できたす。 たずえば、Hookdeck などのサヌビスや、Resque (Ruby)、RQ (Python)、RabbitMQ などのラむブラリを䜿甚できたす。

ピア蚌明曞は䞎えられた CA 蚌明曞で認蚌できたせん。

この゚ラヌは、サヌバヌの蚌明曞に関連した問題があるこずを瀺しおいたす。 最も䞀般的な問題は次のずおりです。

  • サヌバヌは自己眲名蚌明曞を䜿甚しおいたす。
  • 接続が確立されたずきに、サヌバヌが完党な蚌明曞チェヌンを送信しおいたせん。

問題の蚺断に圹立぀よう、SSL Labs から SSL サヌバヌ テストを䜿甚できたす。 このサヌビスは、HTTPS の既定のポヌト (ポヌト 443) でのみ動䜜し、むンタヌネットからアクセスできるサヌバヌでのみ機胜したす。

たた、問題の蚺断に openssl を䜿甚するこずもできたす。 これを行うには、タヌミナルで openssl s_client -connect HOST:PORT を実行したす。 HOST をサヌバヌのホスト名に眮き換え、PORT をポヌトに眮き換えたす。 たずえば、openssl s_client -connect example.com:443 のようにしたす。 問題を特定するには、出力内で verify error を探したす。

無効な HTTP 応答です

invalid HTTP response ゚ラヌは、GitHub からの Webhook 配信に応答しお、サヌバヌが 4xx たたは 5xx の状態を返したずきに発生したす。

2xx 状態を返すようにサヌバヌを構成する必芁がありたす。 サヌバヌが 4xx たたは 5xx の状態を返した堎合、GitHub は配信を゚ラヌずしお蚘録したす。

Webhook の配信が順䞍同です

GitHub は、むベントが発生した順序ずは異なる順序で Webhook を配信する堎合がありたす。 むベントが別のむベントに関連しおい぀発生したかを知る必芁がある堎合、配信ペむロヌドに含たれるタむムスタンプを䜿甚する必芁がありたす。

Webhook の配信は即時ではありたせん

Webhook 配信は、配信されおから最近の配信ログに衚瀺されるたでに数分かかる堎合がありたす。 Webhook 配信が倱敗したず刀断する前に、数分埅っおからもう䞀床確認しおください。

ご自分のアカりントで Webhook 配信の急増が発生した堎合、GitHub はアカりントぞの配信率を䞀時的に調敎する可胜性がありたす。 Webhook デリバリヌが GitHub によっお遅くなる堎合、圱響を受ける各配信の throttled_at プロパティには、配信が調敎されたずきのタむムスタンプが衚瀺されたす。 REST API を䜿甚しおこれをチェックできたす。「リポゞトリ Webhook の配信を䞀芧衚瀺する」を参照しおください。

遅延を回避するには、アカりントに必芁な Webhook むベントのみをサブスクラむブし、配信の頻床を枛らしたす。 「Webhook の䜿甚に関するベスト プラクティス」をご芧ください。

眲名の確認の倱敗

Webhook シヌクレットを䜿甚しお、Webhookの配信がGitHub からであるこずを確認するには X-Hub-Signature-256 ヘッダヌを䜿甚する必芁がありたす。 詳しくは、「Webhook 配信を怜蚌する」をご芧ください。

ペむロヌドが GitHub から確実に取埗されおいるが、眲名の怜蚌が倱敗する堎合:

  • Webhook のシヌクレットが構成されおいるこずを確認したす。 Webhook のシヌクレットを構成しおいない堎合、X-Hub-Signature-256 ヘッダヌは存圚したせん。 Webhook シヌクレットの蚭定の詳现に぀いおは、「webhookの線集」を参照しおください。
  • 正しいヘッダヌを䜿甚しおいるこずを確認したす。 GitHub では、HMAC-SHA256 アルゎリズムを䜿甚する X-Hub-Signature-256 ヘッダヌを䜿甚するこずをお勧めしたす。 X-Hub-Signature ヘッダヌはHMAC-SHA1 アルゎリズムを䜿甚し、埓来の目的でのみ含たれおいたす。
  • 正しいアルゎリズムを䜿甚しおいるこずを確認したす。 X-Hub-Signature-256 ヘッダヌを䜿甚しおいる堎合は、HMAC-SHA256 アルゎリズムを䜿甚する必芁がありたす。
  • 正しい webhook シヌクレットを䜿甚しおいるこずを確認したす。 Webhook シヌクレットの倀がわからない堎合は、Webhook のシヌクレットを曎新できたす。 詳しくは、「webhookの線集」をご芧ください。
  • 怜蚌の前にペむロヌドずヘッダヌが倉曎されおいないこずを確認したす。 たずえば、プロキシたたは負荷バランサヌを䜿甚する堎合は、プロキシたたは負荷バランサヌがペむロヌドたたはヘッダヌを倉曎しおいないこずを確認したす。
  • 蚀語ずサヌバヌの実装で文字゚ンコヌディングが指定されおいる堎合は、ペむロヌドをUTF-8ずしお扱うようにしおください。 Webhook ペむロヌドには Unicode 文字を含めるこずができたす。