ディープラーニング・マイニングで常時稼働するマシン(Debian Stretch 9.3)の温度監視をZabbixで行います。

前回でZabbixの導入を行いました。本記事ではZabbixの設定を行います。

セットアップ

httpサーバーにブラウザでアクセスして設定を行います。 まずはCheck of pre-requisitesで設定が正しいか確認をします。 全部OKだったのでNextで次へ進みます。

DBコネクションを再度設定する必要がありました。 MySQL, localhost, port 0, DB name zabbix, User zabbix, passwordを以前設定したもので入力します。

server optionはlocalhost, port 10051のデフォルトで次へ進みます。

設定ファイルの/usr/share/zabbix/conf/zabbix.conf.phpはlnで/etc/zabbix/web/zabbix.conf.phpとなっているのですが、 参照先の本体が存在しませんでした。 WebUIから作成できなかったのでいったん$ sudo rm /usr/share/zabbix/conf/zabbix.conf.phpで削除してWebUIからDLしたファイルを直接書き込みます。

これで/zabbix/index.phpに再度アクセスし、user:admin, pass zabbixでログインできるようになりました。

ログイン後、Administration→Userから、Adminのパスワードと言語を変更しておきます。 また、後々必要になるので、メディアからAdminのメールアドレスを登録しておきます。 root@localhostとか、xxxx@gmail.comなど、適切なものを設定します。

監視の有効化

設定→ホストでZabbix Serverのステータスの「無効」をクリックすると監視が有効になります。

監視

監視データ→概要からZabbix Server→タイプ「データ」の選択で監視データが閲覧できます。

通知設定

管理→メディアタイプから設定します。 Jabber、SMSは無効にしておいて、今回はGmailのSMTPパラメータを設定します。

  • タイプ: メール
  • smtpサーバー: smtp.gmail.com
  • port: 465
  • SMTP helo: smtp.gmail.com
  • 送信元: xxxx@gmail.com
  • セキュリティ: SSL/TLS
  • SSLピア、ホストはOff
  • 認証はUsername&Password
  • ユーザ名: xxxx@gmail.com
  • パスワード: xxxx
  • 有効: On

また、実行条件を管理→ユーザー→Admin→メディア→追加で登録します。
タイプはEmail、送信先は適当なものとして、メール送信に有効な時間帯、深刻度を設定します。

設定→アクションより、イベントソースにトリガーを選択してアクションの作成を行います。今回は各種タブより、以下を設定しました。

  • 名前: send Gmail
  • 実行条件 (and)
    • メンテナンスの状態 期間外 メンテナンス
    • トリガーの深刻度 >= 警告
  • 実行内容
    • Adminに送信
    • メディア: Email
  • 復旧時実行内容
    • Adminに送信
    • メディア: Email

また、メッセージにItem values: {ITEM.NAME1}: {ITEM.VALUE1}を加えておくと、具体的な値が分かって良さそうです。

監視対象の設定

監視したいのはHDD, CPU, GPUリソースの状況になります。 温度は標準では選択できないので次の手順で選択できるようにします。

CPU

まずはセンサー名の確認をsensorコマンドで行います。

$ sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
  temp1_input: 27.800
  temp1_crit: 119.000
temp2:
  temp2_input: 29.800
  temp2_crit: 119.000

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:
  temp1_input: 27.000
  temp1_max: 80.000
  temp1_crit: 100.000
  temp1_crit_alarm: 0.000
Core 0:
  temp2_input: 25.000
  temp2_max: 80.000
  temp2_crit: 100.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 27.000
  temp3_max: 80.000
  temp3_crit: 100.000
  temp3_crit_alarm: 0.000

そしてZabbixではアイテムの登録でCPU温度の監視登録を行います。 設定→ホスト→サーバーを選択→アイテムからアイテムの作成をセンサーの数だけ行います。

  • 名前: Core Temp x
  • タイプ: Zabbixエージェント
  • キー: sensor[coretemp-isa-0000,temp1]
  • データ型: 数値(浮動小数)
  • アプリケーション: CPU

上記以外はデフォルト値で設定し、今回はtemp1,2,3について入力しました。 また、設定→ホスト→サーバー→ グラフを選択→グラフを作成と選択して、CPU温度グラフを作成します。 名前をCore Temperatureとして、先ほど追加したCPU温度アイテム3つを追加します。

そして本題の監視設定を行います。 設定→ホスト→サーバー→トリガーを選択し、トリガーを作成しました。 条件式として以下のようにコアの温度が3回の計測で50℃以上となったら警告を送るように設定しました。 この温度や条件式については運用結果を踏まえて適宜変更する必要がありそうです。

{Zabbix server:sensor[coretemp-isa-0000, temp1].last(#3)}>50 or
{Zabbix server:sensor[coretemp-isa-0000, temp2].last(#3)}>50 or
{Zabbix server:sensor[coretemp-isa-0000, temp3].last(#3)}>50

なお、この条件式は後日修正しています。内容については以下の記事を参照してください。

GPU温度監視

デフォルトではZabbixでGPUの監視は行えないが、テンプレートの追加により行えるようになります。 今回は以下のリンクにあるように、nvidia-smiを用いたテンプレートが公開されているのでそちらを使用させて頂きます。

まずはzabbix-agentの設定をおこないます。 /etc/zabbix/zabbix_agentd.confに以下のパラメータを追記します。

### Nvidia GPU Option
UserParameter=gpu.temp,nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits -i 0
UserParameter=gpu.memtotal,nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits -i 0
UserParameter=gpu.used,nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits -i 0
UserParameter=gpu.free,nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits -i 0
UserParameter=gpu.fanspeed,nvidia-smi --query-gpu=fan.speed --format=csv,noheader,nounits -i 0
UserParameter=gpu.utilisation,nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits -i 0
UserParameter=gpu.power,nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits -i 0

そしてagentの再起動を行います。

$ sudo systemctl restart zabbix-agent

ブラウザより、設定→テンプレート→インポートより、上記で後悔されているnvidia_smi_template.xmlを追加します。

設定→ホスト→サーバーを選択→テンプレート→新規テンプレートをリンク Template NVidia Sensorsをリンクして追加します。 これでグラフ表示なども追加されるようになります。 トリガーとしても95℃以上で軽度の障害として通知されるようになっていますが、 これに加えて80℃でも警告入れるように設定しておきます。

設定→ホスト→サーバー→トリガーを選択し、トリガーを作成します。 条件式として、コアの温度が3回の計測で80℃以上となったら警告を送るようにしました。

{Zabbix server:gpu.temp.last(#3)}>80

テスト

とりあえずこれで一通りの設定は終わりました。

ひとまずgpu温度の閾値を20度とかに設定してメール通知が正常に行えるかテストしてみます。 この状態で障害としてダッシュボードに表示され、メールが正しく受信できることを確認できました。

参考

次の記事を参考にしました。

今後

現状のメール通知だけだと気づかないことも多いため、Slackへも通知が飛ぶように設定しておきます。