tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

Grafanaのグラフ描画時に504 Gateway Timeoutが発生する場合がある

概要

  • zabbixサーバのwebサーバ用として利用しているNginxでGrafanaへreverse proxyしている。
    • client -> ALB -> Web server(zabbix用) -> (Nginxによるreverse proxy) -> grafana
  • グラフ描画する際のクエリdurationが大きい場合、Nginx側で504 timeoutしてしまう事象が発生。
  • fastcgi は利用していない。

f:id:hrt0kmt:20190226175402p:plain

Nginxのtimeout parameterについて

  • timeout
    • serverとの接続確立中、request送信中、response headerの読み取り中のtimeoutを定義する。
    • 今回はNginx自体ではなく、reverse proxy経由でのtimeoutの為関係無いと思われる。
  • proxy_connect_timeout
    • proxy serverとの接続確率時のtimeoutを定義する。
    • default 60sec
    • このタイムアウトは75secを超えることは出来ない。
    • 既にbackend serverと接続されている場合は、timeoutは発生しない。
    • 公式サイトによると、 proxy_connect_timeout 値は75秒を超えないようにする必要がある。
  • proxy_read_timeout
    • default 60sec
    • proxy serverからbackend serverへデータ受信する際のtimeoutを定義する。
    • このtimeoutは応答全体の送信遅延ではなく、2回の連続したread処理の間の遅れに対するtimeout。
  • proxy_send_timeout
    • default 60sec
    • proxy serverからbackend serverへデータ送信する際のtimeoutを定義する。
    • このtimeoutは応答全体の送信遅延ではなく、2回の連続したwrite処理の間の遅れに対するtimeout。

他、FastCGIを利用している場合は以下のtimeout値を確認する。

FastCGI

  • CGIを拡張したもので、web server上でuser programを動作させるinterfaceの1つ。
  • 通常のCGIはclientからのrequestごとにprocessを生成・破棄する為大量のrequestがあった場合、その分overheadが多く発生しパフォーマンスの低下が発生する。
  • FastCGIは初回request時に生成したprocessをmemory上に確保し続けることで、次回以降のrequestは当該memoryに保持したprocessの実行を行い多くのrequestも処理可能である。
  • Nginxのtimeout parameter値は次の通り。
    • fastcgi_send_timeout
    • fastcgi_read_timeout
    • fastcgi_connect_timeout

尚、Grafana自体にtimeoutのparameterは無い。