mackerel-agentを使って任意のタイミングでサーバメトリクスを取得する

<img width="500" alt="スクリーンショット_2015-11-03_11_58_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/43208/acdd0595-e12a-4dd0-15db-f642c182eaeb.png">

# はじめに
[Mackerel](https://mackerel.io)のサーバ監視はmackerel-agentをインストールするだけでいろんなメトリクスがグラフで見れて便利ですよね:smile:
ただ、このグラフは1分間隔の値が描画されているのですが[API](http://help-ja.mackerel.io/entry/spec/api/v0#tsdb-latest)では5分毎の平均値しかとれません:sob:

`mackerel-agent`コマンドを使えばそんなメトリクスたちを任意のタイミングでとることができます:point_up::grin: 

# 対象
試したのはCentOS 7.1とMacだけですが、Linux、FreeBSD、Windowsなら[動きそうな雰囲気](https://github.com/mackerelio/mackerel-agent/tree/master/metrics)です。

# 取れるメトリクス
CentOS 7.1でとれる標準のメトリクスはこちらです。

```json
{
  "Created": "2015-11-02T20:57:28.352864959+09:00",
  "Values": {
    "cpu.guest.percentage": 0,
    "cpu.idle.percentage": 399,
    "cpu.iowait.percentage": 0,
    "cpu.irq.percentage": 0,
    "cpu.nice.percentage": 0,
    "cpu.softirq.percentage": 0,
    "cpu.steal.percentage": 0,
    "cpu.system.percentage": 0,
    "cpu.user.percentage": 1,
    "disk.sda.reads.delta": 0,
    "disk.sda.writes.delta": 0,
    "disk.sda1.reads.delta": 0,
    "disk.sda1.writes.delta": 0,
    "filesystem.sda1.size": 16094593024,
    "filesystem.sda1.used": 1343873024,
    "interface.eno16777984.rxBytes.delta": 70,
    "interface.eno16777984.txBytes.delta": 140,
    "loadavg5": 0.01,
    "memory.active": 284356608,
    "memory.buffers": 700416,
    "memory.cached": 271351808,
    "memory.free": 7782879232,
    "memory.inactive": 107966464,
    "memory.swap_cached": 0,
    "memory.swap_free": 0,
    "memory.swap_total": 0,
    "memory.total": 8365703168,
    "memory.used": 310771712,
    "uptime": 0.45530717592592596
  }
}
```

[メトリック仕様](http://help-ja.mackerel.io/entry/spec/metrics)もご覧ください。

Mac OS 10.11でとれたのはこちらです。

```json
{
  "Created": "2015-11-03T13:42:59.868419262+09:00",
  "Values": {
    "cpu.idle.percentage": 98,
    "cpu.system.percentage": 1,
    "cpu.user.percentage": 1,
    "filesystem.disk1.size": 499055067136,
    "filesystem.disk1.used": 109190696960,
    "interface.awdl0.rxBytes.delta": 0,
    "interface.awdl0.txBytes.delta": 0,
    "interface.bridg.rxBytes.delta": 0,
    "interface.bridg.txBytes.delta": 0,
    "interface.en0.rxBytes.delta": 640,
    "interface.en0.txBytes.delta": 642,
    "interface.en1.rxBytes.delta": 0,
    "interface.en1.txBytes.delta": 0,
    "interface.en2.rxBytes.delta": 0,
    "interface.en2.txBytes.delta": 0,
    "interface.gif0.rxBytes.delta": 0,
    "interface.gif0.txBytes.delta": 0,
    "interface.p2p0.rxBytes.delta": 0,
    "interface.p2p0.txBytes.delta": 0,
    "interface.stf0.rxBytes.delta": 0,
    "interface.stf0.txBytes.delta": 0,
    "loadavg5": 0.97,
    "memory.active": 7702355968,
    "memory.cached": 5382914048,
    "memory.free": 3217080320,
    "memory.inactive": 2794979328,
    "memory.swap_free": 0,
    "memory.swap_total": 0,
    "memory.total": 17171968000,
    "memory.used": 8571973632
  }
}
```

# mackerel-agentインストール
インストール方法は[ドキュメント](http://help-ja.mackerel.io/entry/howto/install-agent)に詳しく書いてあります。

rpmやdebのパッケージも用意されていますし、Goのバイナリがあるので直接それを使っても大丈夫です。
Windows用のインストーラも用意されています（試してません）。

# メトリクス取得方法。
次のコマンドで任意のタイミングのメトリクスを取得することができます。

```bash
mackerel-agent --once
```

結果はJSONで出力されます。JSONにはホストのメタ情報なども含まれています。
メトリクスだけ出力したい場合は[jq](https://stedolan.github.io/jq/)とかが便利です。

```bash
$ mackerel-agent --once 2> /dev/null | jq -M ".metrics.Values"
{
  "cpu.idle.percentage": 99,
  "cpu.system.percentage": 0,
  "cpu.user.percentage": 0,
  "filesystem.disk1.size": 499055067136,
  "filesystem.disk1.used": 109224218624,
  "interface.awdl0.rxBytes.delta": 0,
  "interface.awdl0.txBytes.delta": 0,
  "interface.bridg.rxBytes.delta": 0,
  "interface.bridg.txBytes.delta": 0,
  "interface.en0.rxBytes.delta": 748,
  "interface.en0.txBytes.delta": 529,
  "interface.en1.rxBytes.delta": 0,
  "interface.en1.txBytes.delta": 0,
  "interface.en2.rxBytes.delta": 0,
  "interface.en2.txBytes.delta": 0,
  "interface.gif0.rxBytes.delta": 0,
  "interface.gif0.txBytes.delta": 0,
  "interface.p2p0.rxBytes.delta": 0,
  "interface.p2p0.txBytes.delta": 0,
  "interface.stf0.rxBytes.delta": 0,
  "interface.stf0.txBytes.delta": 0,
  "loadavg5": 1.33,
  "memory.active": 7322976256,
  "memory.cached": 5257224192,
  "memory.free": 3427651584,
  "memory.inactive": 2804174848,
  "memory.swap_free": 0,
  "memory.swap_total": 0,
  "memory.total": 17171501056,
  "memory.used": 8486625280
}
```

# おわりに
`mackerel-agent`コマンドを使って任意のタイミングで手軽にサーバメトリクスを取得する方法を紹介しました。
1コマンドで様々なメトリクスがJSONとして取得できてとても便利です:satisfied::tada: