Weitere ähnliche Inhalte
Ähnlich wie Ganglia のUIにGrafanaを追加する話 (20)
Mehr von KLab Inc. / Tech (20)
Kürzlich hochgeladen (11)
Ganglia のUIにGrafanaを追加する話
- 13. なぜ Grafana を使いたいのか
● UIだけでも刷新したい
○ 多数のグラフがあるとページ全体の表示に時間がかかる
■ グラフ 1 枚 = 画像データ 1 つ = リクエスト 1 回
13
画像リクエスト
画像リクエスト
画像リクエスト
画像リクエスト
画像リクエスト 画像リクエスト
- 18. 今回の内容
● どうにかして Grafana から Ganglia につなぐ
○ ただし、できるだけ Ganglia 側には手を入れない
● 既存環境で使っている UIと同等の情報を
Grafana で得られるようにする
18
- 19. 今回の内容
● どうにかして Grafana から Ganglia につなぐ
○ ただし、できるだけ Ganglia 側には手を入れない
● 既存環境で使っている UIと同等の情報を
Grafana で得られるようにする
19
- 20. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
1.Grafana から「何か」を経由して Ganglia につなぐ
20
- 21. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
1.Grafana から「何か」を経由して Ganglia につなぐ
21
- 22. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
○ Grafana の datasource として Ganglia を指定
22
- 23. Grafana datasource
● datasource とは
○ Grafana がデータを取得する先のこと
● 公式サポートの datasource
23
● Alertmanager
● AWS CloudWatch
● Azure Monitor
● Elasticsearch
● Google Cloud Monitoring
● Graphite
● InfluxDB
● Loki
● Microsoft SQL Server
● MySQL
● OpenTSDB
● PostgreSQL
● Prometheus
● Jaeger
● Zipkin
● Tempo
● Testdata
- 24. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
○ Grafana の datasource として Ganglia を指定
■ 公式には存在しない
■ datasource として動くプラグインを実装する必要がある
24
- 26. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
○ Grafana の datasource として Ganglia を指定
■ 公式には存在しない
■ datasource として動くプラグインを実装する必要がある
26
ちょっと大変そう……
プラグインの実装:保留
- 27. Grafana から Ganglia につなぐ
1.Grafana から直接 Ganglia につなぐ
1.Grafana から「何か」を経由して Ganglia につなぐ
27
- 28. Grafana から Ganglia につなぐ
2.Grafana から「何か」を経由して Ganglia につなぐ
○ Ganglia につながりやすそうな「何か」を
Grafana の datasource として指定
○ datasource として動くプラグインを実装しなくてもよい
28
- 29. Grafana datasource
● datasource とは
○ Grafana がデータを取得する先のこと
● 公式サポートの datasource
29
● Alertmanager
● AWS CloudWatch
● Azure Monitor
● Elasticsearch
● Google Cloud Monitoring
● Graphite
● InfluxDB
● Loki
● Microsoft SQL Server
● MySQL
● OpenTSDB
● PostgreSQL
● Prometheus
● Jaeger
● Zipkin
● Tempo
● Testdata
- 30. Grafana datasource
● datasource とは
○ Grafana がデータを取得する先のこと
● 公式サポートの datasource
30
● Alertmanager
● AWS CloudWatch
● Azure Monitor
● Elasticsearch
● Google Cloud Monitoring
● Graphite
● InfluxDB
● Loki
● Microsoft SQL Server
● MySQL
● OpenTSDB
● PostgreSQL
● Prometheus
● Jaeger
● Zipkin
● Tempo
● Testdata
👉
- 37. Grafana から Ganglia に つなぐ
37
Grafana
Graphite
(Web)
Ganglia
datasource
Graphite
サポート外のデータベースへ
アクセスする仕組み
を使って Ganglia にアクセス
既存環境は
変更なし
- 38. 今回の内容
● どうにかして Grafana から Ganglia につなぐ
○ このとき Ganglia 側にはできるだけ手を入れない
● 既存環境で使っている UIと同等の情報を
Grafana で得られるようにする
38
Complete
- 39. 今回の内容
● どうにかして Grafana から Ganglia につなぐ
○ このとき Ganglia 側にはできるだけ手を入れない
● 既存環境で使っている UIと同等の情報を
Grafana で得られるようにする
39
Complete
- 41. 既存環境で使っている UI
41
● 40種類超のグラフ
○ プロジェクト単位
■ 全体のネットワーク帯域,
リクエスト数, レスポンスタイム
■ ミドルウェアの情報
● HTTPサーバ,データベース, key value store, …
■ サーバの状況
○ サーバ単位
■ CPU利用率などの情報
■ ミドルウェア情報
- 45. グラフ描画に対する式の変換 (例)
● 既存UI におけるグラフ生成命令
DEF:'cpu_user'='~/cpu_user.rrd':'sum':AVERAGE
DEF:'cpu_nice'='~/cpu_nice.rrd':'sum':AVERAGE
DEF:'cpu_system'='~/cpu_system.rrd':'sum':AVERAGE
DEF:'cpu_idle'='~/cpu_idle.rrd':'sum':AVERAGE
DEF:'cpu_wio'='~/cpu_wio.rrd':'sum':AVERAGE
AREA:'cpu_user'#3333bb:'User'
STACK:'cpu_nice'#ffea00:'Nice'
STACK:'cpu_system'#dd0000:'System'
STACK:'cpu_wio'#ff8a60:'WAIT'
STACK:'cpu_idle'#e2e2f2:'Idle'
● Grafana: Graphiteの関数
aliasSub(aliasSub(aliasByNode(~.~.
~.cpu_{user,nice,system,idle,wio}.sum, 3), 'cpu_', ''),
'wio', 'wait')
45
- 60. まとめ
● どうにかして Grafana から Ganglia につなぐ
○ Grafana → Graphite → Ganglia の順でアクセス
■ Graphite から Ganglia にアクセスする仕組みを実装
● 既存環境で使っている UIと同等の情報を
Grafana で得られるようにする
○ 手作業で同等のグラフを移植
○ repeat panels, 変数・テンプレートの機能を使用
60
Hinweis der Redaktion
- ガングリアの UI にグラファナを追加する話をします
KLab オンプレ DSAS の運用担当をしております宮崎といいます。
よろしくお願いいたします。
- タイトルに知らないものがあるかもしれないと思いましたので、先に軽く説明しておきます。
まずはガングリアについて
- ガングリアというのは
ぶんさん かんし システム
というものになります。
どういうものかというのを
図で軽く説明します
- サーバ上の
CPU, メモリ, I/O, ネットワークといった筐体の計測量、
ミドルウェアの計測量を
ガングリアで収集して
(クリック)
別のところで動かしているガングリアに送り、
データベースに集めます
(クリック)
こういったガングリアをガングリア モニタリング コアと言います
(クリック)
あともう一つ.
ガングリア モニタリング コアと
データベースに集めたデータにアクセスして
ユーザにグラフを見せる UI があります
(クリック)
これをガングリア ウェブと言います。
- こちらがガングリア ウェブの画面の例になります。
この画面は既存環境、DSASで実際に使っている UI で、
ガングリア ウェブに手を入れた派生版となります。
- 次にグラファナについて軽く説明しておきます
- グラファナが データベースやログ、アプリなどに問い合わせを行い
(クリック)
ユーザにグラフを見せたり、値などを表示したりします。
(クリック)
また、閾値を超えたなどのときに警報ということでメールなどの通知を出すこともできます。
- こちらがグラファナの画面の例になります。
この画面は
グラファナの配布元
グラファナラブにある
デモ画面の
スナップショットです。
- このような画面を持つ
グラファナを追加したいという
話になります
- 動機付けとしては2点、
そもそもなんでグラファナを使いたいのか、
あと
置き換えではなくて、
どうして追加なのか、ということを話します
- まず 1番目, なぜグラファナを使いたいのか
- 動機としては, UI だけでも刷新したいということです。
既存環境で使っている UI がぶっちゃけ古いというものです。
この図にあるとおり、
ドロップダウンリストとか
ボタンだったりの表示が
ふたむかし前みたいなので、
これを新しめにしたい、ということです。
- そして、多数のグラフがあるとページ全体の表示に時間がかかるという問題があります。
個々のグラフの 1枚が画像データ 1個分、リクエスト 1回投げられる形です。
サーバの割り当てが多くなると 1ページに多くのイメージを表示する形になるのですが、
全部の画像をロードできるまでページが表示されない状態になります。
- もしグラファナを入れて良さそうであれば、
既存環境で使っているUIを捨てて乗り換えるといったことができるんじゃないかなぁと考えました。
それには既存環境で使っているUIと同じ情報が得られることができればいいんですけどねーという感じです。
- 次に
グラファナに置き換えではなくて、
追加なのはなんでかという話になります
- その理由は既存環境で使っているUIは、
しばらくはそのままにしておきたいということです。
当面の間はユーザはグラファナを見てもいいし、
既存環境の UI をそのまま使ってもらってもよい。
つまり、並存期間をもうけましょうということです。
- 追加の理由としては、戻しやすいということも挙げられます。
もしグラファナの導入がうまくいかなかったら、
そのままグラファナを削除すればいいじゃんという形です。
- そういうわけで、今回の発表の内容としてはこの 2点です。
まず、どうにかしてグラファナからガングリアにつなぐ。
このときに、できるだけガングリア側には手をいれないようにする必要があります。
これは、先ほどいいました、削除しやすくするためです。
次に、既存環境で使っているUIと同等の情報をグラファナで得られるようにするというものです。
これはユーザに使ってもらうために必要です。
これができて初めて移行できるかどうかが決められるようになります。
- それでは 1番目,
どうにかしてグラファナからガングリアにつなぐ話をします。
- ここでは 2パターン考えてみました。
1番目は、グラファナから直接ガングリアにつなぐ方法
2番目は、グラファナから、
間接的に、
何かを経由してガングリアにつなぐ方法です。
- まず 1番目, グラファナから
直接
ガングリアにつなぐ方法を考えてみます。
- 直接つなぐ方法として、グラファナのデータソースとして
ガングリアを指定できればいいよねと考えられます
- ここでデータソースという言葉が出たので、軽く説明しておくと、
データソースというのはグラファナがデータを取得する先のことです。
データのソース、そのままです。
公式サポートのデータソースはここに挙げられているものになります。
Alertmanager,
AWS CloudWatch,
Azure Monitor
といったものです
この中にはガングリアというものがあるかというと、
(少し間を置く)
存在しません
- つまり、公式には存在しないわけです。
なので、データソースとして動作するプラグインを実装する必要があります。
- データソースのプラグインの例として、
Simple JSON Datasource という
グラファナの配布元であるグラファナラブがメンテナンスしている
データソース プラグインを挙げておきます。
これはギットハブに上がっているものです。
このリポジトリを見てもらえるとわかるのですが
実装すべきものがそこそこあるように見えます。
- ということで、ちょっと大変そうと考えました。
(クリック)
なので、グラファナのデーターソース プラグインの実装は、
一旦保留ということにします。
- グラファナからガングリアに直接つなぐことは一旦保留したので、
次に、グラファナから、
間接的に「何か」を経由して、
ガングリアにつなぐ
といったことを検討したいと思います。
- 逆に言えば、ガングリアに繋がりやすそうな「何か」を
グラファナのデータソースとして指定できればいいわけです。
そうすることでグラファナのデータソースとして動くプラグインを実装しなくても良くなります。
- 先ほどの
グラファナのデータソースのページに戻りますが、
公式サポートのデータソースの中に
ガングリアに繋がりやすそうなものがあるかなーと探してみたところ、
- グラファイトというものが使えそうかなーと考えました。
- グラファイトというのは、
数値の時系列データの格納と、
データのグラフ化を行います。
- 構成としては、a, b, c. の 3つです
時系列データベースそのものと
a.の時系列データベースを読み書きするためのもの
あと, 時系列データベースにアクセスするためのウェブ UI
ちなみに、c. はグラファイト ウェブと呼ばれるものです
グラファナは、このグラファイト ウェブにアクセスしてデータを取得します。
- そのグラファイト ウェブは
先ほど触れたとおり、時系列データベースにアクセスするための Web UI で、
公式サポートのデータベースとしては、
ウィスパー、これはグラファイトを構成する時系列データベースになります
あと、セレスというものになります。
この 2つしかないということは、
(クリック)
ガングリアはサポート外になります。
- ただ、グラファナのときと似たように、
サポート外のデータベースへアクセスする仕組みを持っています。
- そのサポート外のデータベースへアクセスする仕組みの例として、
サイアナイトファインダーというものを挙げておきます。
これはグラファイトのドキュメントから辿ったもので、
ギットハブにリポジトリがあります。
グラファイトのドキュメントと、このリポジトリの中身を軽くみたところ、
実装するにはそこまで大変じゃなさそうな印象がありました。
- グラファナのデータソースを実装するよりは簡単そうだな―ということで
(クリック)
ここでガングリアに接続するための実装を行いました。
(クリック)
これによりガングリアへのアクセスができるようになりました。
- これまでの流れをまとめると、こんな図となります。
グラファナからデータソースとしてグラファイトを指定し
グラファイトは
サポート外のデータベースへアクセスする仕組みを使って
ガングリアにアクセスします。
ガングリアには今回全く手を触れていません。
ですので、既存環境には
当然
影響なし、
変更なしということになります。
- ということで。
1番目、どうにかしてグラファナからガングリアにつなぐというミッションはこれで終了です。
つなげることができました。
- グラファナからガングリアのデータを見ることができるようになったので、
つぎに, 既存環境で使っている UI と同等の情報をグラファナで得られるようにする、
というのを説明します。
- まず、前提として、発表の冒頭付近でも少し話した既存環境で使っている UI について、触れておきます。
この UI はガングリア ウェブの派生版です。
いにしえのときより つかわれている ひでんのぐらふ になります
- 具体的には 40種類以上のグラフで構成されています。
プロジェクト単位のものとして、
全体のネットワーク帯域、リクエスト数、レスポンスタイムとか
ミドルウェアの情報として、
HTTPサーバだったり、データベースだったり、キーバリューストアだったりの情報が出ていたり
もちろんサーバの状況もグラフとして出ています。
また、サーバ単位としては、
CPU利用率とかメモリとかの一般的な情報のほかに、
サーバ上で動いているミドルウェアの情報も出ています。
- そういった既存環境で使っている UI の情報と同等のものを
グラファナ上で画面を作りこみます。
- とりあえずここでは 3点。
グラフの描画の式の変換
同種類の情報を対象サーバ全てで表示
他プロジェクトでも再利用可能にする
ということについて触れます。
- まずグラフの描画の式の変換について。
- グラフの描画に対する式の変換の例として、CPUの利用率グラフを挙げてみます。
まず、既存環境で使っている UI でグラフを描画するにあたっては、このような命令をずらずらと書きます。
(クリック)
そうしてできた図が真ん中下の図になります。
(クリック)
これと同等のグラフをグラファナで書くときには、
グラファイトの関数を使って、右側のような式を書いて、ごにょごにょすると
(クリック)
こういったグラフ、似たようなグラフが出来上がります。
こうした式の変換を(次ページ)
- 自動化できるといいよね、となるわけですが、
(クリック)
これはできません。
なので、
- 手作業で式の変換を行います。
(クリック)
40種類以上
全種類おこないます
これは大変でした
- ということで、がんばって手作業で式の変換は終わり、
同種類の情報を対象サーバ全てで表示というのを考えてみます。
- Webサーバのステータスをサーバごとに表示したものを例として出します。
ここでは16台分のサーバの情報が出ています。
これをグラファナで表示したらどうなるかというと
(クリック)
右側の図のような感じです。
グラファナのリピートパネルという機能を使うと、
見た目もだいたい同じようにできました。
- 最後、3番目に他プロジェクトでも再利用可能にしようと考えました。
- グラファナには変数とテンプレートという再利用の仕組みがあるので、それを活用します。
変数は図のようにグラファナのダッシュボードというもののところで
設定することができます。
この変数はどこで使えるかというと
(クリック)
クエリ、問い合わせだったり、
タイトルだったり、
繰り返しのところだったり、
リンクに埋め込んだりすることができます。
- ということで。画面の作りこみとして 3点行いました
グラフ描画の式の変換として、
これは手作業で頑張りました
同種類の情報を対象サーバ全てで表示するにあたって、
リピートパネルの機能を使いました
他のプロジェクトでも再利用可能にするために、
変数とテンプレートを使いました
以上 3点を行いました。
- その結果
- 既存環境で使っている UI ではこうなっていたのが、
(クリック)
グラファナではこんな感じになりました
- 拡大したものがこちらになります
これが
- こうなりました
- もう1個
拡大したものを挙げておくと
これが
- こうなりました
- 最後にまとめです
- 1点目, どうにかしてグラファナからガングリアにつなぐには、
グラファナからグラファイトを通してガングリアの順でアクセスすることで実現できます。
このときグラファイトからガングリアにアクセスする仕組みを実装しました
2点目、既存環境で使っている UI と同等の情報をグラファナで得られるようにするには、
手作業で同等のグラフを移植するような形で式を変換しました
あとはリピートパネルとか、変数・テンプレートの機能を使用したりしました
- 以上で発表を終わります。
ありがとうございました。