Mackerelでnginxのステータスコードをグラフ表示する
GW明けから5月病に苦しんでいるブログ主です。Rails疲れしたので、最近社内で話題のMackerelをちょっと試してみたいと思います。すでに事例があるので、それをなぞる形ですね。
やりたいこと
作業一覧
Mackererlの個人アカウントを作成する
- githubのアカウントで簡単に登録できます。5ホストまでは無料なので、個人で使う分には問題なさそうです。最初はトライアル期間なのでほとんどの機能が使えます。mackerel-agentで利用するAPIキーがダッシュボードにあるので、それをメモしておきます。
terraformでEC2インスタンスを起動する
とりあえずEC2インスタンスが1ホスト起動していて、外からSSHできるような環境を作っておきます。
krossblack777/terraform-test · GitHub
EC2インスタンスに各製品をインストールする
mackerel-agent のインストール
$ curl -fsSL https://mackerel.io/assets/files/scripts/setup-yum.sh | sh $ sudo yum install -y mackerel-agent $ sudo vi /etc/mackerel-agent/mackerel-agent.conf # apikeyを設定
初期のAPIキーはデフォルトが一緒みたいなので、マニュアル通りやっていけばそのままホストの登録までできそうです。気になる人はAPIキーを発行しなおしといた方がいいかもしれません。その後はインストールガイドに従い、ダッシュボードに対象ホストが登録されている状態にします。
nginxをインストールする
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm $ sudo yum -y install nginx
ログの形式はltsvにしたいので、下記の用に設定ファイルを変更します。
log_format ltsv "time:$time_local" "\thost:$remote_addr" "\tforwardedfor:$http_x_forwarded_for" "\treq:$request" "\tstatus:$status" "\tsize:$body_bytes_sent" "\treferer:$http_referer" "\tua:$http_user_agent" "\treqtime:$request_time" "\tvhost:$host"; access_log /var/log/nginx/access.log ltsv;
fluentdをインストールする
$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh $ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-mackerel $ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-datacounter
td-agentをインストールした後に、pluginをインストールする必要があります。
設定ファイルは下記のような感じです。
<source> type tail format ltsv time_format %d/%b/%Y:%H:%M:%S %z path /var/log/nginx/access.log pos_file /var/log/td-agent/nginx.log.pos tag raw.nginx </source> <match raw.nginx> type datacounter count_interval 1m count_key status aggregate all tag nginx.status outcast_unmatched yes # patternX: X(1-20) pattern1 2xx ^2\d\d$ pattern2 3xx ^3\d\d$ pattern3 4xx ^4\d\d$ pattern4 5xx ^5\d\d$ </match> <match nginx.status> type mackerel api_key XXX hostid_path /var/lib/mackerel-agent/id metrics_name http_status.${out_key} out_keys nginx_2xx_count,nginx_3xx_count,nginx_4xx_count,nginx_5xx_count </match>
最終的に
これでうまくいくと思ったのですが、グラフが一向に更新されず。。。読み込み中のまま止まってしまうんですよね。データがなければデータがないと表示されると思うのですが。あと、やってる最中に気づいたんですが、Mackerelのドキュメントにfluentd使う方法が載っていました。先に気づいていれば…
追記
match部分をhostidではなくてserviceに変更した所、サイドバーのServiceの項目からカスタムメトリックが見れるようになりました。ここで出力先を制御しているみたいですね。仕様ちゃんと読めよというところですけどw
<match nginx.status> type mackerel api_key XXX service test remove_prefix metrics_name access_name.${out_key} out_keys 2xx_count,3xx_count,4xx_count,5xx_count </match>
実際の画像はこんな感じになりました。200と404しか出力させてないので、偏ってますがグラフ化できてよかったです。