12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudWatchAgentのStatsDを試してみる

Posted at

CloudWatchAgentを設定をしていると、statsDとかcollectdとか名前が出てきますが、どうやらOSSの数値レポーティングツールらしいです。

prometheusを主に使っているので困ったことがなくて所見ですが、今回はstatsDを試してみました。

どんなもの?

  • StatsDはプロトコルの名前、サーバとクライアントの実装がちゃんとあるぞ
  • push系だぞ
  • UDP使っちゃうぞ
  • nodejsでできているんだぞ。
  • 自身のアプリケーションに仕込んだりできるぞ
  • クライアント側で使える言語は豊富だぞ

ってことらしいです。
CloudWatch Agentにはサーバ側が内包されているのでONにするだけです。(ウィザードで選択すればOK)

CloudWatchAgentでStatsDを有効にする

適当なCloudWatchAgentが動いている(動く)サーバでStatsDを有効にします。

amazon-cloudwatch-agent-config-wizard で下記らへんですね。

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

設定ファイルに直接追加するならこちら参考に。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-statsd.html

クライアント側のコードを作る

ライブラリは豊富にあります。 https://github.com/statsd/statsd/wiki

プロダクトのプログラムの中に仕込めればいいんだけどとりあえずお試しなので、gethからblockを取得してstatsDを経由してCloudWatchに表示するってのをやってみます。
gethが入っていて、golang環境があるのでgolangで書きました。
golangはよく知らないのでテキトーです!

package main

import (
    "context"
    "strconv"
    "log"
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/cactus/go-statsd-client/statsd"
)


func main() {

    url := "http://localhost:8545"
    client, err := ethclient.Dial(url)
    if err != nil {
        statsd_push("0")
        log.Fatal(err)
    }

    header, err := client.HeaderByNumber(context.Background(), nil)
    if err != nil {
        statsd_push("0")
        log.Fatal(err)
    }


    statsd_push(header.Number.String())

}

func statsd_push(bno string) {
    // first create a client
    // The basic client sends one stat per packet (for compatibility).
    client, err := statsd.NewClient("127.0.0.1:8125", "statsD-client")

    // handle any errors
    if err != nil {
        log.Fatal(err)
    }
    // make sure to clean up
    defer client.Close()

    i64, err := strconv.ParseInt(bno, 10, 64)
    // log.Println(i64)
    // Send a stat
    client.Gauge("block-number", i64, 1.0)
}

client, err := statsd.NewClient("127.0.0.1:8125", "statsD-client")
localhostの8125でStatsDがたっているのでそいつにぶん投げればCloudWatchAgentが値を拾ってawsにぶん投げてくれます。

client.Gauge("block-number", i64, 1.0)

メトリクスのタイプは https://github.com/statsd/statsd/blob/master/docs/metric_types.md

定時実行する

Crontabに登録しちゃった。(ダサい)

確認する

image.png

こんな感じで出てきました。
あとはアラームを設定するなりなんなりと。

まとめ

  • サーバからデータを送る方法の1つとして使えると思います。
  • udpで投げっぱなしにできるので、コードの中に仕込んでおいてモニタリングとかもできちゃう。(そういうモチベらしい)
  • いいとおもいます!
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?