レート制限でインスタンスの安定性を改善する
自動化された連携やスクリプトが Confluence に大量のリクエストを送信すると、Confluence の安定性に影響を与え、パフォーマンスの低下やダウンタイムにつながる恐れがあります。レート制限を使用すると、ユーザーや自動化機能が送信可能な外部 REST API リクエストの数と頻度を制御し、Confluence インスタンスが安定した状態を保つようにできます。
レート制限は Confluence Data Center で使用可能です。
On this page:
レート制限の仕組み
Confluence でのレート制限の仕組みの詳細についてご説明します。
レート制限を有効化する方法
レート制限をオンにするには、システム管理者グローバル権限が必要です。
レート制限を有効化するには、次の手順を実行します。
- Confluence で、[管理] > [一般設定] > [レート制限] に移動します。
- ステータスを [有効] に変更します。
- 次のオプションのうち 1 つを選択します: 無制限のリクエストを許可、すべてのリクエストをブロック、またはリクエストを制限。最初のオプションと 2 番目のオプションは許可リストとブロックリストに関連します。最後のオプションの場合、実際の制限を入力する必要はありません。詳細については以下をお読みください。
- 変更を [保存] します。
許可リストまたはブロックリストを選択している場合は特に、追加リクエストを本当に必要とするユーザーに例外を追加するようにします。「例外の追加」を参照してください。
リクエストの制限 - 詳細
許可リストやブロックリストと同様に、グローバル設定または例外ではリクエストの制限オプションを頻繁に使用することがあります。
このオプションと仕組みについて詳しく見てみましょう。
- 許可されているリクエスト数: 各ユーザーは、選択した期間に特定の件数のリクエストを許可されています。1 秒あたり 10 件のリクエスト、1 時間あたり 100 件のリクエストなどの任意のの設定を選択できます。
- 最大リクエスト数 (詳細): リクエストが頻繁に送信されない場合は、許可されているリクエスト数をユーザーあたりの最大数まで貯めることができます。このオプションを使用すると、ユーザーは通常と異なる頻度 (レートで指定された 1 分あたり 10 件の代わりに 2 分あたり 20 件など) でリクエストを作成するか、時間をかけて多くのリクエストを蓄積し、必要に応じて一度に送信できます。最大値の設定が難しい場合、[許可されているリクエスト数] と同じ値に設定することで問題ありません。
例
適切な制限を見つける
例外の追加
同様に例外は、他のユーザーよりも多くのリクエストを実際に必要とするユーザーのための特別な制限です。選択した例外は、グローバル設定よりも優先されます。
例外を追加または編集した後、変更はすぐに反映されますが、新しい設定がユーザーに適用されるには最大で 1 分かかります。
例外を追加するには、次の手順を実行します。
- [例外] タブに移動します。
- [例外の追加] をクリックします。
- ユーザーを見つけ、そのユーザーのための新しい設定を選択します。グループを選択することはできませんが、複数のユーザーを選択できます。
- ここで利用可能なオプションはグローバルな設定の場合と同じです: "無制限のリクエストを許可"、"すべてのリクエストをブロック "、"カスタム制限を割り当て"。
- 変更を [保存] します。
後から例外を編集したい場合は、[例外] タブでユーザー名の横にある [編集] をクリックします。
推奨: 匿名アクセスへの例外を追加
Confluence では、すべての匿名トラフィックが "Anonymous" という 1 人のユーザーによるものであるとみなします。サイトが公開されており、レート制限が高すぎない場合、1 人のユーザーが匿名ユーザーに割り当てられた制限を使い果たす可能性があります。このアカウントに高い制限値を割り当てた例外を追加し、さらなる追加が必要かどうかを確認することをおすすめします。
レート制限されているユーザーの特定
ユーザーがレート制限を受けている場合、HTTP 429 エラー メッセージ (too many requests) が表示されるため、ユーザーはすぐにそのことを確認できます。管理者はレート制限設定ページの [制限を受けているアカウントの一覧] を開いて、レート制限を受けているユーザーを特定できます。一覧には、クラスタ全体のすべてのユーザーが表示されます。
ユーザーがレート制限を受けている場合、表に表示されるには最大で 5 分かかります。
異常なアカウント
ユーザーは一覧にユーザー名で表示されます。ただし一覧には、いくつかの異常なアカウントが表示される場合があります。以下に例を示します。
- Unknown: Confluence で削除されたユーザーです。これらのユーザーは 24 時間を経過すると一覧には表示されませんが (ユーザーをレート制限することはできなくなっているため)、例外の一覧には表示される場合があります。これらのユーザーにはレート制限は不要なため、設定を削除してかまいません。
- Anonymous: このエントリは、認証されていないアカウントから行われたすべてのリクエストを収集します。1 人のユーザーで匿名アクセスの制限までのリクエスト数を簡単に使用できてしまうことがあるため、匿名トラフィックに例外を追加して、高い制限値を追加することをおすすめします。
Confluence のログ ファイルで制限付きのリクエストを表示する
Confluence のログ ファイルでレート制限されているユーザーやリクエスト数の情報を表示することもできます。これは、リクエストの宛先 URL やリクエスト元の URL の詳細を知りたい場合に便利です。
リクエストがレート制限されている場合、ログ エントリは次のようになります。
2019-12-24 10:18:23,265 WARN [http-nio-8090-exec-7] [ratelimiting.internal.filter.RateLimitFilter] lambda$userHasBeenRateLimited$0 User [2c9d88986ee7cdaa016ee7d40bd20002] has been rate limited
-- url: /rest/api/space/DS/content | traceId: 30c0edcb94620c83 | userName: exampleuser
レート制限とは - ユーザーの観点から
ユーザーが認証済みのリクエストを作成すると、レスポンスにレート制限のヘッダーが表示されます。これらのヘッダーはレート制限されているときだけでなく、すべてのレスポンスに追加されます。
ヘッダー | 説明 |
---|---|
X-RateLimit-Limit | 保有できるリクエスト (トークン) の最大数。この制限に到達した後は、新しいトークンがバケットに追加されません。管理者はこれを最大リクエスト数として設定します。 |
X-RateLimit-Remaining | トークンの残りの数。この値はリクエストの実行時には非常に正確ですが、常に正確であるとは限りません。 |
X-RateLimit-Interval-Seconds | 時間間隔 (秒単位)。この間隔ごとに新しいトークンのバッチを取得できます。 |
X-RateLimit-FillRate | 時間間隔ごとに取得するトークンの数。管理者は、これを許可されるリクエスト数として設定します。 |
retry-after | 新しいトークンを取得するまでに待機する必要がある時間。まだトークンが残っている場合は 0 を示し、すぐに追加でリクエストを実行できることを意味します。 |
ユーザーがレート制限を受けていてリクエストが処理されない場合、HTTP 429 エラー メッセージ (too many requests) が返されます。ユーザーはこのヘッダーを使用して、スクリプトや自動化を制限に合わせて調整し、妥当な頻度でリクエストを送信できます。
その他のタスク
URL とリソースを許可リストに追加する
システム プロパティを使用して Confluence インスタンスで URL 全体およびリソースを許可リストに登録する方法を追加しました。これを使用することで、レート制限されているが、制限されるべきではないものを、素早く修正できます。
特定の URL をレート制限から除外することを許可するには、次の手順を実行します。
- Confluence を停止します。
com.atlassian.ratelimiting.whitelisted-url-patterns
システム プロパティを追加し、値を URL のカンマ区切りリストに設定します。例:-Dcom.atlassian.ratelimiting.whitelisted-url-patterns=/**/rest/applinks/**,/**/rest/capabilities,/**/rest/someapi
システム プロパティの追加方法は、Confluence の実行方法によって異なります。詳細については、「システム プロパティを設定する」を参照してください。- Confluence を再起動します。
URL パターンの作成方法の詳細については「AntPathMatcher: URL patterns」を参照してください。
外部アプリケーションを許可リストに追加する
コンシューマー キーを許可リストに追加して、アプリケーション リンクを通じて連携された外部アプリケーションのレート制限を削除できます。
Confluence を他のアトラシアン製品と連携する場合、それらのトラフィックは制限されないため、許可リストに追加する必要はありません。
アプリケーションのコンシューマー キーを見つけます。
[管理] > [一般設定] > [アプリケーション リンク] に移動します。
アプリケーションを見つけて [編集] をクリックします。
[受信認証] からコンシューマー キーをコピーします。
コンシューマー キーを許可リストに追加します。
Confluence を停止します。
com.atlassian.ratelimiting.whitelisted-oauth-consumers
システム プロパティを追加し、値をコンシューマー キーのカンマ区切りリストに設定します。例:-Dcom.atlassian.ratelimiting.whitelisted-oauth-consumers=app-connector-for-confluence-server
システム プロパティの追加方法は、Confluence の実行方法によって異なります。詳細については、「システム プロパティを設定する」を参照してください。
Confluence を再起動します。
コンシューマー キーを入力すると、関連するアプリケーションからのトラフィックは制限されなくなります。
レート制限用にコードを調整する
コード (スクリプト、連携、アプリ) に適用してレート制限で使用できる、一連の戦略を作成しました。
詳細は、「レート制限用にコードを調整する」を参照してください。