Mackerel で mkr を使用した CLI 操作の続きです。 ホスト一覧取得と退役操作を行います。

20160523024748

hosts

ホスト一覧を取得します。ホストを対象とする操作を行う際のidを抽出する為に使用します。

オプション

オプション ロングオプション 説明
-n –name ホスト名で検索。 完全一致。
-s –service サービス名で検索
-r –role ロール名で検索。複数指定可。 サービス未指定だと無視。|
-st –status ステータスで検索。複数指定可。デフォルト working もしくは standby。
-f –format 出力フォーマット指定
-v –verbose 詳細表示
-f | –format

READMEを参照すると以下の様な指定方法のようです。mkrはjqと組み合わせて使う事が多いので、固有の指定方法ではなく、jq側でフォーマット調整をすることになりそうです。

mkr hosts -f '{{range .}}{{if (len .Interfaces)}}{{(index .Interfaces 0).IPAddress}}{{end}}{{"t"}}{{.Name}}{{"n

id 抽出

READMEを真似て id を抜き出してみると以下のようになります。

$ mkr hosts -f '{{range .}}{{.ID}}{{"n"}}{{end}}'
XXXXXXXXes1
XXXXXXXXWNU
XXXXXXXXAJd
・・・略・・・
素直に jq 使用

私はjqの方が慣れているのでこちらを使用すると思います。

mkr hosts | jq -r '.[].id'
-v | –verbose

オプション無し

$ mkr hosts -n ip-172-31-3-172
[
    {
        "id": "XXXXXXXX37m",
        "name": "ip-172-31-3-172",
        "status": "working",
        "roleFullnames": [
            "test:testrole"
        ],
        "isRetired": false,
        "createdAt": "Mar 23, 2016 at 4:39pm (JST)",
        "ipAddresses": {
            "eth0": "172.31.3.172"
        }
    }
]

オプション有り

オプション無しの出力と出力形式が変わり、CPUやメモリ情報が追加されます。
createAt はUNIXTIMEになるのでスクリプト等で使用する場合はこちらの方が扱い易いと思います。

  • 長いので所々省略
$ mkr hosts -n ip-172-31-3-172 -v
[
    {
        "id": "XXXXXXXX37m",
        "name": "ip-172-31-3-172",
        "type": "unknown",
        "status": "working",
        "roles": {
            "test": [
                "testrole"
            ]
        },
        "createdAt": 1458718748,
        "meta": {
            "agent-revision": "7d278aa",
            "agent-version": "0.30.0",
            "block_device": {
                "loop0": {
                    "removable": "0",
                    "size": "0"
                },
・・・略・・・
                "ram0": {
                    "removable": "0",
                    "size": "131072"
                },
・・・略・・・
                "xvda": {
                    "removable": "0",
                    "size": "16777216"
                }
            },
            "cpu": [
                {
                    "cache_size": "25600 KB",
                    "core_id": "0",
                    "cores": "1",
                    "family": "6",
                    "mhz": "2500.066",
                    "model": "62",
                    "model_name": "Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz",
                    "physical_id": "0",
                    "stepping": "4",
                    "vendor_id": "GenuineIntel"
                }
            ],
            "filesystem": {
                "/dev/xvda1": {
                    "kb_available": 5.8507e+06,
                    "kb_size": 8.115168e+06,
                    "kb_used": 1.829192e+06,
                    "mount": "/",
                    "percent_used": "24%"
                },
・・・略・・・
            },
            "kernel": {
                "machine": "x86_64",
                "name": "Linux",
                "os": "GNU/Linux",
                "release": "3.13.0-48-generic",
                "version": "#80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015"
            },
            "memory": {
                "active": "474800kB",
                "anon_pages": "55116kB",
                "bounce": "0kB",
                "buffers": "136852kB",
                "cached": "482840kB",

・・・略・・・
                "writeback": "0kB"
            }
        },
        "interfaces": [
            {
                "name": "eth0",
                "ipAddress": "172.31.3.172",
                "macAddress": "00:00:00:00:00:7d"
            }
        ]
    }
]

retire

ホストの退役を行います。 オプションは –force のみで、違いは y/n プロンプトの有無です。

USAGE:
    mkr retire hostIds...

オプション有無

オプション未指定では y/n を聞いてきます。

# forceオプション無
$ mkr retire XXXXXXXXCVE
Retire following hosts.
  XXXXXXXXCVE
Are you sure? (y/n) [y]: y
   retired XXXXXXXXCVE
# forceオプション有
$ mkr retire --force XXXXXXXXHwG
   retired XXXXXXXXHwG
キャンセル (n押下)

明示的に “n” を指定しないと、 “y” を指定した際と同じ動作です。

# n 押下でキャンセル
$ mkr retire XXXXXXXX1N5
Retire following hosts.
  XXXXXXXX1N5
Are you sure? (y/n) [y]: n
           retirement is canceled.
# n 以外押下だと y 押下と同様に削除
$ mkr retire XXXXXXXX1N5
Retire following hosts.
  XXXXXXXX1N5
Are you sure? (y/n) [y]:
   retired XXXXXXXX1N5

複数指定

スペース区切りで複数指定が可能です。

% mkr retire XXXXXXXXUmG XXXXXXXXrdm
Retire following hosts.
  XXXXXXXXUmG
  XXXXXXXXrdm
Are you sure? (y/n) [y]:
   retired XXXXXXXXUmG
   retired XXXXXXXXrdm

PowerOffを全てretire

hosts コマンドから id を抽出して削除する例です。

mkr retire --force $(mkr hosts --status poweroff | jq -r '.[].id' | tr 'n' ' ')

ホストの退役はWeb画面上からだと1ホストずつしか行えないため、一括退役をさせる場合に非常に便利です。

おそらく次回に続きます

元記事はこちら

Mackerel事始め mkr(2)