開発者と監視
TIME rest time current/total
TopicsPlaceHolder

開発者と監視

Mackerel Monitoring Seminar in Mercari

Nov 28th, 2017

Profile

songmu

Mackerel本発売中

最近出た注目機能

イベント機能

ホストステータスの変更などのイベントを通知チャンネルに通知できるように

サードパーティプラグインインストール機能

独自プラグイン作成・導入を支援する機能


https://mackerel.io/ja/blog/entry/feature/20171116

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等で使われている

プラグインの書き方

以下をご参照ください

開発者と監視

開発者と監視

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

開発者こそ監視する

様々な不安

監視しながら開発する

監視の口を開ける?

監視の口を開けることについて


https://metacpan.org/pod/Gearman::Starter

監視の口を開けたのはkazeburoさん


http://blog.nomadscafe.jp/2010/07/gearman-worker-process.html

監視の口を開けてもらう活動(h2oの場合)

監視の口を開けてもらう活動(h2oの場合)

ケーススタディ

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


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監視デーモンを作成

外形監視の計測

バッチの監視

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

ISUCON6予選運営の話

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

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


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

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


(おまけ)キューの数


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


有用な独自プラグインを作ったら

(改めて)サードパーティプラグインインストール機能

独自プラグイン作成・導入を支援する機能


https://mackerel.io/ja/blog/entry/feature/20171116

コントリビュートをお待ちしていています

  1. GitHubに上げる
  2. プラグインパッケージをGitHub Releasesにアップロードする
  3. https://github.com/mackerelio/plugin-registry に登録(pull requestを送る)

https://mackerel.io/ja/blog/entry/feature/20171116

以上

まとめ