Mackerel で mkr を使用した CLI 操作の続きです。

create
ホストを作成します。 オプション指定無しだと working で作成されます。
$ mkr create TEST created XXXXXXXXtLu

- ステータスをメンテナンスとし、ロールを指定した場合
$ mkr create -st maintenance -R testservice:testrole TEST created XXXXXXXXPcN updated XXXXXXXXPcN maintenance

update
ホスト情報を更新します。
$ mkr update --displayName 表示名更新 XXXXXXXXtLu updated XXXXXXXXtLu

- ステータスをスタンバイ、ロールを更新した場合
ロールは追加されるようです。
$ mkr update --st standby --roleFullname testservice:web -n test2 XXXXXXXXPcN updated XXXXXXXXPcN

fetch
メトリックの最新値を取得します。 name で指定する値は上記ヘルプページに記載があります。
- loadavg5
$ mkr fetch -n loadavg5 `mkr hosts -n TEST | jq -r '.[].id'`
{
"XXXXXXXkAJd": {
"loadavg5": {
"time": 1463941200,
"value": 0.45499999999999996
}
}
}
- cpu.system.percentage
$ mkr fetch -n cpu.system.percentage `mkr hosts -n TEST | jq -r '.[].id'`
{
"XXXXXXXkAJd": {
"cpu.system.percentage": {
"time": 1463941200,
"value": 0.6792990723058558
}
}
}
複数ホスト
hostId をスペース区切りで指定することで複数ホストのメトリック値の収集が可能です。
% mkr fetch -n loadavg5 `mkr hosts -n TEST2 | jq -r '.[].id'` `mkr hosts -n TEST | jq -r '.[].id'`
{
"XXXXXXXkcAq": {
"loadavg5": {
"time": 1463941500,
"value": 0.21799999999999997
}
},
"XXXXXXXkAJd": {
"loadavg5": {
"time": 1463941500,
"value": 0.144
}
}
}
throw
mackerel-agentが存在しない環境からでもメトリックデータの送信が行えます。
書式
以下の様な書式で値を登録します。 数値以外の値は投稿できません。
cat <<EOF | mkr throw --host <hostId> <name> <value> <time> <name> <value> <time> EOF ... cat <<EOF | mkr throw --service My-Service <name> <value> <time> <name> <value> <time> EOF ...
ホスト(カスタムメトリック)
$ cat <<EOF | mkr throw --host XXXXXXXXtLu
lv15 `uptime | awk '{print $10}'` `date +'%s'`
uptime `uptime | awk '{print $1}'` `date +'%s'`
str "aaa" `date +'%s'`
EOF
warning Failed to parse values: strconv.ParseFloat: parsing "3:48": invalid syntax
warning Failed to parse values: strconv.ParseFloat: parsing "\"aaa\"": invalid syntax
thrown XXXXXXXXtLu 'lv15 1.810000 1463942894'

サービスメトリック
$ cat <<EOF | mkr throw --service test
ResponseTime `curl -L -S -s 'https://example.com/' -o /dev/null -w "%{time_total}" | sed -e 's/%//'` `date +'%s'`
EOF
thrown test 'ResponseTime 0.714000 1463943757'

存在しないサービス名指定ではエラーとなります。
% cat <<EOF | mkr throw --service TEST-SERVICE
pipe heredoc> ResponseTime `curl -L -S -s 'https://example.com/' -o /dev/null -w "%{time_total}" | sed -e 's/%//'` `date +'%s'`
pipe heredoc> EOF
error API result failed: 404 Not Found
mkr コマンドを一通り試しましたが、一括で操作が行える点が便利だと感じました。 特にAPI + α の仕様となっている monitors と、 一括退役が行える retire は利用頻度が高いのではと思います。