こんな感じで、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>
デバッグログ出すのはやっぱ辛さを感じる...
