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

9b741203feda475cbeae8b384de9f415?s=47 motemen
October 27, 2017

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

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

9b741203feda475cbeae8b384de9f415?s=128

motemen

October 27, 2017
Tweet

Transcript

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

  2. id:motemen • 株式会社はてな CTO • 元 Mackerel ディレクター • アプリケーションエンジニア

    • Go と Git が好きです
  3. Mackerel とは

  4. History of Mackerel 2007 はてな社内サーバ管理ツール 2013 クラウドサーバ監視サービス 開発開始 2014 Mackerel

    チーム結成 2014-05 ベータリリース 2014-09 正式リリース 2016-06 連続リリース100週達成
  5. Mackerelにおいて、サービスとはホストを運用する上でもっとも大 きな単位です。通常、複数のホストがそれぞれの「役割」(→ ロー ル)を担当し、協調しあってひとつのサービスを形づくります。関係 しあうホストをひとつのサービスに属するものとしてまとめること で、ホストの管理・監視が容易になります。

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

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

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

    github.com/mackerelio/mackerel-agent
  9. None
  10. Installing mackerel-agent • mackerel-agent.conf ◦ 追加のメトリック ◦ カスタマイズされた監視 ◦ ホストに紐づくサービス/ロール

    wget -O - https://mackerel.io/file/script/setup-all-apt.sh | sh a
  11. API • サービス・ロール一覧 • ホスト情報の取得・更新 • メトリック投稿・取得

  12. mkr • github.com/mackerelio/mkr • Mackerel API のコマンドラインインタフェース ◦ mackerel-agent の動くホストなら

    API キー指定不要 mkr hosts -s Hatena-Star -r db-slave | jq 'map(.name)'
  13. メトリック • ホストメトリック ◦ 1 ホストの稼働状況 ◦ ソフトウェアの状態 • サービスメトリック

    ◦ サービスの稼働状況 ◦ ビジネス上のメトリック
  14. メトリック(ロール) • ロール内のホストを ◦ 比較 ◦ 積み上げ

  15. プラグイン • github.com/mackerelio/mackerel-agent-plugins • Linux (fork, netstat), inode • Docker,

    Elasticsearch, fluentd, MySQL, nginx, ... • AWS: CloudFront, DynamoDB, RDS, ...
  16. 監視 • ホストメトリック監視 • サービスメトリック監視 • チェック監視 • 外形監視 •

    式監視
  17. 通知チャンネル • さまざまな通知サービスに対応 ◦ • アラートだけでなく、Webから手動でグラフ画像の共有も

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

  19. Mackerel in Hatena Platform Team

  20. 組織構造 Op Team Dev Team 1 Dev Team 2 Dev

    Team 3 Service B Service A Service C Service D
  21. サービスプラットフォームチーム • ユーザ向けサービスの基盤 • と、古いサービス • ほぼオンプレミス • ビジョン: 既存のシステムの解体と再生

    ◦ 現在はインフラ的な事情由来のタスクが主
  22. SPF: システム特性 • 巨大な・結合したモノリス • 全貌の正確な理解は難しい • Devs / Ops

    でともに理解しながら手なづけていく過程
  23. Devs と Ops のあいだ = Mackerel • システムを観察する方法はさまざま • その橋渡しとなるのが

    Mackerel • 1 ウェブサービスが Mackerel 上の 1 サービスに対応
  24. アプリケーション / 外からの観察 • 外形監視 • サービスメトリック

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

  26. HTTP レスポンス / サービスメトリック • より詳しいステータス状況 • fluentd で収集・集計 ◦

    fluent-plugin-mackerel ◦ レイテンシ ▪ average, 90/99 %ile ◦ ステータスコード ▪ percentage, count
  27. Platform-API サービス • 複数のサービスに渡るAPIエンドポイントを一箇所に集約 • チームのAPIカタログに

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

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

  30. ホストメトリック • ビルトイン: Loadavg, CPU%, Memory, Filesystem, ... • OS

    やミドルウェアに合わせたカスタムメトリック • 監視よりは観察用
  31. 静的なシステム理解 • アプリケーションのソースコード • コードとして表現されたインフラ

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

    Ops
  33. Service/Role 世界観 • リポジトリが Service/Role 対応 ◦ hatena/Hatena-Identity • リポジトリ中のディレクトリが

    Service/Role 対応 ◦ nginx-config/Hatena-Identity/backend/nginx.conf ◦ chef/cookbooks/service-identity/recipes/backend.rb
  34. 監視: 一般的なホストメトリック • Connectivity • Filesystem% ◦ 特定の Service/Role では無効に

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

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

  37. その他 • イベントのグラフ投稿 ◦ Dev: デプロイ ◦ Op: chef 適用

    • mkr でサービス事情の監視 ◦ 旧: cron で DB 不整合の件数をメールで通知 ◦ 新: mkr throw でサービスメトリック投稿、監視閾値設定
  38. Example: Go App

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

    nginx
  40. 設定した監視ポイント • 外形監視(レスポンスボディチェック) • nginx - app 間通信(専用エンドポイント + check-http)

    • app - DB 間通信(専用エンドポイント + check-http) • nginx: カスタムメトリック(mackerel-plugin-nginx) • app: カスタムメトリック(mackerel-plugin-gostats) • おまけ: app-version チェック
  41. • 旧システムで、ロール全体の CPU% 減少 • ホスト数も削減 ◦ 積み上げグラフで、台数を抽象化 置き換え後

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

  43. App Server Configuration Middleware Configuration Application Application Service App Devs

    Ops KPI, Cost Business
  44. Mackerel を使ってみて • Devs と Ops でシステムを理解していくための場 • Service/Role 世界観による情報整理

    • Mackerel is for ... ◦ サーバ監視 ◦ サーバ管理 ◦ チームビルド
  45. None