share facebook facebook2 twitter menu hatena pocket slack

2016.06.20 MON

Mackerel事始め mkr(3)

WRITTEN BY大住 孝之

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

20160523041549

create

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

$ mkr create TEST
   created XXXXXXXXtLu

20160523041550

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

20160523041551

update

ホスト情報を更新します。

$ mkr update --displayName 表示名更新 XXXXXXXXtLu
   updated XXXXXXXXtLu

20160523041552

  • ステータスをスタンバイ、ロールを更新した場合

ロールは追加されるようです。

$ mkr update --st standby --roleFullname testservice:web -n test2 XXXXXXXXPcN
   updated XXXXXXXXPcN

20160523041553

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'

20160523041554

サービスメトリック

$ 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'

20160523041555

存在しないサービス名指定ではエラーとなります。

% 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 は利用頻度が高いのではと思います。

元記事はこちら

Mackerel事始め mkr(3)

大住 孝之

構築運用担当。 個性的な面々の中で無個性という個性を打ち出していこうと画策中。