コンテンツにスキップ

パフォーマンスのトラブルシューティング

WallarmノードのCPU使用率が高すぎます

Wallarmの推奨CPU使用率は約10~15%です。これは、フィルタリングノードがトラフィックスパイクを最大10倍まで処理できることを意味します。WallarmノードのCPU使用量が想定より多く、CPU使用率を下げる必要がある場合は、本ガイドを参照してください。

最も処理時間が長いリクエスト(ひいては主なCPU消費要因)を把握するには、拡張ログを有効化して処理時間を監視します。

WallarmによるCPU負荷を下げるには、次の対処が可能です。

  • NGINXの設定にlimit_reqを追加します。また、ノード4.6以降ではWallarmのレート制限機能を使用します。総当たり攻撃などの場合、この方法がCPU負荷を下げる最良の手段となる可能性があります。

    設定例 - limit_reqの利用
    http {
      map $request_uri $binary_remote_addr_map {
        ~^/get $binary_remote_addr;
        ~^/post $binary_remote_addr;
        ~^/wp-login.php $binary_remote_addr;
      }
      limit_req_zone $binary_remote_addr_map zone=urls:10m rate=3r/s;
      limit_req_zone $binary_remote_addr$request_uri zone=allurl:10m rate=5r/s;
    
      limit_req_status 444;
    
      server {
        location {
          limit_req zone=urls nodelay;
          limit_req zone=allurl burst=30;
        }
      }
    }        
    
  • NGINXとwstoreに適切なメモリが割り当てられていることを確認します。

  • wallarm_acl_access_phaseディレクティブがonに設定されていることを確認します。これにより、いずれのフィルタリングモードでも、対象リクエスト内の攻撃兆候を探索せずに、Denylistに登録されたIPからのリクエストを即時にブロックします。あわせて、WallarmのIP listsを確認し、誤ってAllowlistに追加したIPや、誤ってDenylistに追加していないロケーションがないかを確認します。

    このCPU使用率低減方法により、検索エンジンからのリクエストをスキップしてしまう場合があります。ただし、NGINXの設定でmapモジュールを使用することで、この問題も解決できます。

    設定例 - 検索エンジン問題の解決にmapモジュールを使用
    http {
      wallarm_acl_access_phase on;
      map $http_user_agent $wallarm_mode{
          default monitoring;
          ~*(google|bing|yandex|msnbot) off;
      }
      server {
        server_name mos.ru;
        wallarm_mode $wallarm_mode;
      }
    }
    
  • libdetection(ノードバージョン4.4以降はデフォルトで有効)をwallarm_enable_libdetection offで無効化します。libdetectionを使用するとCPU消費が5~10%増加します。ただし、libdetectionを無効化すると、SQLi攻撃の検知における誤検知が増加する可能性がある点に留意してください。

  • 検知された攻撃の分析中に、リクエストの特定要素に対してWallarmがルール内またはNGINXの設定を通じて不適切なパーサーを使用していることが判明した場合、該当しない要素については当該パーサーを無効化します。ただし、一般的にパーサーの無効化は推奨しません。

  • リクエスト処理時間を短縮します。これを行うことで、正当なリクエストがサーバーに到達しなくなる可能性がある点に注意してください。

  • 潜在的なDDoSの標的を分析し、利用可能な保護対策のいずれかを適用します。