翻訳しながらPrometheusを触ってみる~実践編~
前回の続きです。前回はPrometheusの概要について読んで軽く触ってみました。今回はチュートリアルが用意されていたのでそちらを進めてみて次にガイドも読み進めてみます。
その前に起動時にDocker run…とするのがめんどくさいのでcomposeにしておきました。良かったら使ってください。同じディレクトリにprometheus.ymlを置いておいてください。
version: '3.8'
services:
prometheus:
image: prom/prometheus
ports:
- 9090:9090
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
Tutorials
最初の2つは読んでそこまで新しいものではなかったので飛ばします。2つめはmetric typesについて書いているので読んでおくとmetricについてのイメージがよりはっきりすると思います!3つめを進めてみます。
GoでHTTPサーバーを立ててカウンターメトリックを追加することによってサーバーが処理したリクエストの総数を可視化させるみたいです。
コードが示されているのでコピペしてビルドしておきます。特に難しいことのないコードです。
流石にそのままのコードではデータの取得はできないみたいです。ここから数えたいもの今回ならリクエスト数のカウンターを作ってハンドラー呼び出し時に値を加算する仕組みを作ったり/metricsというルートを作ってprometeusがメトリックスの取得ができるようにする必要があるみたいです。公式のものにコメントを追加しておきました。
package main
import (
"fmt"
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
// Prometheus counter
var pingCounter = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "ping_request_count",
Help: "No of request handled by Ping handler",
},
)
func ping(w http.ResponseWriter, req *http.Request) {
// increase count of the counter
pingCounter.Inc()
fmt.Fprintf(w, "pong")
}
func main() {
// register ping counter
prometheus.MustRegister(pingCounter)
http.HandleFunc("/ping", ping)
// expose the metrics
http.Handle("/metrics", promhttp.Handler())
_ = http.ListenAndServe(":8090", nil)
}
ここからprometheus.ymlにその設定を追加して起動すると確認ができるみたいです。prometheusをdocker・goのサーバーをローカルで行っている場合はターゲットはhost.docker.internal:8090です。
管理画面の使い方として上のstatus→targetsを開くと各ターゲットのステータスが確認できるみたいです。
クエリに関してですが定義した通り「ping_request_count」と入力すると値が取得できます。
Guides
Guidesを見て使いそうなものだけピックアップして触ってみます。自分のPrometheusの主な利用方法がサーバーのリソースやアプリケーションが与える負荷や処理回数だと思います。
よって今回は以下の2つを見てみます。
MONITORING DOCKER CONTAINER METRICS USING CADVISOR
MONITORING LINUX HOST METRICS WITH THE NODE EXPORTER
とりあえず上から順番に確認していきます。
INSTRUMENTING A GO APPLICATION FOR PROMETHEUS
については先ほどのチュートリアルと内容が似ていた為スキップします。
MONITORING DOCKER CONTAINER METRICS USING CADVISOR
cAdvisorを使うことによってコンテナのリソースやパフォーマンスを可視化することができるみたいです。そのcAdvisorはPrometheusが可視化に必要なメトリックスデータを出すことができるみたいです。
m1 macではcAdvisorは動かない?で自分でもplatformオプションを追加したりしたのですがそれでも動かなかったので以前使っていたintel mac book airを使って動作確認を行いました。
docker-composeの中も少しそのままでは動かなそうだったので少し修正しました。デフォルトだとdockerデーモンと接続ができない気がします。
サンプルの21行目を以下に修正しました。
# 修正前
- /var/run:/var/run:rw
# 修正後
- /var/run/docker.sock:/var/run/docker.sock:rw
とりあえずcadvisorの動作も確認してprometheus上のクエリでも確認できました!
MONITORING LINUX HOST METRICS WITH THE NODE EXPORTER
自分のパソコンのリソースやパソコンを可視化していきます。
これも特に難しい設定は要らなかったです。node-exporterを使うとそのパソコンのスペックを確認できるようになるみたいです。
今回もdocker上で実行してみました。composeの中にnode-exporterとprometeus本体を定義してprometeusはdockerのネットワークを通してメトリックスを取得する形にしました。
例に示されていたCPUを使用した時間?を取ってみました。
これってDockerに振り分けたCPU数のみグラフに描画されるんですかね?自分の使っているのはm1で8コアのはずなのですが、、、(そこらへんのアーキテクチャ詳しくないです。)
とりあえず動作確認はできました。
特にコードを書くこともなくnode-exporterさえ使えば知りたい情報を知ることができそうです!
まとめ
prometheusでgoのアプリケーションやDockerコンテナ・パソコン本体を監視してみました!自分が思っていたより使い方はシンプルといった印象を持っています。一方でそもそも取得できるデータの種類やクエリについてはドキュメントに書いてあった通りに実行しただけなのでもう少し調査をする必要があると感じました。
この記事が気に入ったらサポートをしてみませんか?