kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Chef で mackerel-agent をインストールして Plugins を動かしてみた

Chef で mackerel-agent と mackerel-agent-plugins をインストールした.特にハマる点は無く,サクッとインストールできたけど,プロビジョニングする前に公式クックブックを読んだりもした.簡単にまとめておこうと思う.

github.com

Berksfile

cookbook 'mackerel-agent', '~> 1.2'

現在 Supermarket に公開されている最新版は 1.2.0 で,Berksfile から普通に落としてくると 1.2.0 になる.もし Amazon Linux にインストールする場合は 1.2.1 が必要で,既に GitHub 上では Tag が打たれてるんだけど,Supermarket には公開されていなかった.なぜだろ?

supermarket.chef.io

mackerel.io

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-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'] が原因だとわかった.簡単な修正だけど,プルリクを出しておいた.

github.com

まとめ

Zabbix と併用する形で Mackerel を使うことになり,今日は検証をしていた.前に Heroku と連携して遊んでみたりしたけど,実際に運用するとなると収集できるメトリクスの種類を確認する必要があるし,不足してたら Plugins を実装する必要もある.価値のある監視運用をするために Mackerel を使い倒すぞ!という気持ち.今週開催された "Mackerel User Group Meeting Vol.1" は "Prometheus Casual Talks #1" の裏番組で参加できなかったから資料を読もうと思っている.

kakakakakku.hatenablog.com

mackerel-ug.connpass.com

関連記事

mackerel.io

mackerel.io