読者です 読者をやめる 読者になる 読者になる

vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Mackerel事始め mkr(3)

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

f:id:htnosm:20160523041549p:plain

create

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

$ mkr create TEST
   created XXXXXXXXtLu

f:id:htnosm:20160523041550p:plain

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

f:id:htnosm:20160523041551p:plain

update

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

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

f:id:htnosm:20160523041552p:plain

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

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

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

f:id:htnosm:20160523041553p:plain

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'

f:id:htnosm:20160523041554p:plain

サービスメトリック

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

f:id:htnosm:20160523041555p:plain

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

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