PrometheusでサーバPCや自前アプリを監視してみた

こんちには。レトリバ製品開発部の高田 (twitter: @t-tkd3a)です。

この記事は 12/18 に行ったセミナーのフォローアップ記事です。

当日は動画の配信も行っていたのですが、音声が配信されたなかったトラブルが後から分かったため、スライドとキャプションの構成で掲載します

2 f:id:tomomi-takada:20191223190318p:plain

  • まず目次です。
  • 自己紹介、プロメテウスについての概要、使用例として、開発PC群の状態監視、自前アプリの監視例を示します。
  • 今日はだいたいこの流れでお話していきます。

3 f:id:tomomi-takada:20191223190328p:plain

  • レトリバには2018年の4月に入社しました。主に音声認識関連の開発に携わってます。
  • 趣味は、子供らが生まれてからは、家族での旅行が趣味となってます。上の子が鉄道好きなため、鉄道関連の施設やイベントをまわったり、乗りにいったりしています。

4 f:id:tomomi-takada:20191223190349p:plain

  • ベーマガ直撃世代です。
  • レトロPCが新製品だったころから趣味にしてました。
  • ゲームするには紙面からプログラムを入力するのが当たり前な時代を経験しています。
  • 2~3年毎に新しい機種を入手してます。いま振り返っての感覚だと、結構頻繁に買い替えてるようにも思えますが、
  • 当時の2~3年わ、えらく長かったな~との印象も残ってます。
  • 大学時代には98派だの68派だのと、キノコタケノコをやっていたのを、懐かしく思ってます。

5 f:id:tomomi-takada:20191223190353p:plain

  • PC98の後は、DOS/V派というか、部品を買い集めて組み立てる PC自作派になりました。
  • 二年に一回、なにかと理由をつけては、PCを組み立てました。
  • おぼえている所で、K6athlonPen4、Pen-M、Core2Dio、Core-i7 のマシンを組み立ててます。
  • 時代が下るにつれ、組み立ては楽になってきてますね。
    • 90年代だと、マザーボードの他に、グラフィックカード、USBカード、LAN、サウンドカード、SCSIカードを付ける必要があって、どのカードが良いとか相性とか値段とかドライバのインストールのし易さだとか、あーだこーだと選定していましたね。
    • いまだと、マザーボード一枚でもいいし、GPUを追加する場合があるってくらいですものね。

6 f:id:tomomi-takada:20191223190357p:plain

  • 最近、会社で機械学習用のPCを組み立てる機会がありました。
  • パーツの状況やら、選定時に注意する事やら、いろいろと浦島太郎状態でしたが、自前で選定するとして調べなおすと、昔の血が騒ぐというか、楽しいですね。
  • あっというまに2台を組み上げて、もう少し組みたいとか思えてたりもします。
  • OSやら環境構築も、流れ作業的にサクサク進みました。

7 f:id:tomomi-takada:20191223190403p:plain

  • ベアボーンPC や ラズパイ も大好きです。
  • ネットワークを介しての実験環境も、これらで組んで、実験おこなってます。
  • 気が付くと、両手に収まらない数の実験用PCをほぼ常時 動かしてるようになりました。

8 f:id:tomomi-takada:20191223190407p:plain

  • 数が多くなると、稼働状況を俯瞰したくなりました。

  • 不調があったときに、どこが要因か、何時からなのか、の把握が困難で、一台いちだい、SSHでログを確認してまわるのも、けっこう手間取ります。

  • また、実験の進捗状況や、途中経過の集計を、複数台のPCから集めて、手動で集計というのも手間がかかり、どうにか楽にしたいと思うようになりました。

9 f:id:tomomi-takada:20191223190411p:plain

  • それ、監視アプリ使えば解決できるよ!

  • 監視アプリでは

    • 監視対象PCの状態、シーピーユーやメモリの使用率 温度等を 定期的に取得してくれて、
    • 自前アプリからの状態も定期的に取得させれて、
    • 時系列でのグラフ化をしてくれて、
    • アラート出すこともやればできる。
  • おお、これは便利!!

  • Webで調べていると、監視アプリは何種類かある、どれがいいのだろう?

  • とりあえず、プロメテウスを使ってみることにしました。

10 f:id:tomomi-takada:20191223190414p:plain

  • 監視アプリを調べてる時に、ちょうどよく、オライリーから新発売の参考書が出てて、読んでみると良さそうに思えたのもあります。
  • こういう縁って大事よね。

11 f:id:tomomi-takada:20191223190417p:plain

  • プロメテウスの概要です。
  • プロメテウスを稼働させるPCに、プロメテウスと、ノードエクスポーターと、グラファナをインストールします。
  • 監視対象のPCには、ノードエクスポーターをインストールします。
  • プロメテウスは、データを収集するアプリ、ノードエクスポーターは状態を出力するアプリ、グラファナは収集されてる値をグラフ化するアプリです。
  • グラファナのグラフは、WEBブラウザで表示します。

12 f:id:tomomi-takada:20191223190420p:plain

  • グラファナの画面例です。Webブラウザから見ます。
  • CPU使用率、GPU使用率、ホスト側のメモリ使用率、GPU側のメモリ使用率、ホスト側温度、GPU側温度を、時系列で表示させてます。
  • また、ネットワークスイッチの死活も表示させてます。
  • 画面は定期的に更新されます。

13 f:id:tomomi-takada:20191223190423p:plain

  • プロメテウス本体 について です。

14 f:id:tomomi-takada:20191223190426p:plain

  • 情報源から 状態を取得して、データベースに格納し、クリエで出力します。
  • 設定に従って情報源に プルを行います。

  • ノードエクスポーターなどが情報源です。

  • データベースは独自のものです。保存期間は デフォルト15日ですが、設定で変更可能です。
  • データベースからの値の取得は、クリエを用いて行います。
  • グラファナは グラフ表示に必要な情報を、クリエで要求してきます。

15 f:id:tomomi-takada:20191223190429p:plain

  • 図ににしてもう一度
  • プロメテウスは 情報源から 状態を プルで取得して、データベースに格納し、グラファナは グラフ表示に必要な情報を、要求してきます。

16 f:id:tomomi-takada:20191223190433p:plain

  • プロメテウスの冗長化は、ほとんどの用途では、独立したプロメテウスを並べて稼働させることで事足りる様です。
  • まったく同じ設定のもの2台でもいいし、情報源からの取得時間間隔を変えたり、保存期間を変えるなどもアリの様です。

17 f:id:tomomi-takada:20191223190435p:plain

  • 情報元のエクスポーターにはいくつか種類があります。私が有用に感じたものを紹介します。

  • ノードエクスポーター

    • シーピーユー使用率、メモリ使用率、温度、ネットワーク使用帯域、ストレージ使用率 を出力します。

18 f:id:tomomi-takada:20191223190439p:plain

19 f:id:tomomi-takada:20191223190442p:plain

  • NVIDIA DCGM エクスポーター
    • GPU使用率、GPU メモリ使用率、GPU 温度、PCIバス通信帯域、を出力します。
  • NVIDIA から提供されてます。

20 f:id:tomomi-takada:20191223190445p:plain

21 f:id:tomomi-takada:20191223190449p:plain

  • SNMP エクスポーター
  • ネットワークスイッチ等から、SNMP を用いて 状態を取得します。
  • ネットワークスイッチの死活監視に、SNMP応答時間 を使用できます。
  • また、ネットワークスイッチのポート毎 に 通信量 や エラー数 も取得できます。

22 f:id:tomomi-takada:20191223190452p:plain

23 f:id:tomomi-takada:20191223190455p:plain

  • プロメテウス や エクスポーター の インストール方法についてです
  • ホストに直接インストールする方法と、docker でインストールする方法が用意されてます。
  • 公式webページ の手順に従うと、すんなりインストールできました。

  • 自分でやってみた感想だと、プロメテウス本体、ノードエクスポーター、SNMPエクスポーター は ホストに直接入れるのも、dockerで入れるのも、手間は変わらなかったです。

  • ですが、NVIDIA DCGM エクスポーター は ホストに入れるには前提となるライブラリのインストールが面倒で、docker の方が楽でした。

24 f:id:tomomi-takada:20191223190458p:plain

  • グラファナのグラフのパーツ
  • 公式のものでも、いくつもの種類が用意されてます。私の好みに思ったのを紹介します。

  • 現在値を示すゲージでは、こういう表示が用意されてます。

  • 時系列を示すグラフにも、こういう表示が用意されてます。
  • 見やすいと思ったものを選択できます。
  • プラグインで、サードパーティーからもゲージやグラフが用意されているようです。

25 f:id:tomomi-takada:20191223190503p:plain

  • 私が作ったダッシュボード(画面)です

  • 機器の状態の一覧用です

    • GPU使用率、CPU使用率、ホスト側のメモリ使用率、GPU側のメモリ使用率、ホスト側温度、GPU側温度を、時系列で表示させてます。

26 f:id:tomomi-takada:20191223190507p:plain

  • GPUマシン向け
    • CPU GPU使用率、 メモリ使用率、ホストとGPUの転送量、ディスクアクセス、温度を表示させてます。

27 f:id:tomomi-takada:20191223190511p:plain

  • ネットワーク状況の一覧用です
    • スイッチの死活監視、各ネットワークスイッチ側の送受信量、各PC側の送受信量、ネットワークパケットエラー を表示させてます。

28 f:id:tomomi-takada:20191223190515p:plain

  • ネットワークスイッチの詳細、各ポート用の画面です
    • ネットワークスイッチの各ポートの、パケットエラーの有無を表示させます。

29 f:id:tomomi-takada:20191223190519p:plain

  • 自前アプリとの連携 もしたくなります。
  • アプリの稼働状況をグラフ化したくなります。
  • 何時頃に、どれ位のリクエスト受けて、処理時間どれ位だったか、機械学習を回した時 エラー率が どう下がっているか、表示させたくなります。
  • また、問題発生時の切り分けにも、メモリ使用量、 CPU使用率、 温度、を時系列で比較したくなります。

30 f:id:tomomi-takada:20191223190523p:plain

  • プロメテウスには、自前アプリとの連携方法が2通り用意されてます。
  • 各アプリに HTTPサーバを実装する方法と、ノードエクスポーターを介してプロメテウスに出力する方法です。

31 f:id:tomomi-takada:20191223190526p:plain

  • 自前アプリの連携例 その1
  • 機械学習の推移をグラフ化させてみました。CPUやGPUの使用率や、メモリ使用率、温度、の推移と並べて表示しています。

32 f:id:tomomi-takada:20191223190530p:plain

  • 自前アプリの連携例 その2
  • ヒートラン実験の監視にも用いました。
  • Queueを持つサーバクライアント型の自前アプリで、Queueの推移、単位時間でのリクエスト処理数、CPU使用率、メモリ使用率 を表示させてます。
  • 2週間以上連続で稼働させてても安定して動作しているのが、一目でわかりました。

33 f:id:tomomi-takada:20191223190535p:plain

  • まとめ、監視アプリは使うと便利です。
    • 監視対象PCの状態 CPUやメモリの使用率 温度等を 定期的に取得してくれて、
    • 自前アプリからの状態も定期的に取得させれて、
    • 時系列でのグラフ化をしてくれて、アラート出すこともやればできる。
  • おお、これは便利

以上です。ではまた。