My Note

自己理解のためのブログ

Go ( mackerel-client-go ) を利用してMackerelにカスタムメトリクスをPostする

やったこと

Goを使ってMackerelに対してカスタムメトリクスを登録してみました。 投稿したデータをグラフ化できるし便利なのでぜひ使ってみてください。

  • 開発環境
    • Go: 1.12.4
    • Goland

mackerel-client-goについて

今回はMackerelが公式に提供している mackerel-client-go を利用しました。

github.com

Mackerelダッシュボードにサービス名を指定してサービスメトリックに投稿する

PostServiceMetricValues を利用する。

github.com

func (c *Client) PostServiceMetricValues(serviceName string, metricValues [](*MetricValue)) error

metricValues [](*MetricValue)

type MetricValue struct {
    Name  string      `json:"name,omitempty"`
    Time  int64       `json:"time,omitempty"`
    Value interface{} `json:"value,omitempty"`
}

mackerelにメトリクスをPostするコード

package main

import (
    "fmt"
    "github.com/mackerelio/mackerel-client-go"
    "time"
)

var (
    client  = mackerel.NewClient("<MACKEREL_API_KEY>")
    nowTime = time.Now()
)

func main() {

    err := client.PostServiceMetricValues("dev", []*mackerel.MetricValue{
        &mackerel.MetricValue{
            Name:  "access_log.latency",
            Time:  nowTime.Unix(),
            Value: 500,
        },
    })
    if err != nil{
        fmt.Println("Error")
    }
}

実行結果

f:id:yhidetoshi:20190621075744p:plain

MackerelダッシュボードにホストIDを指定してメトリクスを投稿する

PostHostMetricValuesByHostID を利用する。

github.com

func (c *Client) PostHostMetricValuesByHostID(hostID string, metricValues [](*MetricValue)) error 

■ mackerelにメトリクスをPostするコード

package main

import (
    "fmt"
    "github.com/mackerelio/mackerel-client-go"
    "io/ioutil"
    "os"
    "strings"
    "time"
)

var (
    IDFILE  = "/var/lib/mackerel-agent/id"
    client  = mackerel.NewClient("<MACKEREL_API_KEY>")
    nowTime = time.Now()
)

func main() {
    hostID := GetHostID()

    err := client.PostHostMetricValuesByHostID(hostID, []*mackerel.MetricValue{
        &mackerel.MetricValue{
            Name:  "proxy.access_log.latency",
            Time:  nowTime.Unix(),
            Value: 500,
        },
    })
    if err != nil{
        fmt.Println("Error")
    }
}

func GetHostID() string {
    var hostID string

    content, err := ioutil.ReadFile(IDFILE)
    if err != nil {
        fmt.Println("Error")
        os.Exit(1)
    }
    lines := strings.Split(string(content), "\n")
    hostID = lines[0]

    return hostID
}

■ 実行結果

f:id:yhidetoshi:20190621075512p:plain

まとめ

mackerel-client-goを使って、Mackerelダッシュボードに、サービス名を指定、ホストIDを指定してそれぞれにメトリクスを投稿した。APIを使ってメトリクスを投稿できるようになったので可視化したいデータなどを投稿していきたいと思います。