有償コンテンツのHLS配信に、さくらのクラウド ウェブアクセラレータ(CDN)+オブジェクトストレージ を組み合わせて使う

このサイトは移転しました。1秒後に自動でリダイレクトします。

go-carbon・carbon-relay-ngのモニタリング項目メモ

 

go-carbon

carbon-relay-ng は Graphite/Carbon に相当するもので、違いなどの詳細は 

GitHub - go-graphite/go-carbon をみてください。

 

carbon-relay-ng

carbon-relay-ng は Graphite の carbon-relay-py  に相当するもので、違いなどの詳細は GitHub - grafana/carbon-relay-ng をみてください。

 

go-carbon・carbon-relay-ngを用いたデータ集計を日々運用していく上で、エラー等の状態を検知するために、個人的に「このあたりをモニタリングすると良さそう」と思っている項目のメモです。使い方次第では、他にもあるかもしれません。

 

go-carbon 項目

go-carbonモニタリングに使う項目は、起動後1分は値がnullになるものので、起動後はスキップにするのがおすすめ。(起動してから1分間隔で送信:このあたり)

① TCP受信数

carbon.agents.【go-carbonのインスタンス名】.tcp.metricsReceived

② TCP接続エラー数

carbon.agents.【go-carbonのインスタンス名】.tcp.errors

③ キャッシュ個数

carbon.agents.【go-carbonのインスタンス名】.cache.metrics

④ キャッシュサイズ

carbon.agents.【go-carbonのインスタンス名】.cache.size

⑤ キャッシュオーバーフロー

carbon.agents.【go-carbonのインスタンス名】.cache.overflow

go-carbon は、キャッシュの許容範囲を超えた場合、ディスクに書き込まれない分が喪失する。

この時点より早く検知したい場合は、cache.maxSizeの●%のcahce.size(④キャッシュサイズ)を監視しておくと良さそう。

 

carbon-relay-ng 項目

① 送信数

service_is_carbon-relay-ng.instance_is_【carbon-relay-ngのインスタンス名】.mtype_is_counter.unit_is_Metric.direction_is_in

② メトリック欠落エラー系

carbon-relay-ng/conn.go at b0c8921812d428c3370f3de932f73c038ecf3e94 · grafana/carbon-relay-ng · GitHub のあたりの項目で必要なもの

例:
service_is_carbon-relay-ng.instance_is_【carbon-relay-ngのインスタンス名】.mtype_is_counter.dest_is_【送信先】.unit_is_Metric.action_is_drop.reason_is_bad_pickle

③ 送信エラー系

carbon-relay-ng/destination.go at b0c8921812d428c3370f3de932f73c038ecf3e94 · grafana/carbon-relay-ng · GitHub のあたりの項目で必要なもの

例:
service_is_carbon-relay-ng.instance_is_【carbon-relay-ngのインスタンス名】.mtype_is_counter.dest_is_【送信先】.unit_is_Metric.action_is_drop.reason_is_slow_spool

④ Aggregator 破棄数

Aggregator で、設定した wait時間を過ぎて投入されたデータは破棄されます。

service_is_carbon-relay-ng.instance_is_【carbon-relay-ngのインスタンス名】.mtype_is_counter.module_is_aggregator.unit_is_Metric.what_is_TooOld

破棄された個数を検知したいときはこれをモニタリングすると良さそうです。

個数は把握できるものの、取りこぼしたメトリックの内容が把握できないので、別途ログ出力するようにも試みました。こちらは下記の記事に書きました。

 

 

carbon-relay-ng の ログ出力変更、reload対応のメモ

carbon-relay-ng

carbon-relay-ng は Graphite の carbon-relay-py  に相当するもので、違いなどの詳細は GitHub - grafana/carbon-relay-ng をみてください。

 

去年にやっていた内容なのですが、忘れる前に書き残しておきます。

carbon-relay-ng 0.13.0 に、3点程ほど手を加えたのですが、こちらの都合な内容含むため、PRは出してません。

なので行方不明にならないように置き場と内容をメモしておきます。

 
変更内容

① ログをログファイルに出力する

元々は journalログへの出力のみなので、明示的に指定したファイルに個別出力するようにしました。GitHub - Songmu/replaceablewriter を使わせていただきました。

 設定ファイル側にも追記しておく。

# This setting sets where the log is written. The default setting is "" (journal log only).
log_file = "/var/log/carbon-relay-ng/carbon-relay-ng.log"

 

② Aggregator の TooOld の詳細をログ出力する

carbon-relay-ng の Aggregator で、設定した wait時間を過ぎて投入されたデータは破棄されます。その破棄されたデータの個数は、

service_is_carbon-relay-ng.instance_is_${relay_instance}.mtype_is_counter.module_is_aggregator.unit_is_Metric.what_is_TooOld

に記録されますが、個数のみではなく、破棄された内容を記録したかったので、その詳細をログに吐くようにしました。

【出力例】
2020-06-23 16:14:33.901 [WARNING] Aggregator is receiving too old. key is hoge.ab.ab01.agg.count.test01, ts is 1576629860, quantized is 1576629840, value is 3.

TooOld 以外のモニタリングしておいた方が良さそうな内容については、別途、後日書こうかと思います 。

 

③ reload 対応

ログをファイル出力するようにしたので、ログローテーション用に、reload(SIGHUP)でログファイルをリオープンするという変更。

serviceファイルにも ExecReload を、追記しておく。

ExecReload=/bin/kill -HUP $MAINPID

 

carbon-relay-ng の deb生成の話は、nfpmでdeb作成するメモ の方に、書きました。

 

WSL1 + Cmder で wslbridge error: failed to start backend process のエラー解消

発生バージョン

Cmder 1.3.10 → 1.3.16

Windows 10 version 1903

内容

Windows 10 環境で、WSL1 + Cmder を利用していて Windows Update 後に下記のエラーになりました。

wslbridge error: failed to start backend process
note: backend error output: -v: -c: line 0: unexpected EOF while looking for matching `''
-v: -c: line 1: syntax error: unexpected end of file

ConEmuC: Root process was alive less than 10 sec, ExitCode=0.
Press Enter or Esc to close console...

解消方法メモ

Cmder の バージョンアップ ( 参考記事 : Cmder のバージョンを上げる方法 | ラボラジアン ) では治らなかったので、

wslbridge error: failed to start backend process · Issue #2382 · cmderdev/cmder · GitHub

というIssueのコメントが恐らく WSL2 用の手順で書かれているのですが、同様の対応でWSL1でも解消しました。WSLの詳細に疎いので原因は理解できていませんが、解消方法だけ、書き残しておきます。

  • Cygwin Snapshots からダウンロードした cygwin1.dll の置き換え ( vendor\conemu-maximus5\ConEmu\wsl 配下 )

  • Releases · Biswa96/wslbridge2 · GitHub からダウンロードした v0.6 の wslbridge2 ・ wslbridge2-backend 新規配置 ( vendor\conemu-maximus5\ConEmu\wsl )

  • Cmder の WSL bash task の設定変更 ( conemu-cyg-64.exe --wsl → conemu-cyg-64.exe %ConEmuBaseDirShort%\wsl\wslbridge2.exe ) 
WSL bash task (例) : 
<変更前>
*set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt
<変更後>
*set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe %ConEmuBaseDirShort%\wsl\wslbridge2.exe -cur_console:pm:/mnt

あとで wslbridge.exe とかに変更してもとの方だとエラー再現して起動しないので、wslbridge2.exe で起動する必要があるようでした。

  • 再度Cmderを起動して、wslbridge2.exe がセキュリティソフトにはじかれるようなら許可設定する
はじかれるとこんな感じに : 

{PID:264} failed to run shell (13): Permission denied
{PID:264} shell: `C:\Tool\cmder_mini\vendor\conemu-maximus5\ConEmu\wsl\wslbridge2.exe`
{PID:264} dir: `/cygdrive/c/Tool/cmder_mini`

ConEmuC: Root process was alive less than 10 sec, ExitCode=0.
Press Enter or Esc to close console...

 

これで無事 WSL1 接続のエラーが解消しました。

nfpmでdeb作成するメモ

rpm や deb をつくるのに nfpm が便利と教えていただいて、半年ほど前から nfpm を使うようになりました。手軽に使えて便利です。

 

詳細なインストール方法やconfigの内容はドキュメント(https://nfpm.goreleaser.com/)で確認してみてください。

 

使用例 : carbon-relay-ng の deb生成してみる

carbon-relay-ng を例に、私がdeb生成で使っている内容を、雑にメモしておきます。

nfpmインストール

# wget https://github.com/goreleaser/nfpm/releases/download/v1.4.1/nfpm_amd64.deb
# apt install ./nfpm_amd64.deb

 

梱包するものの準備

carbon-relay-ng
L nfpm.yaml
L files
L carbon-relay-ng <- 事前にバイナリをビルドしておく
L carbon-relay-ng.conf
L carbon-relay-ng.service
L tmpfile.conf
L scripts
L before_install.sh <- ディレクトリ作成・所有変更など
L after_install.sh <- daemon-reload など

 

nfpm.yaml 準備

# nfpm config file for carbon-relay-ng
name: "carbon-relay-ng"
arch: "amd64"
platform: "linux"
version: "0.13.0"
release: "1"
section: "default"
provides:
- carbon-relay-ng
maintainer: "Dieter Plaetinck"
description: |
Fast carbon relay+aggregator with admin interfaces for making changes online - production ready
vendor: "http://github.com/grafana/carbon-relay-ng"
homepage: "http://github.com/grafana/carbon-relay-ng"
license: "2-clause BSD license"
bindir: "/usr/bin"
empty_folders:
- /var/log/carbon-relay-ng
- /etc/carbon-relay-ng
config_files:
./files/carbon-relay-ng.conf: "/etc/carbon-relay-ng/carbon-relay-ng.conf"
files:
./files/carbon-relay-ng: "/usr/bin/carbon-relay-ng"
./files/carbon-relay-ng.service: "/lib/systemd/system/carbon-relay-ng.service"
./files/tmpfile.conf: "/etc/tmpfiles.d/carbon-relay-ng.conf"
scripts:
preinstall: "scripts/before_install.sh"
postinstall: "scripts/after_install.sh"

私がはじめに使っていた時ドキュメントあまり読んでなかったので失敗したのですが、アップグレードの際に config_files (上書きしないを選択できる) と files (問答無用で上書き) があるので適宜使い分けます。

 

nfpm実行 ( コマンド )

nfpm pkg --target carbon-relay-ng_0.13.0-1_amd64.deb

 

nfpm実行シェルの例 ( スクリプト内から抜粋 )

github-release.sh <- nfpm 実行とgithubにアップロード
L carbon-relay-ng <- 先ほどの準備物一式
L foo
L var
略

for APP_NAME in "carbon-relay-ng" "foo" "var"
do
PKG_VERSION=$(grep version ${APP_NAME}/nfpm.yaml | cut -d'"' -f 2)
RELEASE_VERSION=$(grep release ${APP_NAME}/nfpm.yaml | cut -d'"' -f 2)
( cd ${APP_NAME} && nfpm pkg --target "${APP_NAME}_${PKG_VERSION}-${RELEASE_VERSION}_amd64.deb" )

略

done

略

 

こんな感じでdeb作成してます。手軽に使えて便利です。

 

蛇足

前のバージョン( v1.1.8 ) を使っていたときに、release version が - ではなく ~ になってしまう挙動でしたが、新しいバージョン ( v.1.4.1 ) では - になるようになったようです。

もしも、同じ事象に遭遇されている方がいたらバージョン確認してみてください。

( feat: version release/prerelease options by astorath · Pull Request #111 · goreleaser/nfpm · GitHub で変更になったそうです )

nfpm --version
1.1.8

nfpm pkg --target carbon-relay-ng_0.13.0-1_amd64.deb

dpkg -I carbon-relay-ng_0.13.0-1_amd64.deb | grep -i version: Version: 0.13.0~1 <- "~" になる

----------------------------
# nfpm --version 1.4.1

nfpm pkg --target carbon-relay-ng_0.13.0-1_amd64.deb

dpkg -I carbon-relay-ng_0.13.0-1_amd64.deb | grep -i version: Version: 0.13.0-1 <- "-" になる

 

carbon-relay-ng の v0.12.0以前をビルドするメモ

carbon-relay-ng

carbon-relay-ng は Graphite の carbon-relay-py  に相当するもので、違いなどの詳細は GitHub - grafana/carbon-relay-ng をみてください。

 

2019年12月中旬のタイミングで

carbon-relay-ng の owner が graphite-ng から grafana(Grafana Labs) に変更になっています。変更タイミングは Fix path to new grafana org by Dieterbe · Pull Request #384 · grafana/carbon-relay-ng · GitHub のあたりでした。

 

2020年6月19日現在の最新バージョンである v0.12.0 など、Fix path to new grafana org by Dieterbe · Pull Request #384 · grafana/carbon-relay-ng · GitHub  のcommit以前のバージョンをビルドする際には、こちらの差分を取り込むか、make実行時の配置パスを過去の graphite-ng に合わせるか、などで対応しておく必要があります。

なお、 graphite-ng は現在もう存在しません。

( 0.12.0 以前 )
graphite-ng/carbon-relay-ng
↓
( 現在 )
grafana/carbon-relay-ng

 

うっかりこのことを忘れてビルドすると失敗します。

# make
cd ui/web && go-bindata -pkg web admin_http_assets/...
find . -name '*.go' | grep -v '^\.\/vendor' | xargs gofmt -w -s
CGO_ENABLED=0 go build -ldflags "-X main.Version=0.12.0" ./cmd/carbon-relay-ng
# github.com/grafana/carbon-relay-ng/cmd/carbon-relay-ng
cmd/carbon-relay-ng/carbon-relay-ng.go:85:18: cannot use formatter (type *logger.TextFormatter) as type "github.com/grafana/carbon-relay-ng/vendor/github.com/sirupsen/logrus".Formatter in argument to "github.com/grafana/carbon-relay-ng/vendor/github.com/sirupsen/logrus".SetFormatter:
*logger.TextFormatter does not implement "github.com/grafana/carbon-relay-ng/vendor/github.com/sirupsen/logrus".Formatter (wrong type for Format method)
have Format(*"github.com/graphite-ng/carbon-relay-ng/vendor/github.com/sirupsen/logrus".Entry) ([]byte, error)
want Format(*"github.com/grafana/carbon-relay-ng/vendor/github.com/sirupsen/logrus".Entry) ([]byte, error)
cmd/carbon-relay-ng/carbon-relay-ng.go:163:34: cannot use meta (type "github.com/grafana/carbon-relay-ng/vendor/github.com/BurntSushi/toml".MetaData) as type "github.com/graphite-ng/carbon-relay-ng/vendor/github.com/BurntSushi/toml".MetaData in argument to table.InitFromConfig
Makefile:five: recipe for target 'build' failed
make: *** [build] Error 2