Chef で mackerel-agent と mackerel-agent-plugins をインストールした.特にハマる点は無く,サクッとインストールできたけど,プロビジョニングする前に公式クックブックを読んだりもした.簡単にまとめておこうと思う.
Berksfile
cookbook 'mackerel-agent', '~> 1.2'
現在 Supermarket に公開されている最新版は 1.2.0
で,Berksfile から普通に落としてくると 1.2.0
になる.もし Amazon Linux にインストールする場合は 1.2.1
が必要で,既に GitHub 上では Tag が打たれてるんだけど,Supermarket には公開されていなかった.なぜだろ?
Attributes
Role / Node に Attributes を書く.Mackerel を使うなら基本的に Plugins も使うと思うし,その前提で以下にサンプルを載せている.
{ "mackerel-agent": { "conf": { "apikey": "xxx", "roles": [ "kakakakakku:web" ], "plugin.metrics.fluentd": { "command": "/usr/bin/mackerel-plugin-fluentd" }, "plugin.metrics.nginx": { "command": "/usr/bin/mackerel-plugin-nginx -port 80" }, "plugin.metrics.php-apc": { "command": "/usr/bin/mackerel-plugin-php-apc" } } }, "run_list": [ "recipe[mackerel-agent]", "recipe[mackerel-agent::plugins]" ] }
プロビジョニングをすると conf
に定義した内容から自動的に /etc/mackerel-agent/mackerel-agent.conf
が生成される.実際には以下のようになる.TOML だ!!!
$ cat /etc/mackerel-agent/mackerel-agent.conf apikey = "xxx" roles = ["kakakakakku:web"] [plugin.metrics.fluentd] command = "/usr/bin/mackerel-plugin-fluentd" [plugin.metrics.nginx] command = "/usr/bin/mackerel-plugin-nginx -port 80" [plugin.metrics.php-apc] command = "/usr/bin/mackerel-plugin-php-apc"
Plugins
今回は以下の Plugins を試してみた.基本的には GitHub の README.md に Usage が書いてあって,メトリクス収集のために必要な準備をすることになる.
- mackerel-agent-plugins/mackerel-plugin-fluentd at master · mackerelio/mackerel-agent-plugins · GitHub
- mackerel-agent-plugins/mackerel-plugin-nginx at master · mackerelio/mackerel-agent-plugins · GitHub
- mackerel-agent-plugins/mackerel-plugin-php-apc at master · mackerelio/mackerel-agent-plugins · GitHub
mackerel-plugin-fluentd
fluentd.conf
に以下の定義を追加して Fluentd を再起動する.
<source> type monitor_agent bind 0.0.0.0 port 24220 </source>
デフォルトだと次の URL を叩くと JSON 形式でメトリクスが返ってくる.
$ curl http://localhost:24220/api/plugins.json
mackerel-plugin-nginx
デフォルトだと http://localhost:8080/nginx_status
からメトリクスを収集する設定になっている.今回試した環境だと 80 ポートを使いたくて -port
オプションを指定することにした.以下のようにバイナリを実行すると値を確認できるため,Mackerel の管理画面でカスタムメトリクスが表示されるのを待つのではなく,先にバイナリを実行して確認すると効率が良いなと感じた.
$ /usr/bin/mackerel-plugin-nginx 2016/06/17 11:46:57 OutputValues: Get http://localhost:8080/nginx_status: dial tcp 127.0.0.1:8080: getsockopt: connection refused $ /usr/bin/mackerel-plugin-nginx -port 80 nginx.connections.connections 5.000000 1466131666 nginx.requests.accepts 15.692308 1466131666 nginx.requests.handled 15.692308 1466131666 nginx.requests.requests 16.923077 1466131666 nginx.queue.reading 0.000000 1466131666 nginx.queue.writing 1.000000 1466131666 nginx.queue.waiting 4.000000 1466131666
mackerel-plugin-php-apc
README.md を見ると Apache 用の Usage しか載ってなかったけど,今回は nginx で使ってみた.nginx.conf
に以下のエンドポイントを定義して,GitHub にコミットされてる php-apc.php
を公開ディレクトリ直下の /mackerel
に配置する.
location /mackerel { access_log off; allow 127.0.0.1; deny all; }
同じくバイナリを実行すると確認できる.
$ /usr/bin/mackerel-plugin-php-apc php-apc.purges.cache_full_count 0 1466163975 php-apc.purges.user_cache_full_count 0 1466163975 php-apc.stats.cache_hits 4 1466163975 php-apc.stats.cache_misses 0 1466163975 php-apc.cache_size.cached_files_size 86425968 1466163975 php-apc.cache_size.user_cache_vars_size 0 1466163975 php-apc.cache_size.total_memory 134217592 1466163975 php-apc.user_stats.user_cache_hits 0 1466163975 php-apc.user_stats.user_cache_misses 0 1466163975
公式クックブックの README.md を修正した
最初 GitHub の README.md を見ながらプロビジョニングをしたらエラーになって,公式クックブックを読んでみたら,既に廃止された node['mackerel-agent']['plugins']
が原因だとわかった.簡単な修正だけど,プルリクを出しておいた.
まとめ
Zabbix と併用する形で Mackerel を使うことになり,今日は検証をしていた.前に Heroku と連携して遊んでみたりしたけど,実際に運用するとなると収集できるメトリクスの種類を確認する必要があるし,不足してたら Plugins を実装する必要もある.価値のある監視運用をするために Mackerel を使い倒すぞ!という気持ち.今週開催された "Mackerel User Group Meeting Vol.1" は "Prometheus Casual Talks #1" の裏番組で参加できなかったから資料を読もうと思っている.