Slide 1

Slide 1 text

Mackerel in Hatena Platform Team 2017-10-27

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Mackerel とは

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

App App App DB DB Web Web Web Batch Service

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Mackerel in Hatena Platform Team

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

App Server Configuration Middleware Configuration Application Application Service App Devs Ops

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Example: Go App

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

No content