Trying out Go Mackerel client library

Mackerel の API を使って Alfred ワークフローを作ってみよう と思っていたらタイミングよく Go のクライアントを見つけたので使ってみました。

ちなみにまだ α 版とのこと。

Now, mackerel-client-go is an ALPHA version. In the future release, it may change it's interface.

準備

go get github.com/mackerelio/mackerel-client-go

export MACKEREL_APIKEY="XXXXXXXX"

ホスト一覧を取得する

README にあるように以下のようにして取得するホストをフィルタリングすることができます。

client := mkr.NewClient(os.Getenv("MACKEREL_APIKEY"))
hosts, _ := client.FindHosts(&mkr.FindHostsParam{
        Service: "My-Service",
        Roles: []string{"proxy"},
        Statuses: []string{"working"},
})

現在使えるパラメータは5つ。

全てのホストを取得したい場合は Statuses で全てのステータスを指定する必要があります( API のデフォルトで指定されるステータスは workingstandby のみなので全て指定しておかないと maintenancepoweroff が除外されてしまう)。

なのですべてのホストを取得したい場合のコードは以下。

client := mkr.NewClient(os.Getenv("MACKEREL_APIKEY"))
hosts, _ := client.FindHosts(&mkr.FindHostsParam{
        Statuses: []string{"working", "standby", "maintenance", "poweroff"},
})

あとは for で回して必要なデータを取り出せます。

  • 例えば NameID を出力する場合
for _, v := range hosts {
	fmt.Println(v.Name, v.ID)
}

どんなデータが取得できるかは以下を参照。

全体としてはこんな感じです。

package main

import (
	"fmt"
	"os"

	mkr "github.com/mackerelio/mackerel-client-go"
)

func main() {
	client := mkr.NewClient(os.Getenv("MACKEREL_APIKEY"))
	hosts, _ := client.FindHosts(&mkr.FindHostsParam{
		Statuses: []string{"working", "standby", "maintenance", "poweroff"},
	})

	for _, v := range hosts {
		fmt.Println(v.Name, v.ID)
	}
}

オーガニゼーションを取得する

オーガニゼーションで取得できるのは Name だけなので単純です。

package main

import (
	"fmt"
	"os"

	mkr "github.com/mackerelio/mackerel-client-go"
)

func main() {
	client := mkr.NewClient(os.Getenv("MACKEREL_APIKEY"))
	org, _ := client.GetOrg()

	fmt.Println(org.Name)
}

まとめ

ほかにもホストの追加やメトリックのポスト、ダッシュボードのポスト等、現在 API で提供していることはだいたい(全部?)出来ると思います。

コードもそんなに長くないので、見ながら試していくことが出来ました。

Go で Mackerel 関連ツールを作りたいときにめっちゃ便利ですね。 🙏

まだ α 版なので仕様変更があるとは思いますが、使ってみて何かあれば PR や Issue を出したいと思います。 🐟