読者です 読者をやめる 読者になる 読者になる

Nginx HTTP/2の受信フレーム集計

こんな感じで、Nginxの受信フレームをグラフ化する。
デバッグログからFluentdでMackerel APIを叩く感じ。


ビルド

NginxのHTTP/2パッチがTrunkに取り込まれたので、改めてビルド。

wget http://hg.nginx.org/nginx/archive/tip.tar.gz
tar zxvf ./tip.tar.gz
cd ./nginx #<reision number>

./auto/configure --with-http_ssl_module \
                 --with-http_v2_module \
                 --with-debug

nginx.conf

    error_log /usr/local/nginx/logs/error.log debug;
    server {
        listen  443 ssl http2 ;
        ssl_prefer_server_ciphers on;
        ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
        server_name localhost;
        ssl_certificate     server.crt;
        ssl_certificate_key server.key;
        location / {
          root /usr/share/www;
        }
    }

td-agent.conf

<source>
  type tail
  path /usr/local/nginx/logs/error.log
  pos_file /var/log/td-agent/nginx-debug.log.pos
  tag nginx
  format multi_format
  format /^(?<time>[^ ]* [^ ]*) \[(?<level>[^\]]*)\] [^:]*:.*process http2 frame type:(?<frame_type>[0-9]+) f:(?<flag>[0-9]+) l:(?<length>[0-9]+) sid:(?<sleam_id>[0-9]+)$/
</source>

<match nginx>
  type datacounter
  tag nginx.frame
  unit minute
  count_key frame_type

  pattern1  DATA          0
  pattern2  HEADERS       1
  pattern3  PRIORITY      2
  pattern4  RST_STREAM    3
  pattern5  SETTINGS      4
  pattern6  PUSH_PROMISE  5
  pattern7  GOAWAY        6
  pattern8  WINDOW_UPDATE 7
  pattern9  CONTINUATION  8
</match>

<match nginx.frame>
  type mackerel
  api_key your_key
  service your_service
  metrics_name frame.${out_key}
  out_keys nginx_unmatched_count,nginx_DATA_count,nginx_HEADERS_count,nginx_PRIORITY_count,nginx_SETTINGS_count,nginx_GOAWAY_count,nginx_CONTINUATION_count,nginx_UNKOWN_count
</match>


デバッグログ出すのはやっぱ辛さを感じる...