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 のデフォルトで指定されるステータスは working
と standby
のみなので全て指定しておかないと maintenance
と poweroff
が除外されてしまう)。
なのですべてのホストを取得したい場合のコードは以下。
client := mkr.NewClient(os.Getenv("MACKEREL_APIKEY"))
hosts, _ := client.FindHosts(&mkr.FindHostsParam{
Statuses: []string{"working", "standby", "maintenance", "poweroff"},
})
あとは for
で回して必要なデータを取り出せます。
- 例えば
Name
とID
を出力する場合
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 を出したいと思います。 🐟