監視 入門 ~ マイクロサービス時代の監視設計
TIME rest time current/total
TopicsPlaceHolder

監視 入門 ~ マイクロサービス時代の監視設計

Rancher Meetup Tokyo 18

Mar 19th, 2019

Profile

songmu

Mackerel

Mackerel

【宣伝】書籍発売中

【宣伝】みんなのGo言語

【宣伝】入門 監視

【宣伝】エンジニア積極採用中です!

本編

Agenda

監視とテスト

監視とは継続的なテストである
~ 奥一穂
http://developer.cybozu.co.jp/archives/kazuho/2010/01/cronlog-52f2.html

監視とは本来システムに対する継続的なインテグレーションである

テストと監視

監視に対する抵抗感

モニタリングの重要性の向上

すべてのサービスで健全性と一般的な監視関連のメトリックを同じように出力することをおすすめします。(中略) どれを選んでも、標準化するようにしてください。

監視とはシステムに対する高速健康診断

一般的な健康診断

監視は難しくない

何を監視すれば良いのかを考える

監視のコード化

監視のコード化

監視プラグインフォーマットは大きく分けて2つ

チェック監視

Nagios/Sensu/Consul/Mackerelとかで使われている

メトリック監視

時系列データの

を空白区切りで出力する

% ./battery.pl
macbook.pmset.ib0       73      1467427252

Sensu/Graphite/Mackerel等で使われている

healthエンドポイントパターン

Health Check Response Format for HTTP APIs

標準的なJSONレスポンスフォーマットが議論中。

OpenMetrics

Prometheus Exporterで使われているテキストフォーマット

healthエンドポイントを開けてもらう活動(h2oの場合)

healthエンドポイントを開けてもらう活動(h2oの場合)

開発者と監視

テスト駆動開発に学ぶ

テスト駆動開発は、プログラミング中の不安をコントロールする手法だ
~「テスト駆動開発」まえがき

開発者こそ監視する

様々な不安

監視しながら開発する

マイクロサービス時代における監視

マイクロサービス時代における監視設計

監視も同時に設計する

マイクロサービス時代にはそれぞれが独自ミドルウェア的なコンポーネント群になるのが望ましい。

幾つかのヒント

The Four Golden Signals in SRE Book

SRE本

USE Method

http://www.brendangregg.com/usemethod.html

内部の状態に着目 → ブラックボックス的
「詳解システムパフォーマンス」でも言及

RED Method

https://www.slideshare.net/weaveworks/monitoring-microservices

外部からの振る舞いに着目 → ホワイトボックス的

USEとRED

それぞれ補完しあうものである

USEとREDを捉えることで、Four Golden Signalsが見えてくる。

改めてThe Four Golden Signals

USEとREDが網羅されている。

SaturationとUtilizationを分離したほうが良いかもしれないが、おそらくホワイトボックス的なふるまい(RED)のほうが重要なのでSaturationにまとめられていると想像。

例: ある認証コンポーネント

【補足】監視パラダイムの変遷

Mackerelコンテナエージェントの話

Mackerelコンテナエージェント

Mackerelコンテナエージェントの特徴

kubernetesへの設定の様子

ロールグラフの様子

Mackerelコンテナエージェントの今後

以上

ケーススタディ

サーバレスアーキテクチャによる時系列データベースの構築と監視


https://speakerdeck.com/itchyny/serverlessconf-tokyo-2017

goroutineリークをリリース前に気づいた話

mackerel-plugin-gostats

fukata/golang-stats-api-handler

以下のように監視エンドポイントを生やす事が可能

http.HandleFunc("/api/stats", stats_api.Handler)

メトリックをJSONで取得

% curl -s http://127.0.0.1:8080/api/stats
{
  "time": 1511951792854050800,
  "go_version": "go1.9.1",
  "go_os": "linux",
  "go_arch": "amd64",
  "cpu_num": 1,
  "goroutine_num": 548,
  "gomaxprocs": 1,
  "cgo_call_num": 1,
  "memory_alloc": 19287544,
  "memory_total_alloc": 16883888738024,
  "memory_sys": 57522424,
  "memory_lookups": 1181603172,
  "memory_mallocs": 197996257029,
  "memory_frees": 197996111866,
  "memory_stack": 5210112,
  "heap_alloc": 19287544,
  "heap_sys": 45121536,
  "heap_idle": 15785984,
  "heap_inuse": 29335552,
  "heap_released": 0,
  "heap_objects": 145163,
  "gc_next": 26308000,
  "gc_last": 1511951770432061000,
  "gc_num": 1422876,
  "gc_per_second": 0.5930361979107467,
  "gc_pause_per_second": 0.792662,
  "gc_pause": [
    0.090007,
    0.030134,
    0.031483,
    0.030759,
    0.039025,
    0.096764,
    0.053129,
    0.031492,
    0.053069,
    0.034587,
    0.034232,
    0.022605,
    0.027835,
    0.022133,
    0.049394,
    0.042198,
    0.025538,
    0.029074,
    0.049204
  ]
}

goroutineリークの発覚

外形監視システム監視デーモンを書いた話

Mackerelの外形監視のアーキテクチャ

Mackerelの外形監視のアーキテクチャ

■要件

Redis監視デーモンを作成

外形監視の計測

バッチの監視

バッチの実行時間を監視する

バッチの実行成功可否を監視する

mkr wrap

ISUCON6予選運営の話

ベンチマークワーカーの監視

素朴なチェックスクリプトでベンチマーカーの突然死を監視


ベンチマーカーキューの監視

実行中のベンチマーカー数と、実行待ち状態のベンチマーカー数を監視

(おまけ)キューの数

(おまけ)ワーカー群のCPU利用率積み上げ

グラフマニア垂涎