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 Hatena Platform Team
Search
motemen
October 27, 2017
Technology
1
980
はてなサービスプラットフォームチームにおける 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.7k
入門 Bubble Tea
motemen
1
570
ソフトウェア開発と私 / Software Development and I
motemen
13
6.3k
はてなシステムの考古学 / History of development at Hatena
motemen
3
300k
Reading Go Tools - GoCon 2016 Spring
motemen
5
2.6k
Diff'ing Go library API changes
motemen
4
2.5k
Gore: A Tale of Go REPL
motemen
8
5.6k
はてな技術部紹介 2015(公開版) / Hatena Technical Division Orientation 2015 (Public Edition)
motemen
5
19k
Workflow at Hatena Mackerel Team
motemen
9
6.7k
Other Decks in Technology
See All in Technology
【OpsJAWS】EC2 のセキュリティの運用と監視について考えてみた件
hssh2_bin
4
590
【OpenAI本出版記念】npakaによるOpenAI最新技術情報と技術情報キャッチアップ術
npaka
8
1.5k
PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう
zeriyoshi
0
770
新卒1年目がプロジェクトを進めるときにコケたポイント
ryunakayama
1
110
10年モノのレガシーPHPアプリケーションを移植しきるまでの泥臭くも長い軌跡 / legacy-php-app-migration
toshimaru
0
710
MLOpsのエッセンスを取り⼊れて評価 pipelineを再構築している件
sansantech
PRO
1
230
二刀流でWinActorを活用してみた話
tamai_63
0
120
OCI Data Science Service 製品概要
oracle4engineer
PRO
0
110
S3成長記録@Storage-JAWS#3
p0n
0
130
滑空スポーツ講習会2023 航空安全講習会 第4回 日常整備に役立ちそうな雑情報 / JSA Safety Seminar 2023 glider maintenance
jsaseminar
0
110
「わたしたちのコード」を安定させるためにフレームワークとの距離を保つ / phperkaigi2024
blue_goheimochi
5
810
パフォーマンスを改善するには仕様変更が1番はやい
yamamotohiroya
12
4.6k
Featured
See All Featured
Designing Experiences People Love
moore
135
23k
Web development in the modern age
philhawksworth
201
10k
Visualization
eitanlees
135
14k
Debugging Ruby Performance
tmm1
68
11k
BBQ
matthewcrist
78
8.7k
The Pragmatic Product Professional
lauravandoore
24
5.7k
Practical Orchestrator
shlominoach
180
9.6k
Music & Morning Musume
bryan
39
5.4k
A Tale of Four Properties
chriscoyier
150
22k
Building Effective Engineering Teams - LeadDev
addyosmani
25
1.6k
Navigating Team Friction
lara
177
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
1.9k
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