RaspberryPi::cacti (nginx + php-fpm)

cactiでapacheを稼働させることを試したので、次はnginxを使ってみます。
少しは軽くなることを期待して。。。

apacheを起動しないようにします。

# systemctl disable httpd.service

nginxとphp-fpmをインストールします。

#pacman -S nginx
#pacman -S php-fpm

php.ini等はapacheの時に変更しているので、今回は変更なし

php-fpmを127.0.0.1:9000で立ち上げることにします。設定ファイルは/etc/php/php-fpm.confにあります。

#listen = 127.0.0.1:9000
listen = /run/php-fpm/php-fpm.sock
 ↓
listen = 127.0.0.1:9000
#listen = /run/php-fpm/php-fpm.sock

起動時に立ち上がるようにしておきます。

#systemctl enable php-fpm.service

nginxの設定をします。今回はインターネットへ公開するわけでないので、扱いやすいようにしています。

    server {
        listen       80;
        server_name  localhost;
        root /usr/share/nginx/html;     (追加)
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
#            root   /usr/share/nginx/html;  (コメント)
            index  index.html index.php; (index.phpを追加)
        }

        ... (途中略)
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
#            root           html;  (コメント)
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; (変更)
            include        fastcgi_params;
        }

cactiは/usr/share/webapps/cactiにインストールされているので、nginxのdocument rootへシンボリックリンクを張ってます。

# cd /usr/share/nginx/html
# ln -s /usr/share/webapps/cacti .

nginxを起動時に立ち上がるように設定します。

#systemctl enable nginx.service

/usr/share/nginx/html以下全てのディレクトリに対してphpスクリプトを置けるようにしているので
デバッグ等をしやすいように設定しています。(セキュリティ等は今回無視です)

nginxにしたからといって、軽くはなりませんでした。
cactiをアクセスした時にグラフの生成時に時間がかかっています。rrdtoolが重いようです。

top - 11:54:27 up 15:05,  1 user,  load average: 3.09, 0.95, 0.46
Tasks:  70 total,   6 running,  64 sleeping,   0 stopped,   0 zombie
%Cpu(s): 93.9 us,  6.1 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    446772 total,   246136 used,   200636 free,    40280 buffers
KiB Swap:        0 total,        0 used,        0 free,   107336 cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM     TIME+ COMMAND                              
 5503 http      20   0 34568 4680 3244 R 19.8  1.0   0:07.88 rrdtool                              
 5498 http      20   0 34712 4744 3248 R 19.5  1.1   0:08.95 rrdtool                              
 5501 http      20   0 34580 4716 3248 R 19.5  1.1   0:08.41 rrdtool                              
 5505 http      20   0 34588 4672 3256 R 19.5  1.0   0:07.26 rrdtool                              
 5507 http      20   0 34432 4544 3244 R 19.2  1.0   0:05.81 rrdtool                              
 5509 root      20   0  2988 1236  936 R  1.0  0.3   0:00.31 top                                  
  108 mysql     20   0  296m  34m 5340 S  0.3  7.9   9:56.92 mysqld               
...

まあ、動かせることができるという程度ですね。。

 

nginx::nginx_status

nginxへ移行してみたものの、速さやリソース消費などメリットがよくわかりません。
とりあえず、nginxでは簡単なstatusが取得できるようなので、設定して、cactiでグラフ化してみました。
※internetからはアクセスできませんので、あしからず。

cactiのforumにありましたので参考に設定しました。
cacti-nginx.tar.gzをダウンロードします。

nginxを–with-http_stub_status_module付きでコンパイルします。

nginx.confに下記を追加

  location /nginx_status {
    stub_status on;
  }

こんな感じのレスポンスが得られます。シンプルでいいですね。

Active connections: 1 
server accepts handled requests
 1992 1992 5887 
Reading: 0 Writing: 1 Waiting: 0 

cacti-enginx.tar.gzを展開すると、下記5つのファイルがあります。

cacti-nginx-readme
cacti_graph_template_nginx_clients_stat.xml
cacti_graph_template_nginx_sockets_stat.xml
get_nginx_clients_status.pl
get_nginx_socket_status.pl

perlのスクリプトはcacti/scriptsディレクトリにコピーします。
xmlファイルはcactiのguiを使ってtemplate importします。

cactiでgraph作成時に上記のtemplateを利用します。設定中にurlを尋ねられるので、下記を入力。
(localhostとかでも良いんでしょうが、virtual hostの設定とかちょっとありまして。。。)

http://192.168.0.YYY/nginx_status

こんなグラフが取得できます。

php-fpmのstatusもとれるみたいだし、cactiでグラフ化もできるみたいなので、設定しておきますか。。

 

unboundとcacti

先日、unboundをインストールしたので、ついでにcactiでもデータ取得を行ってみました。
unboundのソースに付属しています。contribディレクトリ内にunbound_cacti.tar.gzファイルがあるのでこれを使います。
展開して、README.txtとscriptととなるunbound_cactiを見ながら設定します。

unboundの統計情報は、unbound-controlを使用して実施されます。
unbound-controlを利用するためunbound用の証明書を作成します。これは、unbound-control-setupコマンドで作成できます。以下4つの鍵および証明書が出力されます。

unbound_server.pem
unbound_server.key
unbound_control.pem
unbound_control.key

次にunbound.confを変更

server:   extended-statistics: yes
          statistics-cumulative: no
          statistics-interval: 0

remote-control:
  control-enable: yes
  control-interface: 127.0.0.1
  control-interface: ::1
  server-key-file: "/PATH/unbound_server.key"
  server-cert-file: "/PATH/unbound_server.pem"
  control-key-file: "/PATH/unbound_control.key"
  control-cert-file: "/PATH/unbound_control.pem"

snmpd.confに以下を追加。

extend  .1.3.6.1.3.1983.1.1 cache_hits /bin/cat /usr/local/etc/unbound/statistics/cache_hits
extend  .1.3.6.1.3.1983.1.2 memory_usage /bin/cat /usr/local/etc/unbound/statistics/memory_usage
extend  .1.3.6.1.3.1983.1.3 queues_by_type /bin/cat /usr/local/etc/unbound/statistics/queues_by_type
extend  .1.3.6.1.3.1983.1.4 answers_to_queries /bin/cat /usr/local/etc/unbound/statistics/answers_to_queries
extend  .1.3.6.1.3.1983.1.5 histogram /bin/cat /usr/local/etc/unbound/statistics/histogram
extend  .1.3.6.1.3.1983.1.6 queues_by_flags /bin/cat /usr/local/etc/unbound/statistics/queues_by_flags
extend  .1.3.6.1.3.1983.1.7 requestlist /bin/cat /usr/local/etc/unbound/statistics/requestlist

cronに下記を設定

*/5 * * * * /PATH/unbound_cacti

実際にunbound_cactiスクリプトを実行し、statisticsディレクトリにデータが書き込まれているか確認し、
最後にsnmpwalkで値が取得できるか確認します。

ここまできたら、後はcactiにテンプレートをimportします。テンプレートファイルは、
unbound-cacti/Host template (all in one)/ ディレクトリにあるcacti_host_template_unbound_dns.xmlになります。
cactiからConsole->Import Templatesを選択し、上記ファイルをimportします。テンプレート名は適当に設定。
あとは、deviceを作成し、host templateで先ほど名付けたテンプレート名”Unbound DNS”を選択してgraphを作成するだけになります。
数日間動作させて問題なく動作しているようです。

こんな感じでグラフ化されます。
 

 

php-5.3.3とcacti-0.8.7gへ更新

phpを5.3.3へ更新。(もちろんports)
cacti-0.8.7gへ更新。phpのsocketモジュールが必要だったので、phpのextensionをインストールする際に、追加しました。

cactiアップグレード時のメモ

include/config.php (差分をチェックしてDB設定を調整)
resouce/* と rra/* をコピー