Go で observability を高める
day2 はつらいよobservability とは?
具体的には「緑色蛍光タンパク質」
生物内部で薬がどのように効いているかわかる。
なぜ observability?
day2 がつらい
day2 : トラブルシュート、メンテナンス、リソース管理、バージョンアップなどいわゆる保守運用作業なぜ day2 がつらい?
トラブルはいつ起こるかわからない
CPU, MEM, Disk などのリソースから、プログラムのバグ、突然のリクエスト増加、特定条件下で発生する問題...すべての App が observable だったら、day2 は楽になる 🌞
observable-server
Trace, Profile, Metrics をサポートしたサンプル実装
https://github.com/go-zen-chu/observable-serverTrace
どの routine でどのように関数が実行されているかを時系列に確認
Profile
どの関数がどれくらい cpu 時間を消費しているのか。またメモリのヒープ取得オプションもあり
Metrics
アプリケーションごとに見るべき変数は異なる。そのため、カスタムメトリクスを観測できるようにしておくのは重要
Appendix: SideCar で node exporter
VM 内の proc, netstat, diskstats など取得できる
https://github.com/prometheus/node_exporterCF で実装するなら
複数ポートで起動できない orz
/app/ : アプリケーションのパス
/debug/ : pprof のパス
/metrics : exporter のパス
として、外部にパス付き route (https://hostname/app/) で公開するまあ、簡単といえば簡単なのだけれど 🤔
これを全部の Go のプロダクトに反映させたいなぁもっと簡単にする方法はないのだろうか?
¯\_(ツ)_/¯ < ドウナンデショウネ?
FIN
observability はセキュリティとパフォーマンスに気をつけて