Carpe Diem

備忘録

Prometheus でAPIサーバの監視【gRPC】

概要

前回はHTTPのAPIサーバの監視の仕方を説明しました。

christina04.hatenablog.com

今回はgRPCでのメトリクスの作り方を説明します。

環境

  • Prometheus 2.11.1
  • Golang 1.12.7
  • Grafana 6.2.5
  • prometheus/client_golang 1.0.0
  • go-grpc-prometheus 1.2.0

メトリクスの追加

実際の処理をするServer側と、コールするClient側の両方にメトリクスを追加していきます。

サンプルコードは

github.com

にあります。

続きを読む

Prometheus でAPIサーバの監視【HTTP】

概要

前回は既存のexporterを利用せず、自分でメトリクスを生成する方法を説明しました。

christina04.hatenablog.com

その方法を使って実際にAPIサーバ(HTTP)のメトリクスを生成し、可視化してみます。

環境

  • Ubuntu 18.04
  • Prometheus 2.11.1
  • Golang 1.12.7
  • Grafana 6.2.5

The Four Golden SignalsとREDメソッド

分散システムで何をモニタリングすべきかについては、The Four Golden Signalsが有名です。

それを踏まえてマイクロサービスではREDメソッドという指標があります。

項目 説明
Rate リクエスト数/sec
Errors エラー数
Duration リクエスト毎のduration

今回はこのREDメソッドに基づいて可視化できるようにします。

続きを読む

Prometheus で独自メトリクスを用意する

概要

Metric types | Prometheus で定義されているようにPrometheusでは大きく4つのメトリクスタイプがあります。

  • Counter
  • Gauge
  • Summary
  • Histogram

今回は各メトリクスを独自で用意する方法を説明します。

環境

  • Prometheus 2.11.1
  • Golang 1.12.7

expose

まずはPrometheusが監視対象のメトリクスをPullできるよう/metricsのエンドポイントを用意します。
公式クライアントとしてpromhttpというライブラリが提供されているのでそれを使います。

package main

import (
    "log"
    "net/http"

    "github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
    http.Handle("/metrics", promhttp.Handler())
    log.Fatal(http.ListenAndServe(":8080", nil))
}
続きを読む

Grafanaのパネルの作り方

概要

Prometheus + GrafanaではPromQLを使って柔軟なパネルが作成できる一方、作り方が複雑になりがちです。

今回は基本的なパネルの作り方を説明します。

環境

  • Grafana 6.2.5
  • Prometheus 2.11.1

パネル

Grafanaのダッシュボードのパネルは大きく10あります。

  • グラフ
  • シングルスタット
  • ゲージ
  • バーゲージ
  • テーブル
  • テキスト
  • ヒートマップ
  • アラートリスト
  • ダッシュボードリスト
  • プラグインリスト

今回はよく使う

  • グラフ
  • シングルスタット

の2つを説明します。

続きを読む

Prometheus の基本的な使い方【Grafana】

概要

christina04.hatenablog.com

の続きです。

今回はGrafanaを使ってメトリクスの可視化をします。

環境

  • Ubuntu 18.04
  • Prometheus 2.11.1
  • Grafana 6.2.5

構成

引き続きVMで行います。

VM IP
Prometheus 192.168.33.10
Node 192.168.33.11
Grafana 192.168.33.12
続きを読む

Prometheus の基本的な使い方【Node exporter】

概要

Pull型の監視サービスであるPrometheusの使い方を説明します。

環境

  • Prometheus 2.11.1
  • Node exporter 0.18.1

アーキテクチャ

Prometheusのアーキテクチャはこの様になっています。

f:id:quoll00:20190715082527p:plain

ref: Overview | Prometheus

大まかな特徴としては以下です。

  • Pull型(over HTTP)の監視サービス
  • 独自のデータストアを持つ
  • PromQLという独自の柔軟なクエリを持つ
  • 監視対象ではexporter(マシンやコンテナのステータスを返す口)を用意して、PrometheusServerがPullする
  • アラートはAlertmanagerという別コンポーネントで対応
  • 可視化はGrafanaを使う
続きを読む

GPGでgitのcommitに署名する

概要

GitHubではMergeコミットなどで

f:id:quoll00:20190714123803p:plain

といったマークを見ます。これは署名されたcommitを示すものなのですが、

  • なぜ必要なのか
  • どうやったら署名できるのか

を今回説明します。

環境

  • macOS 10.14.5 Mojave
  • gpg 2.2.10

なぜ署名が必要か?

gitのコミットは

commit 91e8e61ee6601576e358201315b6624181529879 (HEAD -> refactor-chain, origin/refactor-chain)
Author: Junpei Tsuji <junpei.tsuji.ams@gmail.com>
Date:   Sun Jul 14 11:42:29 2019 +0900

    Fixed a bug

のようにAuther名やEmailが付きますが、これらは自分で設定可能です。
ということは他人の名前やEmailを設定してcommitすることもできるため、なりすましが可能です。

GitHub上ではcommitにそういったなりすましではないことを保証するための仕組みとして署名をしたらVerifiedマークが付くようになってます。

Signing commits - GitHub Help

続きを読む