SlideShare a Scribd company logo
1 of 69
Download to read offline
Copyright © GREE, Inc. All Rights Reserved.
sysloadや監視などの話(仮)
Takanori Sejima
Copyright © GREE, Inc. All Rights Reserved.
自己紹介
● わりとMySQLのひと
● 3.23.58 から使ってる
● むかしは Resource Monitoring も力入れてやってた
● ganglia & rrdcached の(たぶん)ヘビーユーザ
● 2010年くらいから使い始めた
● gmond は素のまま使ってる
● gmetad は欲しい機能がなかったので patch 書いた
● webfrontend はほぼ書き直した
● あとはひたすら python module 書いた
● ganglia じゃなくても良かったんだけど、とにかく rrdcached を使いたかった
● というわけで、自分は Monitoring を大事にする
● 一時期は Flare という OSS の bugfix などもやってた
● むかしあげたslideなど
● https://www.slideshare.net/takanorisejima
2
Copyright © GREE, Inc. All Rights Reserved.
● 今日はその Resource Monitoring の話などしようと思います。
● ざっくりいうと、長いことやってれば学ぶことも多くあるし、長いことやってる
ことで問題もある、そんな話です。
● 今回はほとんどMySQLの話はありません。
● 自分でゴリゴリ monitoring 関係のコード書いてたのは、2014年くらい
までかなぁと思います、それ以降もちょくちょく metric 追加してますが。
● ここ数年、細かいところは、優秀な若手たちが頑張ってくれてます。
本日のお話
3
Copyright © GREE, Inc. All Rights Reserved.
● かつて sysload という metric を作ったのですが、それに纏わる話など
します。
● gree/sysload
● 6年くらい前に自作した metric がそこそこ有用だと思うので、OSSで公開します
本日のお話の補足資料
4
Copyright © GREE, Inc. All Rights Reserved.
● 2010年以前の弊社の resource monitoring
● gangliaをどう改造したのか?
● 次なる課題
● そこでsysload
● 当時、monitoring system 自作したのはなぜか
● 仮に、今ならばSaaSで置き換えられるのか
● 2010年ごろから長く使い続けて、見えてくるもの
● 継続的な monitoring は、エンジニアにとって学びの機会
● 新たな課題
Agenda
5
Copyright © GREE, Inc. All Rights Reserved.
はじめに
6
Copyright © GREE, Inc. All Rights Reserved.
● ganglia 以前は cacti を拡張した仕組みが動いてました。
● 大規模インフラの監視システム
● たいへんよくできてたんですけど、いくつか課題があったので。
● 2010年に入社したわたしが、新しい monitoring system を作ることに
なりました。
2010年以前の弊社の resource monitoring
7
Copyright © GREE, Inc. All Rights Reserved.
● (監視対象のサーバが多すぎるせいか)metricがときどき途切れることが
ありました。
● cacti は polling して metric 収集するので、監視対象多すぎてpoller 回りきってな
かった可能性。
● cactiは内部的にMySQL使っているのだが、その部分がスケールしない
作りになってました(と当時感じました)。
● サービスが過負荷になったとき、障害発生箇所の切り分けをするために
は、metricの精度が足りてませんでした。
● 弊社では cacti で NFS を使っていたんですが、(少なくとも当時のLinux
では) NFSの安定性がイマイチだと感じることがありました。
cacti時代の課題
8
Copyright © GREE, Inc. All Rights Reserved.
● (cacti のころは4桁後半のサーバを monitoringしてたけど)、それの軽
く数倍は管理してほしい。
● それらのサーバを、負荷の高い順にリアルタイムでソートしてほしい。
● (障害対応など他の業務の合間に)開発は一人でやってほしい。
● プロダクション環境への導入も、一人でやってほしい。
新しい monitoring system の要件
9
Copyright © GREE, Inc. All Rights Reserved.
OK
わかった
10
Copyright © GREE, Inc. All Rights Reserved.
開発期間は
無視させて
もらったけど 11
Copyright © GREE, Inc. All Rights Reserved.
それ以外は
(だいたい)
できた 12
Copyright © GREE, Inc. All Rights Reserved.
どうやった
のか?
13
Copyright © GREE, Inc. All Rights Reserved.
まずは
dogfooding
14
Copyright © GREE, Inc. All Rights Reserved.
● まずは自分でひたすら既存の cacti を使いながら、サービスの障害対応
した。
● cacti のアクセスログを調べて、社内のヘビーユーザを洗い出して、個別
にヒアリングし、ヘビーユーザの要件を、新規に洗い出してみた。
● かなり難しい要件なので、OSSをベースにして自分で開発するしかない
な、という感覚があった。
● 使えそうなOSSを調査していった。
最初にやったこと
15
Copyright © GREE, Inc. All Rights Reserved.
● 割と早い段階で rrdcached の存在に気づいた。
● rrdcached はRRDtoolに付属している daemon。
● 2010年当時では、比較的新しい存在だった。
● 「rrdcached使えば、 cacti でもっと頑張れるのでは?」と思ったけど、
cacti で使っている RRDtool の template 機能を、 rrdcached はサ
ポートしていなかった。
● rrdcached に対応しているものとして、当時、 ganglia と collectd が
あった。
● そこで、入門監視でも取り上げられている collectd も、候補として考え
た。
当時、 ganglia と collectd が候補だった
16
Copyright © GREE, Inc. All Rights Reserved.
● ganglia 3.1.7 から、 python で拡張 module を書けるようになった。
● 当時、 collectd はCでしか plugin 書けなかった気がする。
● ganglia は、Grid単位でツリー構造を構成し、サーバを管理できる設計に
なっていたので、うまく設計すれば、かなり大規模な構成を組めそうだと感
じた。
● ganglia は node の情報を取得するためのAPIなどあったので、うまく設
計すれば、APIサーバとして社内に機能を提供し、いろいろ拡張できそうだ
と思った。
なぜ ganglia を選んだか・その1
17
Copyright © GREE, Inc. All Rights Reserved.
● Facebook による大規模な導入事例があったので、ある程度の規模でな
ら運用できそうだという期待があった。
● Facebook、memcachedに300TB以上のライブデータを置く大規模運用の内側-
Publickey
● Velocity 2010: Tom Cook, "A Day in the Life of Facebook Operations" -
YouTube
● ただ、 Facebook は「負荷の高い順にソートして表示する」というようなと
ころを魔改造しているようには見えなかったので、そのあたりは創意工夫
が必要だろうな、とは思っていた。
● あと、 Facebook は RRD の保存の disk write が重いから tmpfs に
RRD置いてたそうなんで、そこは HDD に書けるようにしたいなと思った。
なぜ ganglia を選んだか・その2
18
Copyright © GREE, Inc. All Rights Reserved.
そして
魔改造
19
Copyright © GREE, Inc. All Rights Reserved.
gangliaを
どう改造
したのか?
20
Copyright © GREE, Inc. All Rights Reserved.
時間がないので
ざっくり行きます
21
Copyright © GREE, Inc. All Rights Reserved.
● ganglia の cluster を、IPアドレスのレンジで適切にshardingする
● それらの cluster を透過的に扱えるよう、 webfrontend を作って、その
frontend にそれぞれの cluster へ proxy させる。
● webfrontend が cluster を透過的に扱うためのマッピング情報は、
batch job で定期的に生成する。
● RRDに15sec単位で情報を保存するために、 rrdcached を使いつつ適
切にチューニングする。
簡単にまとめると
22
Copyright © GREE, Inc. All Rights Reserved.
● ざっくり書くと、次のような感じで。
● サーバのIPアドレスの /24 とかの単位で分割して、 ganglia の cluster たくさん作
る。
● ganglia は gmond という agent から UDP でパケット投げるんだけど、 IPアドレスのレン
ジ的に近いなら、UDPのパケットも落ちにくいだろうという期待もあった。
● それぞれの cluster に対して賢く proxy する webfrontend を自作する。
● webfrontend がどの cluster に proxy すればいいか、そのためのマッピング情報を
batch job で生成し、KVSに保存する。
● マッピング情報には、ついでに Load Average とかも保存しておいて、 Load Average の
順にサーバのリストを取得できるようにする。
● batch でリストを生成すると、完全にリアルタイムとはならないけど、だいたいリアルタイムで
負荷の高い順にソートできる。
● 故障したサーバがあれば、 batch 実行時にマッピング情報の更新対象から外せばいい
● webfrontend から、サーバの情報を管理するDBや、マッピング情報を管理するKVSに
アクセスして、特定のサーバの情報を表示できるようにする。
frontend部分はフルスクラッチで書いた
23
Copyright © GREE, Inc. All Rights Reserved.
● 監視対象4桁後半、1nodeあたり数百metricで、RRDを15秒単位で更新
すると、実に大量の random write が発生するんですが。
● まぁ disk I/O は得意分野だから頑張ればいいだけなので、頑張って
チューニングしました。
● 最近はSATAのSSD使ってますけど、数年前まではHDDでなんとかして
ました。
● rrdcached は優秀でした。
RRDの更新については
24
Copyright © GREE, Inc. All Rights Reserved.
● 数百 metric * 数千 node で大量のデータがあったとしても、そのすべて
を同時に見ることはない。
● 新機能をリリースしていたり、過負荷になっていたり、障害が発生していたりするような、
特定のサーバ以外では、metric を参照されるのは限定的である。
● ほとんどのサーバの metric は普段参照されていないので、そういった更新はバッファリ
ングしておけば良い。
● 本当に必要なものだけ、例えば、monitoring system のユーザが参照したいものだ
け sync するとか、あるいはバックアップ時にいったんflush したいとか、そういったとき
以外は、ゆっくり書き込めばよい。
● そういったバッファリングのための仕組みとして、 RRDtoolの場合は、
rrdcached を使うことができる。
Resource Monitoring の最適化のヒント
25
Copyright © GREE, Inc. All Rights Reserved.
すごい
雑に言うと
26
Copyright © GREE, Inc. All Rights Reserved.
InnoDB Adaptive Flushing
みたいな最適化をすれば
いいんだよ
27
Copyright © GREE, Inc. All Rights Reserved.
● 自分で作ったものは、自分でヘビーに使ってみる
● 少なくとも、自分で許容できない response time にはしないようにする
● reseponse time が許容できる範囲であれば、なるべくシンプルな設計にした
● web アプリケーションなんで、どこかいじるたびに、chrome の developer tool で
[Network] パネルを見て、影響を調べてた
● ganglia や rrdcached 自体を monitoring する
● 何がボトルネックで、どれくらいスケールしそうなのか自分で調べる
● access.log から ヘビーユーザの傾向をみる
● 例えば、朝出社してから帰宅するまで、何枚も画面開きっぱなしにしてるユーザがかなり
いた。そこで、グラフのreload間隔をN秒固定ではなく、多少ゆらぎをもたせるようにし
た。
作った後も、基本はやはり dogfooding
28
Copyright © GREE, Inc. All Rights Reserved.
だいたい
要件満たすもの
作ったんだけど
29
Copyright © GREE, Inc. All Rights Reserved.
ganglia
導入後の課題
30
Copyright © GREE, Inc. All Rights Reserved.
課題・その一
(私以外の人には)
metricが多すぎる
31
Copyright © GREE, Inc. All Rights Reserved.
● 昨年 blog で書きましたが、わたしは SHOW ENGINE INNODB
STATUS をパースするなどして MySQL だけで一台あたり三桁の
metricを取るようにしています。(わたし個人は)ほぼ全てのmetricが有
意義だと思ってるんですが、あまり評判がよろしくありませんでした。
● 昨年書いた MySQLのmetricに関する話 と、実際に キャプチャした画面
● 個別の metric を取って drill down できるようにしておくのは重要なん
ですが、なんらかの summarize された composite graph が無いと、
組織的にスケールしないかな、という課題意識もありました。
metric多すぎる問題
32
Copyright © GREE, Inc. All Rights Reserved.
課題・その二
 
(一時期)kernelがバグってて
Load Average の計算間違ってる
33
Copyright © GREE, Inc. All Rights Reserved.
● わたしが入社した頃、サービスが過負荷になることがしばしばあったので、
「負荷が高くなってるサーバをとにかく抽出して、負荷高い順に表示する」と
いう monitoring system を提供することにより、サービスの安定性改善
に貢献しようと思ってたのですが。
● OS新しくしたら、負荷が高くなっても Load Average 上がらなくて、わた
しの作った monitoring system で高負荷なサーバを抽出できなくなっ
てしまったので。
● これは大いに困るな、と思いました。
Load Average 使えない問題
34
Copyright © GREE, Inc. All Rights Reserved.
そこで
35
Copyright © GREE, Inc. All Rights Reserved.
sysload
36
Copyright © GREE, Inc. All Rights Reserved.
● 先日書いたblog
● 6年くらい前に自作した metric がそこそこ有用だと思うので、OSSで公開します
● 当時、 sysload で何をやりたかったかといいますと
● 様々なスペックのサーバが混在している中で、サーバの負荷を百分率で表現したい
● ただし、単純にCPU使用率だけでは表現できないので、 disk I/O などの負荷も加味したも
のが必要である
● capacity planning をわかりやすくしたい
● N+1の構成にするために、何台増設すればよいのかわかりやすくしたい
● APIサーバ提供したい
● New Relic みたいに summary report 投げたい
詳しくは blog を後ほど読んでいただくとして
37
Copyright © GREE, Inc. All Rights Reserved.
● 仮にMySQLのslaveがn台あって、それぞれの sysload の平均値が x
とします。
● slaveが一台 host down しても、サービスを安定稼働させるために最低
限必要な台数は、少なくとも、次の式から求められるわけです
● x*n/(n-1) < 100
● 例えば、 slave の sysload の平均値が60として、 slave の台数が3だった場合、 slave
が一台 hostdown して slave の台数が2になったとき、 slave の sysload は
60*3/(3-1)=90 まで上昇すると予想されます
● まぁ実際には sysload < 100 ではなく、安全率かけて、一台 hostdown してもそんな
に負荷高まらないようにするんですが
● 単純に、 InnoDB で spin lock が競合し始めると、CPU使用率がリニアに上昇していくわ
けでもないので、低めに見積もっておかないとあっさり刺さるんで
● 式で表現できると、組織内で共通認識にしやすいわけです
(だいたいの問題を)百分率で表現できると
38
Copyright © GREE, Inc. All Rights Reserved.
● 弊社の ganglia では、 過去24時間分は15秒単位でRRD保存してまし
た。
● 24時間以上前は cacti準拠で、最長797日分のデータを保存するようにしてました。
● RRDtool は rrdxport でXML形式(最近はJSONでも)で値を取り出せる
ので、 webfrontend の proxy 叩いたら、任意のサーバの任意の
metric で rrdxport 叩けるようにしました
● なので、 daily でそのAPI叩いて sysload 取得すると、過去24時間で最
も負荷の高かった時間帯がわかるわけです
APIサーバ作りたい
39
Copyright © GREE, Inc. All Rights Reserved.
● 次のような感じで daily report や monthly report 作ってました
1. サーバ単位で、その日いちばん高かった sysload の値を、その時間
帯とセットでMySQLに保存
2. 1. で保存した値を用いて、サービス単位などで sysload の
summary report を dailyで集計し、 MySQLに保存
3. 2. で保存した値を用いて、サービスなどの単位で、「今月もっとも
sysloadが高かった日」をmonthlyで集計し、MySQLに保存
daily で API サーバ叩いてsysload取れるなら
40
Copyright © GREE, Inc. All Rights Reserved.
● 何が嬉しいかというと、次のようなときに役に立つわけです
● 例:
● ゲームでプロモーションを開始したとき、次回のイベント時にどれくらいサーバの負荷が増加
しそうなのか、過去のイベント時のデータを使って試算できる。
● アプリケーションの不具合等で高負荷になってしまい、一時的にサーバの増設をした後、適
正台数に戻したくなったとき。過去の実績など見て、徐々に安全にサーバの台数を削減する
ことができる。
sysload でサーバの負荷を集計できると
41
Copyright © GREE, Inc. All Rights Reserved.
● サーバやインスタンスの台数は、サービスのコストに直結するので、可能
な範囲で調整したいというのが、運営する側の気持ちだと思います。
● しかし、台数を削減しすぎて過負荷になり、障害に直結してしまった場合、
お客様は一方的に不利益を被ることになります。
● そうならないよう、「これ以上減らすことは危険である」といった共通認識
を、組織内で持てるようにするための指標値は、必ずあった方が良いので
す。
● 新しい世代のサーバやインスタンスに移設するとき、性能が向上している
と、ある程度は台数の削減が見込めます。ただ、そういったときに減らしす
ぎないよう、なんらかの指標値はあるべきなのです。
サーバの台数を無理に減らさないこと、超重要
42
Copyright © GREE, Inc. All Rights Reserved.
さて
43
Copyright © GREE, Inc. All Rights Reserved.
当時、
monitoring
system
自作したのは何故か44
Copyright © GREE, Inc. All Rights Reserved.
● 入門監視では、監視は自作するより、監視のSaaSが推奨されてます。わ
たしも、現代において監視のSaaSは有力な選択肢だと思います。
● ただ、当時は数千台以上のサーバのmetricを15秒単位で保存できる手
段は、自分でなんとかするしかなかったので、自分で作りました。
スケーラビリティとmetricの精度
45
Copyright © GREE, Inc. All Rights Reserved.
● ざっくりいうと、数年前まで、ハードウェアの性能と、ミドルウェアのCPUス
ケーラビリティが足りませんでした。よって、(監視対象となる)サーバを、増
やさざるを得ませんでした。
● (極めて個人的な見解ですが)数年前と現代を比べて最大のブレークス
ルーは、やはりNAND Flashだったかと思います。
● 2010年あたりの15krpmのSAS HDDは、容量がとても少なかったので、大量のデータ
を保存するためには、数を並べるしかありませんでした。また、SAS HDDは消費電力が
高かったので、数を並べるとそれだけで電力を食いました。
● SSDの普及によって、サーバ1台あたりで扱えるデータが増大し、MySQL
なども、たくさんのCore使えることが求められました。
● 現代はハードウェアもミドルウェアも集約度がたいへん向上したので、監視
対象となるサーバの台数を減らせるようになりました。
なぜ当時スケーラビリティが必要だったか
46
Copyright © GREE, Inc. All Rights Reserved.
● サーバの台数が多い場合、例えば、「どのサーバがトリガーになって
(MySQLの) too many connections が発生したか」ということを調査
するのが、かなり難しくなります。
● そういったとき、複数のサーバの metric を高精度で保存し、並べて比較
できるようになると、 too many connections の発生していく様を、時系
列を追って調査することが容易になります。
● もし、「どれかのサーバがトリガーになって、連鎖反応を起こして複数の
サーバで障害が発生しているのだけど、調査するための情報が足りない」
と感じているならば、 metric の精度を上げるのは、良い対策だと思いま
す。
なぜmetricの精度が必要だったか
47
Copyright © GREE, Inc. All Rights Reserved.
仮に、今ならば
SaaSで
置き換えられるの
か? 48
Copyright © GREE, Inc. All Rights Reserved.
● かつて「gangliaで使ってるサーバの台数多すぎない?」と言われたことが
あったので、以前、若者が試算してくれたことがあったのですが。
● 一般的な監視のSaaSと比べてコストが1/4程度だったので、オンプレの監
視においては、未だに ganglia ベースのものが使われています。
● 「AWS向けの monitoring は ganglia ではない方が相性が良い」という
ことで、 AWS向けのものは、若者たちがGrafana+Prometheusベース
で新しいものを作ってくれましたが、監視対象のインスタンス上で metric
を収集するのには、未だ、 ganglia の agent が一部用いられてたりして
います。
コスト面で厳しい
49
Copyright © GREE, Inc. All Rights Reserved.
2010年ごろから
長く使い続けて、
見えてくるもの
50
Copyright © GREE, Inc. All Rights Reserved.
● 新しい世代のサーバやインスタンスを使おうとすると、具体的に言うと、新
しい世代のCPUを使おうとすると、新しい kernel に対応しているOSに移
行していく必要が発生します。
● (個人的な感想ですが)最近の kernel は、 TCP の再送を最適化するべ
く、TCP周りの修正がかなり入っています。
● そういった kernel patch は、大手クラウド事業者から提供されているものだったりする
ので、そういった大規模環境で実績がある最適化なのですが。
● わかりやすいところだと、 kernel 3.1 のときにRTOが1秒になったので、
この頃から /proc/net/netstat の TCPTimeouts の増え方がかなり変
わってると思います。
OSが新しくなると、 metric の意味が変わる
51
Copyright © GREE, Inc. All Rights Reserved.
● 入門監視8章の訳注でも取り上げられた MemAvailable、 kernel 3.14
で merge されたみたい ですが
● このあたりの解釈も踏まえると、メモリの監視って、 kernel を新しくすると
きに再考する必要も出てくるのかな、と感じたりします
● かつてわたしは、/proc/meminfo を参照して、次のような式でメモリの使
用量をグラフに書いてました
● メモリ使用量 = MemTotal - MemFree - Buffers - Cached
● 最近の kernel でこの式がベストかというと微妙ですが、いろいろ考えて、
現状このままで良いかなと思いました。
/proc/meminfo の MemAvailable など
52
Copyright © GREE, Inc. All Rights Reserved.
● わたしがメモリの使用量を知りたい理由は、だいたい次の2つです
a. メモリリークが発生しているかどうか
b. malloc(2) が失敗する状態かどうか
● これら2つを知るためには、MemAvailable を厳格に解釈する必要はな
く、先ほどのメモリ使用量を求める式と、 /proc/meminfo の MemFree
があれば、だいたい要件を満たせるわけです。 page cache を破棄すれ
ばメモリ空けられるとしても、page cache 破棄するのはそれなりにコスト
が高いこともありますし。
● kernel が新しくなって、以前と metric の意味や定義が変わることはあり
ます。でも、その都度、本当に求められている情報について再考して、変化
を受け入れていけば良いわけです。
本当に知りたい情報を考える
53
Copyright © GREE, Inc. All Rights Reserved.
● 話は変わって
● 一部のサービスをパブリッククラウドに移行したとき、アプリケーションサー
バでTCP timeout が一気に増えたことがあった
● しょうがないので、tcpdump とって kernel のソースコード読んだ
● おおむねわかった
● なので、kernel 3.13で引用しつつ解説
環境が変わると metric の意味が変わる
54
Copyright © GREE, Inc. All Rights Reserved.
● Load Balancer が pre-open する(client から request 飛んでこなく
ても、事前に connection 張ろうとする)
● アプリケーションサーバ上で apache が TCP_DEFER_ACCEPT して
る。TCP_DEFER_ACCEPT で bare ack は破棄され、 apache は
SYN_RECV で待ち続ける
● (たいへんざっくりいうと)TCP_DEFER_ACCEPT してるサーバは、ACK
を受け取った後、 DATA が届くまで SYN/ACK を再送しない 。
● しかし、SYN_RECVで待ち続けてる状態で、TIMEOUT を起こすと、
TCPTimeouts がインクリメントされる
TCP_DEFER_ACCEPT のときの振る舞い
55
Copyright © GREE, Inc. All Rights Reserved.
● TCP Timeout が発生してパケット再送されるときは、TCPTimeoutsだ
けでなくRetransSegsも増える。
● しかし、RetransSegsが増えずにTCPTimeoutsだけ増えている場合は、
TCP_DEFER_ACCEPT が有効で、SYN/ACK再送せずに
tcp_syn_ack_timeout() だけ呼ばれたという可能性もある
● TCP_DEFER_ACCEPT が有効で bare ack が破棄されたときは
TCPDeferAcceptDrop がインクリメントされるので、 TCP_DEFER_ACCEPT が有効
かどうかは、TCPDeferAcceptDropを見ることで確認することもできる
TCPTimeoutsと併せてRetransSegsも
56
Copyright © GREE, Inc. All Rights Reserved.
● (だいぶ前ですが)kernel 2.6.37 で TCPTimeWaitOverflow が、
kernel 3.15 で TCPSynRetrans が追加されました。
● もしいま取得していないのであれば、これらの metric は取得するようにし
ても良いのではないかと思います。
● 例えば、オンプレミス環境からパブリッククラウドに移行する際、最も気にな
る要素の一つは、どれだけパケットの再送が発生するかとか、ネットワーク
の品質かと思います。 TCPSynRetrans はそういったものを推し量る尺
度の一つとなり得ます。
● 最近の kernel は TCP の再送周りの最適化がかなり進んでいるので、
RetransSegsだけでなく、TCPSynRetransなども併せて見たほうが、よ
り効果的ではないかと思います。
環境が変わると、取得すべきmetricが増える
57
Copyright © GREE, Inc. All Rights Reserved.
という具合に、
monitoring し続けて、
変化し続ける環境を見ていると、
多くの学びがあります。
58
Copyright © GREE, Inc. All Rights Reserved.
継続的な
monitoringは
59
Copyright © GREE, Inc. All Rights Reserved.
エンジニアに
とって
学びの機会 60
Copyright © GREE, Inc. All Rights Reserved.
● 環境が変わったり、ミドルウェアのバージョンを上げたりすると、metric に
変化が現れることがある。
● そういった機会を逃さずにちゃんと調べると、様々な学びがある
● そのためにはまず、自分たちの環境を細かく monitoring して、環境やミ
ドルウェアのバージョンを変えたとき、どのような変化が生じるか、見逃さな
いようにしたほうが良い。
● もしなんらかのミドルウェアのスペシャリストであるならば、自分が得意なミ
ドルウェアの metric は、注意深く取り続けたほうが、成長の機会は得ら
れやすい。
環境、OS、ミドルウェアの変化を見逃さない
61
Copyright © GREE, Inc. All Rights Reserved.
そうは
言っても
62
Copyright © GREE, Inc. All Rights Reserved.
ganglia
使い始めて
そろそろ十年
63
Copyright © GREE, Inc. All Rights Reserved.
長いこと
使いすぎ
64
Copyright © GREE, Inc. All Rights Reserved.
新たな課題
65
Copyright © GREE, Inc. All Rights Reserved.
● python2.7 はサポート期間がとても長い Lightweight Language だっ
た。十年近く使うことができた。
● ganglia の modpython.so は、python2.1以降 を対象としていたの
で、一度つくった python module は数年間に渡って利用することができ
て、とても便利だった
● kernel やミドルウェアのバージョンが上がるたびに、ちまちま直してはいたけれど
● しかし、 ganglia は python3.x では build も通らない。仮にgangliaを
python3.xに対応させたとしても、 python module を python3対応さ
せる必要が出てくる。
python2.7 の EOL
66
Copyright © GREE, Inc. All Rights Reserved.
● 弊社は主に Ubuntu 使ってるんですが、昨年リリースされた Ubuntu
18.04 LTS(Bionic Beaver)は、 python2.7 も python3も(3.6も
3.7も)サポートされることになりました。
● よって、Bionic Beaver の EOL、2023年4月までは、python2.7と
gangliaを使い続けることができるかなと思ってるんですが。
● それ以降は、ganglia 以外のものでmonitoring をやっていかないとい
けないかなぁと感じています。
● さしあたって、2020年4月に Ubuntu 20.04 LTS がリリースされる予定
で、20.04では python2.7 が含まれない予定なので、来年くらいから、
じっくり考えていきたいなと思ってます。
Ubuntu 18.04 は python2.7 からの橋渡し
67
Copyright © GREE, Inc. All Rights Reserved.
● かつては大量のnodeを管理できないといけなかったけど。最近は、サー
バ(ないしインスタンス)のスペックや、MySQLなどミドルウェアのCPUス
ケーラビリティなど改善してきたので、monitoring system にそこまでの
スケーラビリティは求められない。
● python2.7のサポート期間がとても長かったので、gangliaではLLの
EOLについてそれほど考えなくてよかったけど。次はそういったもののEOL
を、どう乗り越えて行くのが良いか。
● 少なくとも、次の環境に、python2系向けに書かれた sysload の
python module をそのまま持っていくことはできない。ソースコードでは
なく、培ったノウハウを、(その中でも意味のあるものを)、如何に取捨選択
して、次の環境に持っていくか。
数年後の未来に備えて、考えること
68
Copyright © GREE, Inc. All Rights Reserved.
おわり

More Related Content

What's hot

Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...Google Cloud Platform - Japan
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングKosuke Kida
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 

What's hot (20)

Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 

Similar to sysloadや監視などの話(仮)

MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編Takanori Sejima
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編gree_tech
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編Takanori Sejima
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編gree_tech
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Kosuke Tanabe
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?Seiichiro Ishida
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
MySQLやSSDとかの話 その後
MySQLやSSDとかの話 その後MySQLやSSDとかの話 その後
MySQLやSSDとかの話 その後Takanori Sejima
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsMiniascape
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)Takanori Sejima
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
さいきんのMySQLに関する取り組み(仮)
さいきんのMySQLに関する取り組み(仮)さいきんのMySQLに関する取り組み(仮)
さいきんのMySQLに関する取り組み(仮)Takanori Sejima
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 

Similar to sysloadや監視などの話(仮) (20)

MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
MySQLやSSDとかの話 その後
MySQLやSSDとかの話 その後MySQLやSSDとかの話 その後
MySQLやSSDとかの話 その後
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
さいきんのMySQLに関する取り組み(仮)
さいきんのMySQLに関する取り組み(仮)さいきんのMySQLに関する取り組み(仮)
さいきんのMySQLに関する取り組み(仮)
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 

More from Takanori Sejima

InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)Takanori Sejima
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話Takanori Sejima
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group CommitTakanori Sejima
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveTakanori Sejima
 
InnoDB Table Compression
InnoDB Table CompressionInnoDB Table Compression
InnoDB Table CompressionTakanori Sejima
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話Takanori Sejima
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB FlushingTakanori Sejima
 

More from Takanori Sejima (9)

InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group Commit
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
InnoDB Table Compression
InnoDB Table CompressionInnoDB Table Compression
InnoDB Table Compression
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話
 
CPUに関する話
CPUに関する話CPUに関する話
CPUに関する話
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Recently uploaded (8)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

sysloadや監視などの話(仮)

  • 1. Copyright © GREE, Inc. All Rights Reserved. sysloadや監視などの話(仮) Takanori Sejima
  • 2. Copyright © GREE, Inc. All Rights Reserved. 自己紹介 ● わりとMySQLのひと ● 3.23.58 から使ってる ● むかしは Resource Monitoring も力入れてやってた ● ganglia & rrdcached の(たぶん)ヘビーユーザ ● 2010年くらいから使い始めた ● gmond は素のまま使ってる ● gmetad は欲しい機能がなかったので patch 書いた ● webfrontend はほぼ書き直した ● あとはひたすら python module 書いた ● ganglia じゃなくても良かったんだけど、とにかく rrdcached を使いたかった ● というわけで、自分は Monitoring を大事にする ● 一時期は Flare という OSS の bugfix などもやってた ● むかしあげたslideなど ● https://www.slideshare.net/takanorisejima 2
  • 3. Copyright © GREE, Inc. All Rights Reserved. ● 今日はその Resource Monitoring の話などしようと思います。 ● ざっくりいうと、長いことやってれば学ぶことも多くあるし、長いことやってる ことで問題もある、そんな話です。 ● 今回はほとんどMySQLの話はありません。 ● 自分でゴリゴリ monitoring 関係のコード書いてたのは、2014年くらい までかなぁと思います、それ以降もちょくちょく metric 追加してますが。 ● ここ数年、細かいところは、優秀な若手たちが頑張ってくれてます。 本日のお話 3
  • 4. Copyright © GREE, Inc. All Rights Reserved. ● かつて sysload という metric を作ったのですが、それに纏わる話など します。 ● gree/sysload ● 6年くらい前に自作した metric がそこそこ有用だと思うので、OSSで公開します 本日のお話の補足資料 4
  • 5. Copyright © GREE, Inc. All Rights Reserved. ● 2010年以前の弊社の resource monitoring ● gangliaをどう改造したのか? ● 次なる課題 ● そこでsysload ● 当時、monitoring system 自作したのはなぜか ● 仮に、今ならばSaaSで置き換えられるのか ● 2010年ごろから長く使い続けて、見えてくるもの ● 継続的な monitoring は、エンジニアにとって学びの機会 ● 新たな課題 Agenda 5
  • 6. Copyright © GREE, Inc. All Rights Reserved. はじめに 6
  • 7. Copyright © GREE, Inc. All Rights Reserved. ● ganglia 以前は cacti を拡張した仕組みが動いてました。 ● 大規模インフラの監視システム ● たいへんよくできてたんですけど、いくつか課題があったので。 ● 2010年に入社したわたしが、新しい monitoring system を作ることに なりました。 2010年以前の弊社の resource monitoring 7
  • 8. Copyright © GREE, Inc. All Rights Reserved. ● (監視対象のサーバが多すぎるせいか)metricがときどき途切れることが ありました。 ● cacti は polling して metric 収集するので、監視対象多すぎてpoller 回りきってな かった可能性。 ● cactiは内部的にMySQL使っているのだが、その部分がスケールしない 作りになってました(と当時感じました)。 ● サービスが過負荷になったとき、障害発生箇所の切り分けをするために は、metricの精度が足りてませんでした。 ● 弊社では cacti で NFS を使っていたんですが、(少なくとも当時のLinux では) NFSの安定性がイマイチだと感じることがありました。 cacti時代の課題 8
  • 9. Copyright © GREE, Inc. All Rights Reserved. ● (cacti のころは4桁後半のサーバを monitoringしてたけど)、それの軽 く数倍は管理してほしい。 ● それらのサーバを、負荷の高い順にリアルタイムでソートしてほしい。 ● (障害対応など他の業務の合間に)開発は一人でやってほしい。 ● プロダクション環境への導入も、一人でやってほしい。 新しい monitoring system の要件 9
  • 10. Copyright © GREE, Inc. All Rights Reserved. OK わかった 10
  • 11. Copyright © GREE, Inc. All Rights Reserved. 開発期間は 無視させて もらったけど 11
  • 12. Copyright © GREE, Inc. All Rights Reserved. それ以外は (だいたい) できた 12
  • 13. Copyright © GREE, Inc. All Rights Reserved. どうやった のか? 13
  • 14. Copyright © GREE, Inc. All Rights Reserved. まずは dogfooding 14
  • 15. Copyright © GREE, Inc. All Rights Reserved. ● まずは自分でひたすら既存の cacti を使いながら、サービスの障害対応 した。 ● cacti のアクセスログを調べて、社内のヘビーユーザを洗い出して、個別 にヒアリングし、ヘビーユーザの要件を、新規に洗い出してみた。 ● かなり難しい要件なので、OSSをベースにして自分で開発するしかない な、という感覚があった。 ● 使えそうなOSSを調査していった。 最初にやったこと 15
  • 16. Copyright © GREE, Inc. All Rights Reserved. ● 割と早い段階で rrdcached の存在に気づいた。 ● rrdcached はRRDtoolに付属している daemon。 ● 2010年当時では、比較的新しい存在だった。 ● 「rrdcached使えば、 cacti でもっと頑張れるのでは?」と思ったけど、 cacti で使っている RRDtool の template 機能を、 rrdcached はサ ポートしていなかった。 ● rrdcached に対応しているものとして、当時、 ganglia と collectd が あった。 ● そこで、入門監視でも取り上げられている collectd も、候補として考え た。 当時、 ganglia と collectd が候補だった 16
  • 17. Copyright © GREE, Inc. All Rights Reserved. ● ganglia 3.1.7 から、 python で拡張 module を書けるようになった。 ● 当時、 collectd はCでしか plugin 書けなかった気がする。 ● ganglia は、Grid単位でツリー構造を構成し、サーバを管理できる設計に なっていたので、うまく設計すれば、かなり大規模な構成を組めそうだと感 じた。 ● ganglia は node の情報を取得するためのAPIなどあったので、うまく設 計すれば、APIサーバとして社内に機能を提供し、いろいろ拡張できそうだ と思った。 なぜ ganglia を選んだか・その1 17
  • 18. Copyright © GREE, Inc. All Rights Reserved. ● Facebook による大規模な導入事例があったので、ある程度の規模でな ら運用できそうだという期待があった。 ● Facebook、memcachedに300TB以上のライブデータを置く大規模運用の内側- Publickey ● Velocity 2010: Tom Cook, "A Day in the Life of Facebook Operations" - YouTube ● ただ、 Facebook は「負荷の高い順にソートして表示する」というようなと ころを魔改造しているようには見えなかったので、そのあたりは創意工夫 が必要だろうな、とは思っていた。 ● あと、 Facebook は RRD の保存の disk write が重いから tmpfs に RRD置いてたそうなんで、そこは HDD に書けるようにしたいなと思った。 なぜ ganglia を選んだか・その2 18
  • 19. Copyright © GREE, Inc. All Rights Reserved. そして 魔改造 19
  • 20. Copyright © GREE, Inc. All Rights Reserved. gangliaを どう改造 したのか? 20
  • 21. Copyright © GREE, Inc. All Rights Reserved. 時間がないので ざっくり行きます 21
  • 22. Copyright © GREE, Inc. All Rights Reserved. ● ganglia の cluster を、IPアドレスのレンジで適切にshardingする ● それらの cluster を透過的に扱えるよう、 webfrontend を作って、その frontend にそれぞれの cluster へ proxy させる。 ● webfrontend が cluster を透過的に扱うためのマッピング情報は、 batch job で定期的に生成する。 ● RRDに15sec単位で情報を保存するために、 rrdcached を使いつつ適 切にチューニングする。 簡単にまとめると 22
  • 23. Copyright © GREE, Inc. All Rights Reserved. ● ざっくり書くと、次のような感じで。 ● サーバのIPアドレスの /24 とかの単位で分割して、 ganglia の cluster たくさん作 る。 ● ganglia は gmond という agent から UDP でパケット投げるんだけど、 IPアドレスのレン ジ的に近いなら、UDPのパケットも落ちにくいだろうという期待もあった。 ● それぞれの cluster に対して賢く proxy する webfrontend を自作する。 ● webfrontend がどの cluster に proxy すればいいか、そのためのマッピング情報を batch job で生成し、KVSに保存する。 ● マッピング情報には、ついでに Load Average とかも保存しておいて、 Load Average の 順にサーバのリストを取得できるようにする。 ● batch でリストを生成すると、完全にリアルタイムとはならないけど、だいたいリアルタイムで 負荷の高い順にソートできる。 ● 故障したサーバがあれば、 batch 実行時にマッピング情報の更新対象から外せばいい ● webfrontend から、サーバの情報を管理するDBや、マッピング情報を管理するKVSに アクセスして、特定のサーバの情報を表示できるようにする。 frontend部分はフルスクラッチで書いた 23
  • 24. Copyright © GREE, Inc. All Rights Reserved. ● 監視対象4桁後半、1nodeあたり数百metricで、RRDを15秒単位で更新 すると、実に大量の random write が発生するんですが。 ● まぁ disk I/O は得意分野だから頑張ればいいだけなので、頑張って チューニングしました。 ● 最近はSATAのSSD使ってますけど、数年前まではHDDでなんとかして ました。 ● rrdcached は優秀でした。 RRDの更新については 24
  • 25. Copyright © GREE, Inc. All Rights Reserved. ● 数百 metric * 数千 node で大量のデータがあったとしても、そのすべて を同時に見ることはない。 ● 新機能をリリースしていたり、過負荷になっていたり、障害が発生していたりするような、 特定のサーバ以外では、metric を参照されるのは限定的である。 ● ほとんどのサーバの metric は普段参照されていないので、そういった更新はバッファリ ングしておけば良い。 ● 本当に必要なものだけ、例えば、monitoring system のユーザが参照したいものだ け sync するとか、あるいはバックアップ時にいったんflush したいとか、そういったとき 以外は、ゆっくり書き込めばよい。 ● そういったバッファリングのための仕組みとして、 RRDtoolの場合は、 rrdcached を使うことができる。 Resource Monitoring の最適化のヒント 25
  • 26. Copyright © GREE, Inc. All Rights Reserved. すごい 雑に言うと 26
  • 27. Copyright © GREE, Inc. All Rights Reserved. InnoDB Adaptive Flushing みたいな最適化をすれば いいんだよ 27
  • 28. Copyright © GREE, Inc. All Rights Reserved. ● 自分で作ったものは、自分でヘビーに使ってみる ● 少なくとも、自分で許容できない response time にはしないようにする ● reseponse time が許容できる範囲であれば、なるべくシンプルな設計にした ● web アプリケーションなんで、どこかいじるたびに、chrome の developer tool で [Network] パネルを見て、影響を調べてた ● ganglia や rrdcached 自体を monitoring する ● 何がボトルネックで、どれくらいスケールしそうなのか自分で調べる ● access.log から ヘビーユーザの傾向をみる ● 例えば、朝出社してから帰宅するまで、何枚も画面開きっぱなしにしてるユーザがかなり いた。そこで、グラフのreload間隔をN秒固定ではなく、多少ゆらぎをもたせるようにし た。 作った後も、基本はやはり dogfooding 28
  • 29. Copyright © GREE, Inc. All Rights Reserved. だいたい 要件満たすもの 作ったんだけど 29
  • 30. Copyright © GREE, Inc. All Rights Reserved. ganglia 導入後の課題 30
  • 31. Copyright © GREE, Inc. All Rights Reserved. 課題・その一 (私以外の人には) metricが多すぎる 31
  • 32. Copyright © GREE, Inc. All Rights Reserved. ● 昨年 blog で書きましたが、わたしは SHOW ENGINE INNODB STATUS をパースするなどして MySQL だけで一台あたり三桁の metricを取るようにしています。(わたし個人は)ほぼ全てのmetricが有 意義だと思ってるんですが、あまり評判がよろしくありませんでした。 ● 昨年書いた MySQLのmetricに関する話 と、実際に キャプチャした画面 ● 個別の metric を取って drill down できるようにしておくのは重要なん ですが、なんらかの summarize された composite graph が無いと、 組織的にスケールしないかな、という課題意識もありました。 metric多すぎる問題 32
  • 33. Copyright © GREE, Inc. All Rights Reserved. 課題・その二   (一時期)kernelがバグってて Load Average の計算間違ってる 33
  • 34. Copyright © GREE, Inc. All Rights Reserved. ● わたしが入社した頃、サービスが過負荷になることがしばしばあったので、 「負荷が高くなってるサーバをとにかく抽出して、負荷高い順に表示する」と いう monitoring system を提供することにより、サービスの安定性改善 に貢献しようと思ってたのですが。 ● OS新しくしたら、負荷が高くなっても Load Average 上がらなくて、わた しの作った monitoring system で高負荷なサーバを抽出できなくなっ てしまったので。 ● これは大いに困るな、と思いました。 Load Average 使えない問題 34
  • 35. Copyright © GREE, Inc. All Rights Reserved. そこで 35
  • 36. Copyright © GREE, Inc. All Rights Reserved. sysload 36
  • 37. Copyright © GREE, Inc. All Rights Reserved. ● 先日書いたblog ● 6年くらい前に自作した metric がそこそこ有用だと思うので、OSSで公開します ● 当時、 sysload で何をやりたかったかといいますと ● 様々なスペックのサーバが混在している中で、サーバの負荷を百分率で表現したい ● ただし、単純にCPU使用率だけでは表現できないので、 disk I/O などの負荷も加味したも のが必要である ● capacity planning をわかりやすくしたい ● N+1の構成にするために、何台増設すればよいのかわかりやすくしたい ● APIサーバ提供したい ● New Relic みたいに summary report 投げたい 詳しくは blog を後ほど読んでいただくとして 37
  • 38. Copyright © GREE, Inc. All Rights Reserved. ● 仮にMySQLのslaveがn台あって、それぞれの sysload の平均値が x とします。 ● slaveが一台 host down しても、サービスを安定稼働させるために最低 限必要な台数は、少なくとも、次の式から求められるわけです ● x*n/(n-1) < 100 ● 例えば、 slave の sysload の平均値が60として、 slave の台数が3だった場合、 slave が一台 hostdown して slave の台数が2になったとき、 slave の sysload は 60*3/(3-1)=90 まで上昇すると予想されます ● まぁ実際には sysload < 100 ではなく、安全率かけて、一台 hostdown してもそんな に負荷高まらないようにするんですが ● 単純に、 InnoDB で spin lock が競合し始めると、CPU使用率がリニアに上昇していくわ けでもないので、低めに見積もっておかないとあっさり刺さるんで ● 式で表現できると、組織内で共通認識にしやすいわけです (だいたいの問題を)百分率で表現できると 38
  • 39. Copyright © GREE, Inc. All Rights Reserved. ● 弊社の ganglia では、 過去24時間分は15秒単位でRRD保存してまし た。 ● 24時間以上前は cacti準拠で、最長797日分のデータを保存するようにしてました。 ● RRDtool は rrdxport でXML形式(最近はJSONでも)で値を取り出せる ので、 webfrontend の proxy 叩いたら、任意のサーバの任意の metric で rrdxport 叩けるようにしました ● なので、 daily でそのAPI叩いて sysload 取得すると、過去24時間で最 も負荷の高かった時間帯がわかるわけです APIサーバ作りたい 39
  • 40. Copyright © GREE, Inc. All Rights Reserved. ● 次のような感じで daily report や monthly report 作ってました 1. サーバ単位で、その日いちばん高かった sysload の値を、その時間 帯とセットでMySQLに保存 2. 1. で保存した値を用いて、サービス単位などで sysload の summary report を dailyで集計し、 MySQLに保存 3. 2. で保存した値を用いて、サービスなどの単位で、「今月もっとも sysloadが高かった日」をmonthlyで集計し、MySQLに保存 daily で API サーバ叩いてsysload取れるなら 40
  • 41. Copyright © GREE, Inc. All Rights Reserved. ● 何が嬉しいかというと、次のようなときに役に立つわけです ● 例: ● ゲームでプロモーションを開始したとき、次回のイベント時にどれくらいサーバの負荷が増加 しそうなのか、過去のイベント時のデータを使って試算できる。 ● アプリケーションの不具合等で高負荷になってしまい、一時的にサーバの増設をした後、適 正台数に戻したくなったとき。過去の実績など見て、徐々に安全にサーバの台数を削減する ことができる。 sysload でサーバの負荷を集計できると 41
  • 42. Copyright © GREE, Inc. All Rights Reserved. ● サーバやインスタンスの台数は、サービスのコストに直結するので、可能 な範囲で調整したいというのが、運営する側の気持ちだと思います。 ● しかし、台数を削減しすぎて過負荷になり、障害に直結してしまった場合、 お客様は一方的に不利益を被ることになります。 ● そうならないよう、「これ以上減らすことは危険である」といった共通認識 を、組織内で持てるようにするための指標値は、必ずあった方が良いので す。 ● 新しい世代のサーバやインスタンスに移設するとき、性能が向上している と、ある程度は台数の削減が見込めます。ただ、そういったときに減らしす ぎないよう、なんらかの指標値はあるべきなのです。 サーバの台数を無理に減らさないこと、超重要 42
  • 43. Copyright © GREE, Inc. All Rights Reserved. さて 43
  • 44. Copyright © GREE, Inc. All Rights Reserved. 当時、 monitoring system 自作したのは何故か44
  • 45. Copyright © GREE, Inc. All Rights Reserved. ● 入門監視では、監視は自作するより、監視のSaaSが推奨されてます。わ たしも、現代において監視のSaaSは有力な選択肢だと思います。 ● ただ、当時は数千台以上のサーバのmetricを15秒単位で保存できる手 段は、自分でなんとかするしかなかったので、自分で作りました。 スケーラビリティとmetricの精度 45
  • 46. Copyright © GREE, Inc. All Rights Reserved. ● ざっくりいうと、数年前まで、ハードウェアの性能と、ミドルウェアのCPUス ケーラビリティが足りませんでした。よって、(監視対象となる)サーバを、増 やさざるを得ませんでした。 ● (極めて個人的な見解ですが)数年前と現代を比べて最大のブレークス ルーは、やはりNAND Flashだったかと思います。 ● 2010年あたりの15krpmのSAS HDDは、容量がとても少なかったので、大量のデータ を保存するためには、数を並べるしかありませんでした。また、SAS HDDは消費電力が 高かったので、数を並べるとそれだけで電力を食いました。 ● SSDの普及によって、サーバ1台あたりで扱えるデータが増大し、MySQL なども、たくさんのCore使えることが求められました。 ● 現代はハードウェアもミドルウェアも集約度がたいへん向上したので、監視 対象となるサーバの台数を減らせるようになりました。 なぜ当時スケーラビリティが必要だったか 46
  • 47. Copyright © GREE, Inc. All Rights Reserved. ● サーバの台数が多い場合、例えば、「どのサーバがトリガーになって (MySQLの) too many connections が発生したか」ということを調査 するのが、かなり難しくなります。 ● そういったとき、複数のサーバの metric を高精度で保存し、並べて比較 できるようになると、 too many connections の発生していく様を、時系 列を追って調査することが容易になります。 ● もし、「どれかのサーバがトリガーになって、連鎖反応を起こして複数の サーバで障害が発生しているのだけど、調査するための情報が足りない」 と感じているならば、 metric の精度を上げるのは、良い対策だと思いま す。 なぜmetricの精度が必要だったか 47
  • 48. Copyright © GREE, Inc. All Rights Reserved. 仮に、今ならば SaaSで 置き換えられるの か? 48
  • 49. Copyright © GREE, Inc. All Rights Reserved. ● かつて「gangliaで使ってるサーバの台数多すぎない?」と言われたことが あったので、以前、若者が試算してくれたことがあったのですが。 ● 一般的な監視のSaaSと比べてコストが1/4程度だったので、オンプレの監 視においては、未だに ganglia ベースのものが使われています。 ● 「AWS向けの monitoring は ganglia ではない方が相性が良い」という ことで、 AWS向けのものは、若者たちがGrafana+Prometheusベース で新しいものを作ってくれましたが、監視対象のインスタンス上で metric を収集するのには、未だ、 ganglia の agent が一部用いられてたりして います。 コスト面で厳しい 49
  • 50. Copyright © GREE, Inc. All Rights Reserved. 2010年ごろから 長く使い続けて、 見えてくるもの 50
  • 51. Copyright © GREE, Inc. All Rights Reserved. ● 新しい世代のサーバやインスタンスを使おうとすると、具体的に言うと、新 しい世代のCPUを使おうとすると、新しい kernel に対応しているOSに移 行していく必要が発生します。 ● (個人的な感想ですが)最近の kernel は、 TCP の再送を最適化するべ く、TCP周りの修正がかなり入っています。 ● そういった kernel patch は、大手クラウド事業者から提供されているものだったりする ので、そういった大規模環境で実績がある最適化なのですが。 ● わかりやすいところだと、 kernel 3.1 のときにRTOが1秒になったので、 この頃から /proc/net/netstat の TCPTimeouts の増え方がかなり変 わってると思います。 OSが新しくなると、 metric の意味が変わる 51
  • 52. Copyright © GREE, Inc. All Rights Reserved. ● 入門監視8章の訳注でも取り上げられた MemAvailable、 kernel 3.14 で merge されたみたい ですが ● このあたりの解釈も踏まえると、メモリの監視って、 kernel を新しくすると きに再考する必要も出てくるのかな、と感じたりします ● かつてわたしは、/proc/meminfo を参照して、次のような式でメモリの使 用量をグラフに書いてました ● メモリ使用量 = MemTotal - MemFree - Buffers - Cached ● 最近の kernel でこの式がベストかというと微妙ですが、いろいろ考えて、 現状このままで良いかなと思いました。 /proc/meminfo の MemAvailable など 52
  • 53. Copyright © GREE, Inc. All Rights Reserved. ● わたしがメモリの使用量を知りたい理由は、だいたい次の2つです a. メモリリークが発生しているかどうか b. malloc(2) が失敗する状態かどうか ● これら2つを知るためには、MemAvailable を厳格に解釈する必要はな く、先ほどのメモリ使用量を求める式と、 /proc/meminfo の MemFree があれば、だいたい要件を満たせるわけです。 page cache を破棄すれ ばメモリ空けられるとしても、page cache 破棄するのはそれなりにコスト が高いこともありますし。 ● kernel が新しくなって、以前と metric の意味や定義が変わることはあり ます。でも、その都度、本当に求められている情報について再考して、変化 を受け入れていけば良いわけです。 本当に知りたい情報を考える 53
  • 54. Copyright © GREE, Inc. All Rights Reserved. ● 話は変わって ● 一部のサービスをパブリッククラウドに移行したとき、アプリケーションサー バでTCP timeout が一気に増えたことがあった ● しょうがないので、tcpdump とって kernel のソースコード読んだ ● おおむねわかった ● なので、kernel 3.13で引用しつつ解説 環境が変わると metric の意味が変わる 54
  • 55. Copyright © GREE, Inc. All Rights Reserved. ● Load Balancer が pre-open する(client から request 飛んでこなく ても、事前に connection 張ろうとする) ● アプリケーションサーバ上で apache が TCP_DEFER_ACCEPT して る。TCP_DEFER_ACCEPT で bare ack は破棄され、 apache は SYN_RECV で待ち続ける ● (たいへんざっくりいうと)TCP_DEFER_ACCEPT してるサーバは、ACK を受け取った後、 DATA が届くまで SYN/ACK を再送しない 。 ● しかし、SYN_RECVで待ち続けてる状態で、TIMEOUT を起こすと、 TCPTimeouts がインクリメントされる TCP_DEFER_ACCEPT のときの振る舞い 55
  • 56. Copyright © GREE, Inc. All Rights Reserved. ● TCP Timeout が発生してパケット再送されるときは、TCPTimeoutsだ けでなくRetransSegsも増える。 ● しかし、RetransSegsが増えずにTCPTimeoutsだけ増えている場合は、 TCP_DEFER_ACCEPT が有効で、SYN/ACK再送せずに tcp_syn_ack_timeout() だけ呼ばれたという可能性もある ● TCP_DEFER_ACCEPT が有効で bare ack が破棄されたときは TCPDeferAcceptDrop がインクリメントされるので、 TCP_DEFER_ACCEPT が有効 かどうかは、TCPDeferAcceptDropを見ることで確認することもできる TCPTimeoutsと併せてRetransSegsも 56
  • 57. Copyright © GREE, Inc. All Rights Reserved. ● (だいぶ前ですが)kernel 2.6.37 で TCPTimeWaitOverflow が、 kernel 3.15 で TCPSynRetrans が追加されました。 ● もしいま取得していないのであれば、これらの metric は取得するようにし ても良いのではないかと思います。 ● 例えば、オンプレミス環境からパブリッククラウドに移行する際、最も気にな る要素の一つは、どれだけパケットの再送が発生するかとか、ネットワーク の品質かと思います。 TCPSynRetrans はそういったものを推し量る尺 度の一つとなり得ます。 ● 最近の kernel は TCP の再送周りの最適化がかなり進んでいるので、 RetransSegsだけでなく、TCPSynRetransなども併せて見たほうが、よ り効果的ではないかと思います。 環境が変わると、取得すべきmetricが増える 57
  • 58. Copyright © GREE, Inc. All Rights Reserved. という具合に、 monitoring し続けて、 変化し続ける環境を見ていると、 多くの学びがあります。 58
  • 59. Copyright © GREE, Inc. All Rights Reserved. 継続的な monitoringは 59
  • 60. Copyright © GREE, Inc. All Rights Reserved. エンジニアに とって 学びの機会 60
  • 61. Copyright © GREE, Inc. All Rights Reserved. ● 環境が変わったり、ミドルウェアのバージョンを上げたりすると、metric に 変化が現れることがある。 ● そういった機会を逃さずにちゃんと調べると、様々な学びがある ● そのためにはまず、自分たちの環境を細かく monitoring して、環境やミ ドルウェアのバージョンを変えたとき、どのような変化が生じるか、見逃さな いようにしたほうが良い。 ● もしなんらかのミドルウェアのスペシャリストであるならば、自分が得意なミ ドルウェアの metric は、注意深く取り続けたほうが、成長の機会は得ら れやすい。 環境、OS、ミドルウェアの変化を見逃さない 61
  • 62. Copyright © GREE, Inc. All Rights Reserved. そうは 言っても 62
  • 63. Copyright © GREE, Inc. All Rights Reserved. ganglia 使い始めて そろそろ十年 63
  • 64. Copyright © GREE, Inc. All Rights Reserved. 長いこと 使いすぎ 64
  • 65. Copyright © GREE, Inc. All Rights Reserved. 新たな課題 65
  • 66. Copyright © GREE, Inc. All Rights Reserved. ● python2.7 はサポート期間がとても長い Lightweight Language だっ た。十年近く使うことができた。 ● ganglia の modpython.so は、python2.1以降 を対象としていたの で、一度つくった python module は数年間に渡って利用することができ て、とても便利だった ● kernel やミドルウェアのバージョンが上がるたびに、ちまちま直してはいたけれど ● しかし、 ganglia は python3.x では build も通らない。仮にgangliaを python3.xに対応させたとしても、 python module を python3対応さ せる必要が出てくる。 python2.7 の EOL 66
  • 67. Copyright © GREE, Inc. All Rights Reserved. ● 弊社は主に Ubuntu 使ってるんですが、昨年リリースされた Ubuntu 18.04 LTS(Bionic Beaver)は、 python2.7 も python3も(3.6も 3.7も)サポートされることになりました。 ● よって、Bionic Beaver の EOL、2023年4月までは、python2.7と gangliaを使い続けることができるかなと思ってるんですが。 ● それ以降は、ganglia 以外のものでmonitoring をやっていかないとい けないかなぁと感じています。 ● さしあたって、2020年4月に Ubuntu 20.04 LTS がリリースされる予定 で、20.04では python2.7 が含まれない予定なので、来年くらいから、 じっくり考えていきたいなと思ってます。 Ubuntu 18.04 は python2.7 からの橋渡し 67
  • 68. Copyright © GREE, Inc. All Rights Reserved. ● かつては大量のnodeを管理できないといけなかったけど。最近は、サー バ(ないしインスタンス)のスペックや、MySQLなどミドルウェアのCPUス ケーラビリティなど改善してきたので、monitoring system にそこまでの スケーラビリティは求められない。 ● python2.7のサポート期間がとても長かったので、gangliaではLLの EOLについてそれほど考えなくてよかったけど。次はそういったもののEOL を、どう乗り越えて行くのが良いか。 ● 少なくとも、次の環境に、python2系向けに書かれた sysload の python module をそのまま持っていくことはできない。ソースコードでは なく、培ったノウハウを、(その中でも意味のあるものを)、如何に取捨選択 して、次の環境に持っていくか。 数年後の未来に備えて、考えること 68
  • 69. Copyright © GREE, Inc. All Rights Reserved. おわり