Member-only story
Golangを理解し、Grafanaを使って監視する方法(後半)
13 min readJul 17, 2020
前編では、goチャンネルとは何か、そしてその仕組みやスケーラブルな実装方法についてお話しました。
後半では、それらを監視する方法を紹介し、ワーカーごとの処理時間のような有用なメトリクスを取得する方法をご紹介します。1分間に実行されているジョブの数か、など他にも色々ご紹介したいと思います。
Stack
では、使用するツールを簡単に説明しましょう。
・Prometheus:オープンソースの時系列メトリックシステムです。また、アラートにも対応していますが、今日はこれについては言及しません。
・Grafana :多くのデータソースに対応しているオープンソースのアナリティクス&モニターソリューションで、Prometheusと一緒に使用して、Goアプリから発動したメトリックを表示します。
Prometheus
まず、アプリ内のメトリクスを設定してPrometheusパッケージに登録する必要がありますが、メトリクスの種類とそれぞれの目的を設定してみましょう。
- Counter:増やすかゼロに戻すかのどちらかしかできない数字です。あなたが送ったメールの数のように、5が3になることもあります。増加することしかできません。
- Gauge: 任意に上下することができる単一の数値を表しています。これらの数値は上下するので、例えばメモリ使用量や同時使用ユーザーのような数値を表し、ここでは実行中のワーカーと実行中のジョブを表します。
- Histogram: オブザーバーの中にあります。サンプルに基づいて、レスポンスタイム、レスポンスサイズ、リクエスト時間のような平均値を教えてくれます。
- Summary: ヒストグラムのようなものですが、オブザベーションの合計とオブザベーションされたすべての値の合計をカウントしてくれます。
上記のSummaryについてはよくわからないのですが、どっちみちこの記事には必要ありません。
// prometheus.gopackage queuevar (JobsProcessed *prometheus.CounterVecRunningJobs *prometheus.GaugeVecProcessingTime *prometheus.HistogramVecRunningWorkers *prometheus.GaugeVec)var collectorContainer []prometheus.Collector