MackerelのAPIを使ってパフォーマンス情報を取得する

#はじめに
最近、仕事でも自宅サーバーの監視でもMackerelを使っています。Mackerelは手軽に導入できる上、パフォーマンス情報をグラフで見ることができるので、凄く助かっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269326/f96eaf47-01a6-6169-d532-1cd30e66abfc.png)


ただ、フリープランだと一日分のグラフしか確認することができず、課金プランでも1年前のデータは丸められてしまいます。日々の生データを収集するため、Mackerelで用意しているAPIを使ったパフォーマンス情報の取得方法を整理してみました。

#環境
実行環境はCentOS7.6を使用しています。
Mackerelの使用方法や導入方法は[公式ヘルプ](https://mackerel.io/ja/docs/)をご確認ください。（コマンド１、２個で導入できます。）



#前準備
パフォーマンス情報はjsonのフォーマットで出力されるため、`jq`コマンドがあると便利です。
こちらは、`yum`コマンドでインストールできます。

```bash:install
 $ yum install epel-release
 $ yum install jq
```


#パフォーマンス情報の取得方法

curlコマンドを使用して、MackerelのAPIから必要な情報を取得します。
例として、CPUのユーザー使用率とシステム使用率を取得するのに必要となる情報は以下のとおりです。

【必要な情報】
X-Api-Key ： 実行に必要なAPIキー
ベースURL ： `https://api.mackerelio.com/`
最新値の取得API: `/api/v0/tsdb/latest`
hostId: 対象となるサーバーのID
name: 取得したいシステムメトリック名。

## 各情報の確認方法
### X-Api-Key
ダッシュボード-APIキータブで確認。
今回はRead権限のみ必要なのでパフォーマンス情報取得用のAPIを使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/6ca5d585-e03a-377c-3142-accc85d83d0c.png)

### hostid
各ホスト情報のID欄に記載されているものを使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/e4a63705-f640-13c5-4d1a-a5a9ee5377b1.png)

### name
使用できるシステムメトリックは以下のコマンドで取得できます。
`curl  -s -H "X-Api-Key: $MACKEREL_APIKEY" "https://mackerel.io/api/v0/hosts/[対象のホストのID]/metric-names" | jq -r`
今回使用するのはcpu.user.percentageとcpu.system.percentageになります。
その他のメトリックは、[公式のメトリック仕様](https://mackerel.io/ja/docs/entry/spec/metrics)をご確認ください。

```bash
# curl  -s -H "X-Api-Key: $MACKEREL_APIKEY" "https://mackerel.io/api/v0/hosts/[対象のホストのID]/metric-names" | jq -r
{
  "names": [
    "cpu.guest.percentage",
    "cpu.idle.percentage",
    "cpu.iowait.percentage",
    "cpu.irq.percentage",
    "cpu.nice.percentage",
    "cpu.softirq.percentage",
    "cpu.steal.percentage",
    "cpu.system.percentage",
    "cpu.user.percentage",
    "disk.sda.reads.delta",
    "disk.sda.writes.delta",
    "disk.sda1.reads.delta",
    "disk.sda1.writes.delta",
    "disk.sda2.reads.delta",
    "disk.sda2.writes.delta",
    "disk.sda3.reads.delta",
    "disk.sda3.writes.delta",
    "disk.sr0.reads.delta",
    "disk.sr0.writes.delta",
    "filesystem.mapper_centos-root.size",
    "filesystem.mapper_centos-root.used",
    "filesystem.sda1.size",
    "filesystem.sda1.used",
    "filesystem.sda2.size",
    "filesystem.sda2.used",
    "interface.ens192.rxBytes.delta",
    "interface.ens192.txBytes.delta",
    "loadavg1",
    "loadavg15",
    "loadavg5",
    "memory.active",
    "memory.inactive",
    "memory.mem_available",
    "memory.swap_cached",
    "memory.swap_free",
    "memory.swap_total",
    "memory.total",
    "memory.used"
  ]
}

```

## パフォーマンス情報の取得
確認した値を使用して、パフォーマンス情報を取得します。

```bash
$ MACKEREL_APIKEY=[自分のAPIキー]
$ HOST_NAME=[対象のホストのID]
$ curl -s -H "X-Api-Key: $MACKEREL_APIKEY" "https://mackerel.io/api/v0/tsdb/latest?hostId=$HOST_NAME&name=cpu.user.percentage&name=cpu.system.percentage" |jq .
{
  "tsdbLatest": {
    "HOST_NAME": {
      "cpu.system.percentage": {
        "time": 1564836300,
        "value": 0.0167098338537967
      },
      "cpu.user.percentage": {
        "time": 1564836300,
        "value": 0.0167098338537967
      }
    }
  }
}
```

必要に応じて、jqコマンドのオプションでCSV形式に加工してください。

```bash

 curl -s -H "X-Api-Key: $MACKEREL_APIKEY" "https://mackerel.io/api/v0/tsdb/latest?hostId=$HOST_NAME&name=cpu.user.percentage&name=cpu.system.percentage" ¥
|jq -r '([.tsdbLatest["'$HOST_NAME'"]["cpu.system.percentage"].value, .tsdbLatest["'$HOST_NAME'"]["cpu.user.percentage"].value])|@csv'
0.016703786295112103,0.01670564681933248
```

なお、Mackerelのtimeはエポック秒で出力されるため、時刻情報を追加する場合は注意が必要です。対応としては、dateコマンドで別途時刻を追記するか、Mackerelで取得したtimeをExcelで計算して日本時間に修正するのが良いと思います。

#おわりに
普通に利用しても便利なMackerelですが、APIも豊富に取り揃えているのでこちらを活用することで運用に幅が広がります。他にも良い使い方があれば、紹介していきたいと思います。
なお、詳細なAPIの仕様については[公式ドキュメント](https://mackerel.io/ja/api-docs/)を参照してください。




以上