$30 off During Our Annual Pro Sale. View Details »

はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team

motemen
October 27, 2017

はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team

2017/10/27 モニタリング勉強会の資料です https://mackerel-ug.connpass.com/event/68478/

motemen

October 27, 2017
Tweet

More Decks by motemen

Other Decks in Technology

Transcript

  1. Mackerel in Hatena Platform Team
    2017-10-27

    View Slide

  2. id:motemen
    ● 株式会社はてな CTO
    ● 元 Mackerel ディレクター
    ● アプリケーションエンジニア
    ● Go と Git が好きです

    View Slide

  3. Mackerel とは

    View Slide

  4. History of Mackerel
    2007 はてな社内サーバ管理ツール
    2013 クラウドサーバ監視サービス 開発開始
    2014 Mackerel チーム結成
    2014-05 ベータリリース
    2014-09 正式リリース
    2016-06 連続リリース100週達成

    View Slide

  5. Mackerelにおいて、サービスとはホストを運用する上でもっとも大
    きな単位です。通常、複数のホストがそれぞれの「役割」(→ ロー
    ル)を担当し、協調しあってひとつのサービスを形づくります。関係
    しあうホストをひとつのサービスに属するものとしてまとめること
    で、ホストの管理・監視が容易になります。

    View Slide

  6. ロールはサービスに所属するホストをさらにその「役割」(アプリ
    ケーション、データベース、etc…)によって分類する概念です。
    Mackerelではホストの状況をロールごとにまとめて可視化すること
    ができます。

    View Slide

  7. App App App
    DB DB
    Web Web Web
    Batch
    Service

    View Slide

  8. mackerel-agent
    ● 各ホストで稼働する小さなプロセス
    ○ ホストを Mackerel に登録
    ○ 自動的に基本的なメトリックを投稿
    ● github.com/mackerelio/mackerel-agent

    View Slide

  9. View Slide

  10. Installing mackerel-agent
    ● mackerel-agent.conf
    ○ 追加のメトリック
    ○ カスタマイズされた監視
    ○ ホストに紐づくサービス/ロール
    wget -O - https://mackerel.io/file/script/setup-all-apt.sh | sh
    a

    View Slide

  11. API
    ● サービス・ロール一覧
    ● ホスト情報の取得・更新
    ● メトリック投稿・取得

    View Slide

  12. mkr
    ● github.com/mackerelio/mkr
    ● Mackerel API のコマンドラインインタフェース
    ○ mackerel-agent の動くホストなら API キー指定不要
    mkr hosts -s Hatena-Star -r db-slave | jq 'map(.name)'

    View Slide

  13. メトリック
    ● ホストメトリック
    ○ 1 ホストの稼働状況
    ○ ソフトウェアの状態
    ● サービスメトリック
    ○ サービスの稼働状況
    ○ ビジネス上のメトリック

    View Slide

  14. メトリック(ロール)
    ● ロール内のホストを
    ○ 比較
    ○ 積み上げ

    View Slide

  15. プラグイン
    ● github.com/mackerelio/mackerel-agent-plugins
    ● Linux (fork, netstat), inode
    ● Docker, Elasticsearch, fluentd, MySQL, nginx, ...
    ● AWS: CloudFront, DynamoDB, RDS, ...

    View Slide

  16. 監視
    ● ホストメトリック監視
    ● サービスメトリック監視
    ● チェック監視
    ● 外形監視
    ● 式監視

    View Slide

  17. 通知チャンネル
    ● さまざまな通知サービスに対応

    ● アラートだけでなく、Webから手動でグラフ画像の共有も

    View Slide

  18. 通知グループ
    ● 通知チャンネルとサービスを
    紐付ける
    ● チームのSlackチャンネルに、
    興味あるサービスのアラートを

    View Slide

  19. Mackerel in
    Hatena Platform
    Team

    View Slide

  20. 組織構造
    Op
    Team
    Dev
    Team 1
    Dev
    Team 2
    Dev
    Team 3
    Service B
    Service A
    Service C Service D

    View Slide

  21. サービスプラットフォームチーム
    ● ユーザ向けサービスの基盤
    ● と、古いサービス
    ● ほぼオンプレミス
    ● ビジョン: 既存のシステムの解体と再生
    ○ 現在はインフラ的な事情由来のタスクが主

    View Slide

  22. SPF: システム特性
    ● 巨大な・結合したモノリス
    ● 全貌の正確な理解は難しい
    ● Devs / Ops でともに理解しながら手なづけていく過程

    View Slide

  23. Devs と Ops のあいだ = Mackerel
    ● システムを観察する方法はさまざま
    ● その橋渡しとなるのが Mackerel
    ● 1 ウェブサービスが Mackerel 上の 1 サービスに対応

    View Slide

  24. アプリケーション / 外からの観察
    ● 外形監視
    ● サービスメトリック

    View Slide

  25. HTTP 外形監視
    ● 最低限の監視として
    ● SSL 証明書の有効期限監視も可能
    ● サービスに紐付ければ、レスポンスタイムの監視も

    View Slide

  26. HTTP レスポンス / サービスメトリック
    ● より詳しいステータス状況
    ● fluentd で収集・集計
    ○ fluent-plugin-mackerel
    ○ レイテンシ
    ■ average, 90/99 %ile
    ○ ステータスコード
    ■ percentage, count

    View Slide

  27. Platform-API サービス
    ● 複数のサービスに渡るAPIエンドポイントを一箇所に集約
    ● チームのAPIカタログに

    View Slide

  28. アプリケーション / 内からの観察
    ● ホスト死活
    ● ホストメトリック

    View Slide

  29. ホスト死活
    ● 最低限の監視として
    ● mackerel-agent が起動すると自動的に監視

    View Slide

  30. ホストメトリック
    ● ビルトイン: Loadavg, CPU%, Memory, Filesystem, ...
    ● OS やミドルウェアに合わせたカスタムメトリック
    ● 監視よりは観察用

    View Slide

  31. 静的なシステム理解
    ● アプリケーションのソースコード
    ● コードとして表現されたインフラ

    View Slide

  32. App
    Server Configuration
    Middleware Configuration
    Application Application
    Service
    App
    Devs
    Ops

    View Slide

  33. Service/Role 世界観
    ● リポジトリが Service/Role 対応
    ○ hatena/Hatena-Identity
    ● リポジトリ中のディレクトリが Service/Role 対応
    ○ nginx-config/Hatena-Identity/backend/nginx.conf
    ○ chef/cookbooks/service-identity/recipes/backend.rb

    View Slide

  34. 監視: 一般的なホストメトリック
    ● Connectivity
    ● Filesystem%
    ○ 特定の Service/Role では無効に

    View Slide

  35. 監視: ロール固有のメトリック
    ● db (MySQL)、worker (TheSchwartz)、…
    ● chefレシピでロールに合わせてカスタムメトリックも設定
    ● 監視の閾値は手でチューニング

    View Slide

  36. 監視: チェック監視
    ● ホスト上でアプリケーション/ミドルウェアが
    正しく稼働しているか?
    ● ミドルウェア設定ファイルの隣に配置

    View Slide

  37. その他
    ● イベントのグラフ投稿
    ○ Dev: デプロイ
    ○ Op: chef 適用
    ● mkr でサービス事情の監視
    ○ 旧: cron で DB 不整合の件数をメールで通知
    ○ 新: mkr throw でサービスメトリック投稿、監視閾値設定

    View Slide

  38. Example: Go App

    View Slide

  39. ● 既存 API の置き換え(Go)
    新規開発の例: APIサーバ
    DB app nginx front nginx

    View Slide

  40. 設定した監視ポイント
    ● 外形監視(レスポンスボディチェック)
    ● nginx - app 間通信(専用エンドポイント + check-http)
    ● app - DB 間通信(専用エンドポイント + check-http)
    ● nginx: カスタムメトリック(mackerel-plugin-nginx)
    ● app: カスタムメトリック(mackerel-plugin-gostats)
    ● おまけ: app-version チェック

    View Slide

  41. ● 旧システムで、ロール全体の CPU% 減少
    ● ホスト数も削減
    ○ 積み上げグラフで、台数を抽象化
    置き換え後

    View Slide

  42. 非エンジニアとの会話にもグラフ

    View Slide

  43. App
    Server Configuration
    Middleware Configuration
    Application Application
    Service
    App Devs
    Ops
    KPI, Cost
    Business

    View Slide

  44. Mackerel を使ってみて
    ● Devs と Ops でシステムを理解していくための場
    ● Service/Role 世界観による情報整理
    ● Mackerel is for ...
    ○ サーバ監視
    ○ サーバ管理
    ○ チームビルド

    View Slide

  45. View Slide