Debian Stretch 9.3でZabbixを用いた温度監視の設定を行います。

今回は統合監視サーバーであるZabbixに必要なNgnixとMariaDBのインストールを実行します。 前回でマシンの温度監視に必要なパッケージの確認を行いました。

Zabbixを導入する理由

先の記事でsensors, nbidia-smi, hddtempでリソースの温度確認が行えることが分かりました。そのため、単に温度監視をするだけならシェルスクリプトで文字比較を行うものを記述し、cronで定期的に実行すればよさそうです。

ただ、それらの監視は簡易的なものとなり、ディープラーニングやマイニングの長時間運用における負荷の遷移などを統合的に監視するにはログが追いにくいという問題が発生するかと思われます。

また、logwatchなどでは毎日ログの確認は行えますが、急な温度上昇に対しては即応性が書けるという問題もあります。

そこで、リソース監視サービスであるZabbixを導入し、温度や負荷を継続的に監視することにします。なお、Zabbixはサーバーとエージェントに分かれており、複数のエージェントを1つのサーバーでネットワーク越しに監視できるのですが、本環境ではサーバーとエージェントを同一のマシンにインストールしたローカル監視を行うものとします。

Zabbixに必要なパッケージ

Zabbixはブラウザ上で設定やログの確認などが行えます。そのためhttpサーバーが必要となります。また、ログの保存に何らかのDBが必要となります。

本環境ではhttpサーバーに軽量さに定評のあるnginxを使用し、DBにはMariaDBを使用することにします。

Ngnix

まずはnginxの導入を行います。

インストール

公式の手順に従ってインストールを行います。

今回はnginxのStable版を追加することにし、keyringの追加を行います。

$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

そして/etc/apt/sources.listにリポジトリの参照先として以下を追加します。

# for nginx stable
deb http://nginx.org/packages/debian/ stretch nginx
deb-src http://nginx.org/packages/debian/ stretch nginx

追加後、nginxをインストールします。

$ sudo apt update
$ sudo apt install nginx

設定

/etc/nginx/nginx.confが基本設定、/etc/nginx/conf.d/xxx.confが追加設定となります。

まずは設定のバックアップを取っておきます。

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.
org

ひとまず次のように/etc/nginx/nginx.confを設定しました。 デフォルトの設定にローカルネットワークからのアクセスに限定しただけになります。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    allow 127.0.0.1;
    allow 192.168.0.0/24;
    deny all;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

設定チェックは次のコマンドで確認できます。

$ sudo nginx -t -c /etc/nginx/nginx.conf

httpサーバーの稼働

ufwにより、httpポートをローカルアクセスのみ許可として開放し、nginxのサービスを起動します。

$ sudo ufw allow from 192.168.0.0/24 to any port 80
$ sudo ufw reload
$ sudo ufw status
$ sudo systemctl start nginx

ここで、次のようなエラーが発生しました。

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

80portに割り当てられないとのことです。 systemctl statusで状態を確認するとnginxはfailedになって起動していないようですが、どうやらnginxプロセスが起動している模様です。

$ sudo lsof -i:80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3736  root    6u  IPv4  28839      0t0  TCP *:http (LISTEN)
nginx   3737 nginx    6u  IPv4  28839      0t0  TCP *:http (LISTEN)

そこで、このプロセスを終了させます。

$ sudo kill 3736

これで正常に起動できるようになりました。

MariaDB

続いてMariaDBの導入を行います。

インストール

$ sudo apt install mariadb-server
$ sudo mysqld --version
mysqld  Ver 10.1.26-MariaDB-0+deb9u1 for debian-linux-gnu on x86_64 (Debian 9.1)

設定

/etc/mysql/mariadb.conf.d/50-server.cnfを編集し、設定を行います。

character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci
↓
character-set-server  = utf8
# collation-server      = utf8mb4_general_ci

設定が完了したら$ sudo systemctl restart mariadbでサービスに設定を反映させます。

初期設定

DBの初期設定を順に行い、rootパスワードなどを設定します。

$ sudo mysql_secure_installation

ウィザードが表示されるため、流れに沿って設定していきます。 rootパスワードの設定、匿名ユーザーは削除、rootのリモートログインの無効化、テストデータベースは削除し、特権情報もリロードしました。

確認

データベースの確認もしておきます。

$ sudo mysql -u root -p
MariaDB [(none)]> select user,host,password from mysql.user;
MariaDB [(none)]> show databases;
MariaDB [(none)]> exit

参考

公式の手順以外には次の記事を参考にしました。

次回

次回は続いて、nginxにphpを連携させます。