Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はてなサービスプラットフォームチームにおける Mackerel / Mackerel in H...
Search
motemen
October 27, 2017
Technology
1
1.2k
はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team
2017/10/27 モニタリング勉強会の資料です
https://mackerel-ug.connpass.com/event/68478/
motemen
October 27, 2017
Tweet
Share
More Decks by motemen
See All by motemen
はてなのエンジニアリングマネジメント、これまでとこれから / Engineering Management in Hatena, Hatena Engineer Seminar 26
motemen
2
1.9k
入門 Bubble Tea
motemen
1
770
ソフトウェア開発と私 / Software Development and I
motemen
13
6.6k
はてなシステムの考古学 / History of development at Hatena
motemen
3
300k
Reading Go Tools - GoCon 2016 Spring
motemen
5
2.8k
Diff'ing Go library API changes
motemen
4
2.6k
Gore: A Tale of Go REPL
motemen
8
6k
はてな技術部紹介 2015(公開版) / Hatena Technical Division Orientation 2015 (Public Edition)
motemen
6
21k
Workflow at Hatena Mackerel Team
motemen
9
7k
Other Decks in Technology
See All in Technology
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
240
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
210
IAMのマニアックな話2025
nrinetcom
PRO
3
440
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.2k
Fraxinus00tw assembly manual
fukumay
0
100
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
180
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
160
クラウド食堂とは?
hiyanger
0
110
What's new in Go 1.24?
ciarana
1
110
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
分解して理解する Aspire
nenonaninu
2
1.1k
いまからでも遅くない!コンテナでWebアプリを動かしてみよう!コンテナハンズオン編
nomu
0
150
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
The Cult of Friendly URLs
andyhume
78
6.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
990
YesSQL, Process and Tooling at Scale
rocio
172
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Music & Morning Musume
bryan
46
6.4k
How to train your dragon (web standard)
notwaldorf
91
5.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Visualization
eitanlees
146
15k
Transcript
Mackerel in Hatena Platform Team 2017-10-27
id:motemen • 株式会社はてな CTO • 元 Mackerel ディレクター • アプリケーションエンジニア
• Go と Git が好きです
Mackerel とは
History of Mackerel 2007 はてな社内サーバ管理ツール 2013 クラウドサーバ監視サービス 開発開始 2014 Mackerel
チーム結成 2014-05 ベータリリース 2014-09 正式リリース 2016-06 連続リリース100週達成
Mackerelにおいて、サービスとはホストを運用する上でもっとも大 きな単位です。通常、複数のホストがそれぞれの「役割」(→ ロー ル)を担当し、協調しあってひとつのサービスを形づくります。関係 しあうホストをひとつのサービスに属するものとしてまとめること で、ホストの管理・監視が容易になります。
ロールはサービスに所属するホストをさらにその「役割」(アプリ ケーション、データベース、etc…)によって分類する概念です。 Mackerelではホストの状況をロールごとにまとめて可視化すること ができます。
App App App DB DB Web Web Web Batch Service
mackerel-agent • 各ホストで稼働する小さなプロセス ◦ ホストを Mackerel に登録 ◦ 自動的に基本的なメトリックを投稿 •
github.com/mackerelio/mackerel-agent
None
Installing mackerel-agent • mackerel-agent.conf ◦ 追加のメトリック ◦ カスタマイズされた監視 ◦ ホストに紐づくサービス/ロール
wget -O - https://mackerel.io/file/script/setup-all-apt.sh | sh a
API • サービス・ロール一覧 • ホスト情報の取得・更新 • メトリック投稿・取得
mkr • github.com/mackerelio/mkr • Mackerel API のコマンドラインインタフェース ◦ mackerel-agent の動くホストなら
API キー指定不要 mkr hosts -s Hatena-Star -r db-slave | jq 'map(.name)'
メトリック • ホストメトリック ◦ 1 ホストの稼働状況 ◦ ソフトウェアの状態 • サービスメトリック
◦ サービスの稼働状況 ◦ ビジネス上のメトリック
メトリック(ロール) • ロール内のホストを ◦ 比較 ◦ 積み上げ
プラグイン • github.com/mackerelio/mackerel-agent-plugins • Linux (fork, netstat), inode • Docker,
Elasticsearch, fluentd, MySQL, nginx, ... • AWS: CloudFront, DynamoDB, RDS, ...
監視 • ホストメトリック監視 • サービスメトリック監視 • チェック監視 • 外形監視 •
式監視
通知チャンネル • さまざまな通知サービスに対応 ◦ • アラートだけでなく、Webから手動でグラフ画像の共有も
通知グループ • 通知チャンネルとサービスを 紐付ける • チームのSlackチャンネルに、 興味あるサービスのアラートを
Mackerel in Hatena Platform Team
組織構造 Op Team Dev Team 1 Dev Team 2 Dev
Team 3 Service B Service A Service C Service D
サービスプラットフォームチーム • ユーザ向けサービスの基盤 • と、古いサービス • ほぼオンプレミス • ビジョン: 既存のシステムの解体と再生
◦ 現在はインフラ的な事情由来のタスクが主
SPF: システム特性 • 巨大な・結合したモノリス • 全貌の正確な理解は難しい • Devs / Ops
でともに理解しながら手なづけていく過程
Devs と Ops のあいだ = Mackerel • システムを観察する方法はさまざま • その橋渡しとなるのが
Mackerel • 1 ウェブサービスが Mackerel 上の 1 サービスに対応
アプリケーション / 外からの観察 • 外形監視 • サービスメトリック
HTTP 外形監視 • 最低限の監視として • SSL 証明書の有効期限監視も可能 • サービスに紐付ければ、レスポンスタイムの監視も
HTTP レスポンス / サービスメトリック • より詳しいステータス状況 • fluentd で収集・集計 ◦
fluent-plugin-mackerel ◦ レイテンシ ▪ average, 90/99 %ile ◦ ステータスコード ▪ percentage, count
Platform-API サービス • 複数のサービスに渡るAPIエンドポイントを一箇所に集約 • チームのAPIカタログに
アプリケーション / 内からの観察 • ホスト死活 • ホストメトリック
ホスト死活 • 最低限の監視として • mackerel-agent が起動すると自動的に監視
ホストメトリック • ビルトイン: Loadavg, CPU%, Memory, Filesystem, ... • OS
やミドルウェアに合わせたカスタムメトリック • 監視よりは観察用
静的なシステム理解 • アプリケーションのソースコード • コードとして表現されたインフラ
App Server Configuration Middleware Configuration Application Application Service App Devs
Ops
Service/Role 世界観 • リポジトリが Service/Role 対応 ◦ hatena/Hatena-Identity • リポジトリ中のディレクトリが
Service/Role 対応 ◦ nginx-config/Hatena-Identity/backend/nginx.conf ◦ chef/cookbooks/service-identity/recipes/backend.rb
監視: 一般的なホストメトリック • Connectivity • Filesystem% ◦ 特定の Service/Role では無効に
監視: ロール固有のメトリック • db (MySQL)、worker (TheSchwartz)、… • chefレシピでロールに合わせてカスタムメトリックも設定 • 監視の閾値は手でチューニング
監視: チェック監視 • ホスト上でアプリケーション/ミドルウェアが 正しく稼働しているか? • ミドルウェア設定ファイルの隣に配置
その他 • イベントのグラフ投稿 ◦ Dev: デプロイ ◦ Op: chef 適用
• mkr でサービス事情の監視 ◦ 旧: cron で DB 不整合の件数をメールで通知 ◦ 新: mkr throw でサービスメトリック投稿、監視閾値設定
Example: Go App
• 既存 API の置き換え(Go) 新規開発の例: APIサーバ DB app nginx front
nginx
設定した監視ポイント • 外形監視(レスポンスボディチェック) • nginx - app 間通信(専用エンドポイント + check-http)
• app - DB 間通信(専用エンドポイント + check-http) • nginx: カスタムメトリック(mackerel-plugin-nginx) • app: カスタムメトリック(mackerel-plugin-gostats) • おまけ: app-version チェック
• 旧システムで、ロール全体の CPU% 減少 • ホスト数も削減 ◦ 積み上げグラフで、台数を抽象化 置き換え後
非エンジニアとの会話にもグラフ
App Server Configuration Middleware Configuration Application Application Service App Devs
Ops KPI, Cost Business
Mackerel を使ってみて • Devs と Ops でシステムを理解していくための場 • Service/Role 世界観による情報整理
• Mackerel is for ... ◦ サーバ監視 ◦ サーバ管理 ◦ チームビルド
None