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
メトリックはいかにして 見え續ける樣になったか .。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆) 2022/07 DevelopersIO 2022 1
Slide 2
Slide 2 text
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆) id:ne-sachirou @ 株式会社はてな Mackerel のアプリケーションエンジニア curl -sI https://mackerel.io | grep X-Recruitment 2
Slide 3
Slide 3 text
Mackerel とは? 3
Slide 4
Slide 4 text
4
Slide 5
Slide 5 text
5 メトリック ホストグラフ
Slide 6
Slide 6 text
6 メトリック ロールグラフ メトリック
Slide 7
Slide 7 text
7
Slide 8
Slide 8 text
2021/09/13 以前 8 退役したホストのメトリックは 見られなくなる (※カスタムメトリックのみ)
Slide 9
Slide 9 text
2021/09/13 以後 9 退役してもカスタムメトリック が見られる
Slide 10
Slide 10 text
2021/09/13 以後 10 退役してもカスタムメトリック が見られる How?
Slide 11
Slide 11 text
11 mackerel-agent plugin システムメトリック カスタムメトリック
Slide 12
Slide 12 text
12 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック ホストメトリックと ロールメトリックを 組み合はせて表示する
Slide 13
Slide 13 text
13 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック カスタムメトリックは? ホストメトリックと ロールメトリックを 組み合はせて表示する
Slide 14
Slide 14 text
14 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック カスタムメトリックは? ホストメトリックと ロールメトリックを 組み合はせて表示する (代案を比較した結果) カスタムメトリックも システムメトリックと 同じ樣に保存しよう
Slide 15
Slide 15 text
15 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ロールグラフ用のカスタムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック ホストメトリックと ロールメトリックを 組み合はせて表示する
Slide 16
Slide 16 text
いかにして ホストメトリックと ロールメトリックを うまく組み合はせるか? 16
Slide 17
Slide 17 text
17 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ロールグラフ用のカスタムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック ホストメトリックと ロールメトリックを 組み合はせて表示する How?
Slide 18
Slide 18 text
システムメトリックの場合 18 ロールメトリック 今在るホストの ホストメトリック 今在るホストは? どんな ロールメトリック が在る? 時系列 DB (diamond)
Slide 19
Slide 19 text
システムメトリックの場合 19 ロールメトリック 今在るホストの ホストメトリック 今在るホストは? どんな ロールメトリック が在る? 時系列 DB (diamond) 對應する 對應する
Slide 20
Slide 20 text
システムメトリックの場合 20 ロールメトリック 今在るホストの ホストメトリック 今在るホストは? どんな ロールメトリック が在る? 時系列 DB (diamond) ユーザーが 増やせる 仕組みでない
Slide 21
Slide 21 text
21 ロールID ロールメトリック名 0 custom.a.2 1 custom.b.1 … … ホストID ホストメトリック名 1 custom.a.1 1 custom.b.1 ロール 追 加 退 役 ホストID ホストメトリック名 0 custom.a.1 0 custom.a.2
Slide 22
Slide 22 text
カスタムメトリックの場合 22 22 今在るホストの ホストメトリック 今在るホストは? 時系列 DB (diamond)
Slide 23
Slide 23 text
カスタムメトリックの場合 23 23 今在るホストの ホストメトリック 今在るホストは? どんな ロールメトリック が在る? 時系列 DB (diamond) どんなロールメト リックが在るかわ からない
Slide 24
Slide 24 text
24 ロールID ロールメトリック名 0 custom.a.2 1 custom.b.1 … … ホストID ホストメトリック名 1 custom.a.1 1 custom.b.1 ロール 追 加 退 役 ホストID ホストメトリック名 0 custom.a.1 0 custom.a.2 最近のホストを集 めればロール全体 のメトリックと極 端には異ならない ≒ 近似でき る
Slide 25
Slide 25 text
カスタムメトリックの場合 25 25 ロールメトリック 今在るホストの ホストメトリック 今在るホストは? 今在るホスト または最近退役した ホストの カスタムメトリック ≒ ロールメトリック 時系列 DB (diamond)
Slide 26
Slide 26 text
カスタムメトリックの場合 26 26 ロールメトリック 今在るホストの ホストメトリック 今在るホストは? 今在るホスト または最近退役した ホストの カスタムメトリック ≒ ロールメトリック 時系列 DB (diamond) OK
Slide 27
Slide 27 text
書き込み負荷は大丈夫か? 27
Slide 28
Slide 28 text
28 時系列 DB (diamond) メトリック ロールグラフ用のシステムメトリック ロールグラフ用のカスタムメトリック ホストグラフ用のシステムメトリック ホストグラフ用のカスタムメトリック ホストメトリックと ロールメトリックを 組み合はせて表示する 書き込み負荷は大丈夫か?
Slide 29
Slide 29 text
2021 年某日、負荷調査の爲に 一部のカスタムメトリックを ロールメトリックにも書き込み開始 29
Slide 30
Slide 30 text
30 時系列 DB (diamond) の使ふ Redis Cluster の cpu.engine が 100% に (※簡略表示してゐます)
Slide 31
Slide 31 text
時系列 DB (diamond) の仕組み 31 書き込み 讀み出し まづ Redis Cluster へ 書き込む 古い世代のメトリックを DynamoDB へ移す 更新されなくなった メトリックを DynamoDB へ 移す TTL の切れた メトリックを S3 へ 移す
Slide 32
Slide 32 text
時系列 DB (diamond) の仕組み 32 書き込み 讀み出し まづ Redis Cluster へ 書き込む 古い世代のメトリックを DynamoDB へ移す 更新されなくなった メトリックを DynamoDB へ 移す TTL の切れた メトリックを S3 へ 移す
Slide 33
Slide 33 text
時系列 DB (diamond) の仕組み Redis Cluster ● 複數臺の Redis node に key に從って data を分散 する ● key を x{y}z とすると y の所 (hash tag) だけを見 て保存する node を決める ○ 同時に讀み書きする data を同じ node に保存すると高 performence 33
Slide 34
Slide 34 text
34 (簡略表示してゐますが) cpu.engine が 100% にまで上がったのは 1 node だけ data が分散されず大きく偏った → node を増やしても解決しない
Slide 35
Slide 35 text
ロールメトリックの舊 key の構造 {オーガニゼーションID.r.1.サービスID}.ロールID.スロット番號.メトリック名 ● オーガニゼーション : サービスはオーガニゼーションに屬する ● サービス : ロールはサービスに屬する ● ロール : ホストはロールに屬する ○ ホスト∈ロール∈サービス∈オーガニゼーション ● スロット番號 : ホストに對應する。ホストが退役するとロール內で再利用される 35
Slide 36
Slide 36 text
ロールメトリックの舊 key の構造 {オーガニゼーションID.r.1.サービスID}.ロールID.スロット番號.メトリック名 數千臺ホストのあるサービスのカスタムメトリックが同じ Redis node に讀み書 きされる🔥 36
Slide 37
Slide 37 text
ロールメトリックの新 key の構造 {オーガニゼーションID.r.1.サービスID.ロールID.スロット番號}.メトリック名 スロット番號はホストに對應するから、ホスト毎にカスタムメトリックを保存す る Redis node が決められる 37
Slide 38
Slide 38 text
ロールメトリックの新 key の構造 {オーガニゼーションID.r.1.サービスID.ロールID.スロット番號}.メトリック名 Q. key の形を變へて大丈夫? A. ● Redis Cluster は 1 週閒程しかメトリックが保存されないので頑張って移行 できる ● DynamoDB へ移す前、ECS で讀み出した後に hash tag の {} を取り除くの で、Redis Cluster の外には影響しない 38
Slide 39
Slide 39 text
ロールメトリックの新 key の構造 {オーガニゼーションID.r.1.サービスID}.ロールID.スロット番號.メトリック名 ↓ {オーガニゼーションID.r.1.サービスID.ロールID.スロット番號}.メトリック名 39 移行しませう (長時閒の downtime 無しで)
Slide 40
Slide 40 text
ロールメトリックの新 key の構造 {オーガニゼーションID.r.1.サービスID}.ロールID.スロット番號.メトリック名 ↓ {オーガニゼーションID.r.1.サービスID.ロールID.スロット番號}.メトリック名 40 移行しませう (長時閒の downtime 無しで) How?
Slide 41
Slide 41 text
時系列 DB (diamond) の仕組み 41 まづ Redis Cluster へ 書き込む 古い世代のメトリックを DynamoDB へ移す 更新されなくなった メトリックを DynamoDB へ 移す Redis Cluster に觸るのはこの 3 箇所
Slide 42
Slide 42 text
時系列 DB (diamond) の仕組み 42 まづ Redis Cluster へ 書き込む 古いメトリックを DynamoDB へ移す (1 週閒程で) 讀み出し
Slide 43
Slide 43 text
移行手順 43
Slide 44
Slide 44 text
移行手順 44 もう 1 臺 Redis Cluster を立てる 舊 新
Slide 45
Slide 45 text
移行手順 45 舊 新 掃除だけする
Slide 46
Slide 46 text
移行手順 46 舊 新 新しい key で、ロール グラフ用のカスタムメ トリックも含めて書き 込む node 數を 調整する
Slide 47
Slide 47 text
移行手順 47 舊 新 merge して DynamoDB に移す
Slide 48
Slide 48 text
移行手順 48 舊 新 兩書き込み開始以後の data だけ になるまで 1 週閒超待った
Slide 49
Slide 49 text
移行手順 49 舊 新 新しい Redis Cluster を 本番として使ふ
Slide 50
Slide 50 text
移行手順 50 舊 新 掃除だけする
Slide 51
Slide 51 text
移行手順 51 舊 新 書き込みをやめる
Slide 52
Slide 52 text
移行手順 52 舊 新 掃除もやめる
Slide 53
Slide 53 text
移行手順 53 新 古い Redis Cluster を消 す
Slide 54
Slide 54 text
移行手順 54 新 OK
Slide 55
Slide 55 text
55 退役してもカスタムメトリック が見られる
Slide 56
Slide 56 text
56 退役してもカスタムメトリック が見られる Done