mackerel-statsdは、StasDプロトコルに則ったメトリックの合計値、あるいは最小値・最大値・平均を計算してMackerelに投稿するための、StasDサーバーです。
StatsDはメトリックを送信するシンプルなUDPプロトコルおよび処理系(Etsy社のブログおよびオリジナルのStasDのGitHub)で、アプリケーション開発者がメトリック送信を実装するのは容易です。
2023年2月時点で、Mackerelは1分ごとにメトリックを受け取ります。つまり、監視している対象の値がその1分の中で激しく変動していたとしても、Mackerelに格納されるメトリックは取得時点の値だけです。
mackerel-statsdは、この問題を解決する一助となります。アプリケーションからStatsDプロトコルで投稿されるメトリックをmackerel-statsdが保管し、1分ごとにそれらの合計値、あるいは最小値・最大値・平均値をMackerelに投稿します。これにより、1分よりも短い間に起きた変化を捉えることができます。
mackerel-statsdは、StatsDプロトコルのうち、Counting(カウンタ値を受け取り、期間中の値の合計のメトリックとなる)とTiming(ミリ秒を受け取り、最小値・最大値・平均値のメトリックとなる)をサポートしています。
Goの開発環境を用意し、以下のコマンドでインストールを実行します。
go install github.com/mackerelio-labs/mackerel-statsd@latest
これで、$GOPATH/bin
に mackerel-statsd
ファイルが用意されます。
起動は以下の書式です。
MACKEREL_APIKEY=MackerelのAPIキー $GOPATH/bin/mackerel-statsd -host ホストID
MACKEREL_APIKEY
: MackerelのオーガニゼーションのAPIキーを指定します。書き込み(Write)を有効にしたAPIキーを生成してください。-host
: メトリックを紐付けるスタンダードホストのホストIDを指定します。
example
フォルダにサンプルを置いています。それぞれのフォルダ内で go run main.go
を実行することで試すことができます。
sample-client
: サイコロを10回振った出目の合計のメトリック(custom.statsd.sample.dice
)と、はてな社トップページへのリクエストの10回のレイテンシーの平均・最大・最小のメトリック(custom.statsd.sample.http.hatena.average/max/min
)を投稿します。間を置いて何度か実行してみてください。sample-http-server
: ローカルホストの8080ポートでWebサーバーが待ち受け、リクエスト処理のレイテンシーの平均・最大・最小のメトリック(custom.statsd.sample.http.request_.average/max/min
およびcustom.statsd.sample.http.request_favicon.ico.average/max/min
)を投稿します。ブラウザでhttp://localhost:8080
を開き、何度かリロードしてみてください。
Linuxのsystemd環境向けのサービスファイルを用意しています。
-
各ファイルをシステムにコピーします。
sudo cp mackerel-statsd /usr/local/bin sudo cp example/systemd/mackerel-statsd.service /lib/systemd/system sudo mkdir -p /etc/sysconfig sudo cp example/systemd/mackerel-statsd.sysconfig /etc/sysconfig/mackerel-statsd
-
/etc/sysconfig/mackerel-statsd
ファイルを編集し、Mackerel APIキー(MACKEREL_APIKEY
)とホストID(HOSTID
)をお使いのものに置き換えてください。sudo vi /etc/sysconfig/mackerel-statsd
-
systemdサービスを有効化します。
sudo systemctl enable mackerel-statsd
Copyright 2023 Hatena Co, Ltd.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.