Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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