ライン

ポイント:*

ライン

 はじめに

net-mgmt/cacti-spine

 さて、ちょっとだけ時間があるので、いろいろお試しついでにCactiを動作させます。
Linuxで試した後だし、FreeBSDで準備しておいてもよいかなと構築してみました。

 OSですが、FreeBSD 11系。VMware上に配置します。
CPUは、2コアで2GBのメモリーと32GBのディスク容量を準備しました。
ネットワークは、参照IPを限定したhttpdを準備するためのグローバルと、監視用のプライベートの2つの足を準備しました。

 インストール

VMware Tools

 とりあえず、ISOでOSを導入後、フィルター系を準備したりを設定しました。
VMware Toolsを加えました。

#pkg install open-vm-tools-nox11
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 16 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        open-vm-tools-nox11: 10.1.0_1,2
        xerces-c3: 3.1.4
        fusefs-libs: 2.9.5
        apache-xml-security-c: 1.7.3
        libdnet: 1.12_1
        icu: 58.2,1
        glib: 2.46.2_5
        python27: 2.7.13_1
        readline: 6.3.8
        indexinfo: 0.2.6
        libffi: 3.2.1
        gettext-runtime: 0.19.8.1_1
        perl5: 5.24.1
        pcre: 8.40
        libiconv: 1.14_10
        libmspack: 0.5

Number of packages to be installed: 16

The process will require 216 MiB more space.
41 MiB to be downloaded.

Proceed with this action? [y/N]: 

/etc/rc.confに設定ファイルを追加します。

#VMware tools
vmware_guestd_enable="YES"
vmware_guest_kmod_enable="YES"

 こんな感じで動作を開始してくれましたので、楽でした。
Perl5などのインストールもできてしまったので、安心です。

Cacti

 Cactiにはnet-mgmtのcactiとcacti-spineが存在します。
今回は折角なので、後者で実装してみようと思っています。
ただし、pkgでは準備がされていないので、pkgでcactiを入れて、その後にportsで入れる形で準備しようと思います。

#pkg install cacti
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 95 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        cacti: 1.0.1
        php56-session: 5.6.30
        php56: 5.6.30
        libxml2: 2.9.4
        php56-xml: 5.6.30
        php56-simplexml: 5.6.30
        php56-ctype: 5.6.30
        php56-posix: 5.6.30
        php56-openssl: 5.6.30
        php56-hash: 5.6.30
        php56-filter: 5.6.30
        php56-sockets: 5.6.30
        php56-ldap: 5.6.30
        openldap-client: 2.4.44
        php56-snmp: 5.6.30
        net-snmp: 5.7.3_14
        php56-gmp: 5.6.30
        gmp: 6.1.2
        php56-gd: 5.6.30
        libXpm: 3.5.12
        xproto: 7.0.31
        libXext: 1.3.3_1,1
        xextproto: 7.3.0
        libXau: 1.0.8_3
        libX11: 1.6.5,1
        libxcb: 1.12_2
        libXdmcp: 1.1.2
        libpthread-stubs: 0.4
        kbproto: 1.0.7
        libXt: 1.1.5,1
        libSM: 1.2.2_3,1
        libICE: 1.0.9_1,1
        freetype2: 2.7.1
        png: 1.6.29
        jpeg-turbo: 1.5.1
        t1lib: 5.1.2_4,1
        libXaw: 1.0.13,2
        printproto: 1.0.5
        libXp: 1.0.3,1
        libXmu: 1.1.2_3,1
        php56-json: 5.6.30
        rrdtool: 1.6.0_1
        pango: 1.38.0_1
        libXrender: 0.9.10
        renderproto: 0.11.1
        xorg-fonts-truetype: 7.7_1
        font-misc-meltho: 1.0.3_3
        mkfontscale: 1.1.2
        libfontenc: 1.1.3_1
        mkfontdir: 1.0.7
        fontconfig: 2.12.1,1
        expat: 2.2.0_1
        font-misc-ethiopic: 1.0.3_3
        font-bh-ttf: 1.0.3_3
        encodings: 1.0.4_3,1
        font-util: 1.3.1
        dejavu: 2.37
        libXft: 2.3.2_1
        harfbuzz: 1.4.5_1
        graphite2: 1.3.9
        cairo: 1.14.8,2
        xcb-util-renderutil: 0.3.9_1
        xcb-util: 0.4.0_2,1
        pixman: 0.34.0
        glproto: 1.4.17
        dri2proto: 2.8
        libGL: 13.0.6
        libxshmfence: 1.2_1
        libXxf86vm: 1.1.4_1
        xf86vidmodeproto: 2.3.1
        libXfixes: 5.0.3
        fixesproto: 5.0
        libXdamage: 1.1.4_3
        damageproto: 1.2.1
        libglapi: 13.0.6
        libXvMC: 1.0.10
        videoproto: 2.3.3
        libXv: 1.0.11,1
        libdrm: 2.4.75_3,1
        libpciaccess: 0.13.4
        pciids: 20170316
        libdevq: 0.0.4
        libEGL: 13.0.6
        gbm: 13.0.6
        llvm39: 3.9.1_4
        libedit: 3.1.20150325_2,1
        php56-pdo_mysql: 5.6.30
        php56-pdo: 5.6.30
        php56-mysql: 5.6.30
        mysql56-client: 5.6.35_3
        libevent: 2.1.8
        liblz4: 1.7.5,1
        php56-mbstring: 5.6.30
        oniguruma5: 5.9.6_1
        php56-zlib: 5.6.30

Number of packages to be installed: 95

The process will require 1 GiB more space.
274 MiB to be downloaded.

Proceed with this action? [y/N]:

 サーバなんでx11なんていらないのですが、ここは無視してそのまま。95個のインストールです。
DBもMariaDBにする予定なので、予定外だけど…。

.
.
****************************************************************************
Message from cacti-1.0.1:
=======================================================================
Cacti is now installed. If you install it for the first time,
you may have to follow this steps to make it work correctly:

1. Create the MySQL database, a cacti user, and initialize:
   a) CREATE DATABASE `cacti`;
   b) Create a mysql user/password for cacti:
      CREATE USER 'cacti'@'localhost' IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;
   c) Add GRANTS:
      GRANT ALL ON `cacti`.* TO 'cacti'@'localhost';
      GRANT SELECT ON `mysql`.`time_zone_name` TO 'cacti'@'localhost';
      FLUSH PRIVILEGES;
   d) Import the default cacti database:
      mysql --database=cacti -ucacti -p < /usr/local/share/cacti/cacti.sql

   If you haven't already imported your MySQL timezone data, you need to do this:
      mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

 NOTE:
   * Cacti does not LOCK TABLES.

2. Edit /usr/local/share/cacti/include/config.php from the template
   config.php.orig.

   PHP requires the time zone to be explicitly set rather that rely on
   the system time zone, otherwise poller complains. I added the
   following line to my config.php:

   date_default_timezone_set('America/Los_Angeles');

3. Add the following line to cron for cacti:
*/5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1

4. Example Apache 2.4 configuration:
   (This assumes that you have installed a working PHP Apache install, e.g. with mod_php)


   <FilesMatch "\.php$">
       SetHandler application/x-httpd-php
   </FilesMatch>
   <FilesMatch "\.phps$">
       SetHandler application/x-httpd-php-source
   </FilesMatch>

   DirectoryIndex index.php

   DocumentRoot "/usr/local/share/cacti"

   Alias /cacti "/usr/local/share/cacti/"
   Alias /Cacti "/usr/local/share/cacti/"

   <Directory "/usr/local/share/cacti">
      Require all granted
      AllowOverride None
      Order Allow,deny
      Allow from all
   </Directory>

5. Open a Cacti login page in your web browser and follow the install instructions.


If you update cacti, open a login page and an updating process will
start automatically.

NOTEs as of 10Aug2014:

1) Cacti now better supports hier(7)

   a) Cacti log files are now found under /var/log/cacti where you can
      manage them using newsyslog.
   b) Cacti RRD files are now found under /var/db/cacti/rra.

   If you have an existing Cacti installation these paths are also
   found in Cacti's SQL database and MUST be updated. These two SQL
   commands should do the trick:

   UPDATE settings SET value='/var/log/cacti/log' \
     WHERE name='path_cactilog';

   UPDATE poller_item SET rrd_path=\
     REPLACE(rrd_path,'/usr/local/share/cacti/rra','/var/db/cacti/rra') \
     WHERE rrd_path REGEXP '^/usr/local/share/cacti/rra';

2) The PERL paths in the Cacti PERL scripts have been updated to
   /usr/local/bin.

Other Erratas:
   1) Mount linprocfs in /compat/linux/proc will allow most scripts to work.
   2) This package does not install a MySQL server in case you wish to use an
      external MySQL server.  Install a package such as mysql57-server if you
      require a local server.
=======================================================================

…ということらしいです。

さて、MySQL-clientを削除し、Cactiの導入をやり直します。

#pkg remove mysql56-client-5.6.35_3
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 2 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        mysql56-client-5.6.35_3
        cacti-1.0.1

Number of packages to be removed: 2

The operation will free 54 MiB.

Proceed with deinstalling packages? [y/N]: y

 何を入れるかを考えて、限定しました。5.5系にしようと思います。

#pkg search mariadb|grep 5.5
mariadb55-client-5.5.54_3      Multithreaded SQL database (client)
mariadb55-server-5.5.54_3      Multithreaded SQL database (server)
#pkg install mariadb55-server mariadb55-client
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        mariadb55-server: 5.5.54_3
        mariadb55-client: 5.5.54_3

Number of packages to be installed: 2

The process will require 141 MiB more space.
12 MiB to be downloaded.

Proceed with this action? [y/N]:
...
************************************************************************
Message from mariadb55-server-5.5.54_3:
************************************************************************

Remember to run mysql_upgrade (with the optional --datadir=<dbdir> flag)
the first time you start the MySQL server after an upgrade from an
earlier version.

MariaDB respects hier(7) and doesn't check /etc and /etc/mysql for
my.cnf. Please move existing my.cnf files from those paths to
/usr/local/etc and /usr/local/etc/mysql.

************************************************************************
# cd /usr/ports/net-mgmt/cacti-spine
# make install clean
...
===>  Cleaning for help2man-1.47.4
===>  Cleaning for p5-Locale-gettext-1.07
===>  Cleaning for gettext-tools-0.19.8.1
===>  Cleaning for gmake-4.2.1_1
===>  Cleaning for spine-1.0.1

あ、cactiまで入らないんだ?

cactiのportsはMariaDBを利用する考慮はされていなかったので、残念だけどMariaDBはパスだな。

#pkg install cacti
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking integrity... done (2 conflicting)
  - mysql56-client-5.6.35_3 conflicts with mariadb55-client-5.5.54_3 on /usr/local/bin/msql2mysql
  - mysql56-client-5.6.35_3 conflicts with mariadb55-client-5.5.54_3 on /usr/local/bin/msql2mysql
Checking integrity... done (0 conflicting)
The following 6 package(s) will be affected (of 0 checked):

Installed packages to be REMOVED:
        mariadb55-client-5.5.54_3
        mariadb55-server-5.5.54_3

New packages to be INSTALLED:
        cacti: 1.0.1
        mysql56-client: 5.6.35_3

Installed packages to be REINSTALLED:
        pkg-1.10.1
        spine-1.0.1 (direct dependency changed: mysql56-client)

Number of packages to be removed: 2
Number of packages to be installed: 2
Number of packages to be reinstalled: 2

The operation will free 86 MiB.
3 MiB to be downloaded.

Proceed with this action? [y/N]:

 なんかスッキリしないけど、面倒だし良しとしました。
pkgってレポジトリどうなっているんだっけ。ま、いいか。

では、削除されちゃったので、再度DB系のserverを導入します。

#pkg install mysql56-server
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        mysql56-server: 5.6.35_7

Number of packages to be installed: 1

The process will require 82 MiB more space.
8 MiB to be downloaded.

Proceed with this action? [y/N]: 
...
Message from mysql56-server-5.6.35_7:
*****************************************************************************

Remember to run mysql_upgrade the first time you start the MySQL server
after an upgrade from an earlier version.

Initial password for first time use of MySQL is saved in $HOME/.mysql_secret
ie. when you want to use "mysql -u root -p" first you should see password
in /root/.mysql_secret

*****************************************************************************

*****************************************************************************

Please keep in mind that the default location for my.cnf will be changed
from "/var/db/mysql/my.cnf" to "/usr/local/etc/mysql/my.cnf" in the near
future.  If you do not want to move your my.cnf to the new location then
you must set "mysql_optfile" in /etc/rc.conf to "/var/db/mysql/my.cnf".

*****************************************************************************

 それから、ウェブサーバですね。

#pkg install apache24
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 4 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        apache24: 2.4.25_1
        apr: 1.5.2.1.5.4_2
        gdbm: 1.12
        db5: 5.3.28_6

Number of packages to be installed: 4

The process will require 76 MiB more space.
17 MiB to be downloaded.

Proceed with this action? [y/N]:
...
Message from apache24-2.4.25_1:
To run apache www server from startup, add apache24_enable="yes"
in your /etc/rc.conf. Extra options can be found in startup script.

Your hostname must be resolvable using at least 1 mechanism in
/etc/nsswitch.conf typically DNS or /etc/hosts or apache might
have issues starting depending on the modules you are using.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

- apache24 default build changed from static MPM to modular MPM
- more modules are now enabled per default in the port
- icons and error pages moved from WWWDIR to DATADIR

   If build with modular MPM and no MPM is activated in
   httpd.conf, then mpm_prefork will be activated as default
   MPM in etc/apache24/modules.d to keep compatibility with
   existing php/perl/python modules!

Please compare the existing httpd.conf with httpd.conf.sample
and merge missing modules/instructions into httpd.conf!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

まぁ、今回はアクセスが多数来るわけでもないので、デフォルトのままで困らないのでそのまま。
これまでは、eventにしていたのですが。気が向いたら変えていこう、と。

 さて、起動すべきサービスがどの程度になったのかを確認するのは、/usr/local/etc/rc.d/ 以下を眺めれば良いね。

#ll /usr/local/etc/rc.d/
total 40
-r-xr-xr-x  1 root  wheel  6230 Apr  2 10:52 apache24*
-r-xr-xr-x  1 root  wheel  1834 Apr  2 10:52 htcacheclean*
-r-xr-xr-x  1 root  wheel  2628 Apr  4 11:00 mysql-server*
-r-xr-xr-x  1 root  wheel  1061 Apr  2 10:32 php-fpm*
-r-xr-xr-x  1 root  wheel   669 Apr  4 17:28 rrdcached*
-r-xr-xr-x  1 root  wheel  1458 Apr  2 11:28 snmpd*
-r-xr-xr-x  1 root  wheel   820 Apr  2 11:28 snmptrapd*
-r-xr-xr-x  1 root  wheel   905 Apr  3 10:44 vmware-guestd*
-r-xr-xr-x  1 root  wheel  2126 Apr  3 10:44 vmware-kmod*

 まず、MySQLサーバから始めることにします。
設定ファイルは、/usr/local/etc/mysql/my.cnf.sampleにあるので、これをベースに準備します。

#cd /usr/local/etc/mysql/
#cp -p my.cnf.sample my.cnf

まずは、サンプルのままで進めるが、文字コードはutf8を指定するなどを加えて完了としました。
※後にチェックでエラーになるので、後述で変更になります

/etc/rc.confに以下を加えてます。

# MySQL 5.6
mysql_enable="YES"

 では、初回投入。

#service mysql-server start
Starting mysql.
#service mysql-server status
mysql is running as pid 64857.

 最初のおまじないを開始。
rootのパスワードを決める以外はデフォルトで進めました。

#mysql_secure_installation



NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
...

 データベースの取り込み方法は、Linuxでやったとの同じですが、他の皆さんの同様の手順で今回やってしまいます。
pkgで導入最後に表示された手順でいいとは思いますけど。

#mysqladmin -u root -p create cacti
#mysql -u root -p cacti < /usr/local/share/cacti/cacti.sql
#mysql -u root -p mysql
root@localhost [mysql]> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser';
Query OK, 0 rows affected (0.00 sec)

root@localhost [mysql]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

root@localhost [mysql]>  SELECT user,host FROM mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | 127.0.0.1 |
| root      | ::1       |
| cactiuser | localhost |
| root      | localhost |
+-----------+-----------+
4 rows in set (0.00 sec)

root@localhost [mysql]>  show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cacti              |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

root@localhost [mysql]>quit

 これでDB側は準備ができたので、次はウェブサーバ。
php5が動作することが前提

#pkg install apache24 mod_php56
#ln -s /usr/local/share/cacti /usr/local/www/apache24/data/cacti
#cp -p /usr/local/etc/php.ini-production /usr/local/etc/php.ini
#vi /usr/local/etc/php.ini

 httpd.confに必要なものを加え、php.iniには、タイムゾーンを加え、また起動に必要なものを rc.confに加えて起動します。

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

<Directory "/usr/local/share/cacti/">
    Require host localhost 自アクセスホスト名 
    Require ip 192.168.1
</Directory>

など。DirectoryIndexなどは適当に。

# Apache24
apache24_enable="YES"
apache24_http_accept_enable="YES"

などなど。

#service apache24 start

起動できました。SSL化などは後で実装するとして、先に進めることにします。
※SSL化は後日実装しています。apache24-b0.html などを参照

 設定

ウェブブラウザから設定

 上記で動作を始めたウェブサーバにアクセスしてください。

 
 
 
 
 
 
 
 
 
 なんと、結構不足する状態であると指摘されました。

 直したつもりだったけど、まだダメだといわれる。

grant select on mysql.time_zone_name to cactiuser@localhost identified by 'cacti';
GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser';
flush privileges;

my.cnfは現状こんな修正をいれた。

#diff -urN my.cnf.sample my.cnf
--- my.cnf.sample       2017-04-04 11:00:30.000000000 +0900
+++ my.cnf      2017-04-09 15:38:55.251943000 +0900
@@ -7,8 +7,18 @@
 [mysql]
 prompt                          = \u@\h [\d]>\_
 no_auto_rehash
+# 20170409
+default-character-set          = utf8

 [mysqld]
+# 20170409
+skip-character-set-client-handshake
+#character-set-server          = utf8
+collation_server               = utf8mb4_unicode_ci
+character-set-server           = utf8mb4
+default_time_zone              = Asia/Tokyo
+
+
 user                            = mysql
 port                            = 3306
 socket                          = /tmp/mysql.sock
@@ -45,6 +55,14 @@
 query_cache_type                = 0
 query_cache_size                = 0
 long_query_time                 = 0.5
+
+#20170409
+tmp_table_size                 = 64M
+join_buffer_size               = 64MB
+innodb_doublewrite             = 0
+innodb_additional_mem_pool_size        = 128M
+innodb_flush_log_at_timeout    = 3
+
 innodb_buffer_pool_size         = 1G
 innodb_data_home_dir            = /var/db/mysql
 innodb_log_group_home_dir       = /var/db/mysql
@@ -52,8 +70,11 @@
 innodb_flush_method             = O_DIRECT
 innodb_log_file_size            = 256M
 innodb_log_buffer_size          = 16M
-innodb_write_io_threads         = 8
-innodb_read_io_threads          = 8
+
+#20170409
+innodb_write_io_threads         = 16
+innodb_read_io_threads          = 32
+
 innodb_autoinc_lock_mode        = 2
 skip-symbolic-links

よし。チェックOKになった。

 

ん? ログ位置に何があるんだろう…と思ったら、pkgのインストールの最後に何か出ていたっけ。

root@localhost [(none)]> use cacti;
Database changed
root@localhost [cacti]> UPDATE settings SET value='/var/log/cacti/log' \
root@localhost [cacti]> WHERE name='path_cactilog';
Query OK, 0 rows affected (0.02 sec)
Rows matched: 0  Changed: 0  Warnings: 0
root@localhost [cacti]> UPDATE poller_item SET rrd_path=\
root@localhost [cacti]> REPLACE(rrd_path,'/usr/local/share/cacti/rra','/var/db/cacti/rra') \
root@localhost [cacti]> WHERE rrd_path REGEXP '^/usr/local/share/cacti/rra';
root@localhost [cacti]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

ん?まだだめ。これ、こういうことかぁ。

#cd /var/log/cacti
#touch log
#chown cacti:cacti log

いけました。

まじかー、といいたくなるほどすんなりいかないな。
しっかし、今度はApacheに権限出すのかぁ。まぁ、いいんだけど。

#chown -R www:www /usr/local/share/cacti/resource/
#chown -R www:www /usr/local/share/cacti/scripts/
#chown -R www:www /usr/local/share/cacti/cache/boost/
#chown -R www:www /usr/local/share/cacti/cache/mibcache/
#chown -R www:www /usr/local/share/cacti/cache/realtime/
#chown -R www:www /usr/local/share/cacti/cache/spikekill/
#mkdir /usr/local/share/cacti/log
#chown -R www:www /usr/local/share/cacti/log/

チェックをクリアできたので、更に進む。

良くわからんけど、全部入れても損はなさそうだし、クリックしてました。
やっと終わりました。

 ログイン

新しいバージョンはこんななんだ

ログイン画面が出てきました。
まだまだ終わらないんだよな。まだCactiだけで、spineとか指定していないし。
そもそも自ホストのsnmpdすら起動していない状態。

初回、admin/adminでログインすると、パスワードを変更するための画面に遷移しますので、そこで変更します。
その後、半端に日本語になったページが表示されてきました。(ちゃんと設定の中に日本語ってあるな…)
MS IEと相性が良くないみたいで、この後のアクセスは Google Chromeにしています。

とりあえず、spineの設定を確認しておきます。
/usr/local/bin/spine/spine.confにあります。

# +-------------------------------------------------------------------------+
# | Copyright (C) 2004-2017 The Cacti Group                                 |
# |                                                                         |
# | This program is free software; you can redistribute it and/or           |
# | modify it under the terms of the GNU Lesser General Public License      |
# | as published by the Free Software Foundation; either version 2.1        |
# | of the License, or (at your option) any later version.                  |
# |                                                                         |
# | This program is distributed in the hope that it will be useful,         |
# | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
# | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           |
# | GNU General Public License for more details.                            |
# +-------------------------------------------------------------------------+
# | spine: a backend data gatherer for Cacti                                |
# +-------------------------------------------------------------------------+
# | This poller would not have been possible without:                       |
# |   - Larry Adams (current development and enhancements)                  |
# |   - Rivo Nurges (rrd support, mysql poller cache, misc functions)       |
# |   - RTG (core poller code, pthreads, snmp, autoconf examples)           |
# |   - Brady Alleman/Doug Warner (threading ideas, implimentation details) |
# +-------------------------------------------------------------------------+
# | Settings                                                                |
# +-------------------------------------------------------------------------+
# | DB_Host         'localhost' or socket file for UNIX/Linux               |
# |                 IP Address for Windows                                  |
# | DB_Database     Database name, typically 'cacti'                        |
# | DB_Port         The database port to use                                |
# | DB_User         The user to access the database, typically 'cactiuser'  |
# | DB_Pass         The password for the Cacti user                         |
# | SNMP_Clientaddr Bind SNMP to a specific address for sites that use      |
# |                 higher security levels                                  |
# +-------------------------------------------------------------------------+
# | Settings for Remote Polling                                             |
# +-------------------------------------------------------------------------+
# | RDB_Host        The remote database hostname.                           |
# | RDB_Database    The remote database name, typically 'cacti'             |
# | RDB_Port        The remote database port to use                         |
# | RDB_User        The remote database user, typically 'cactiuser'         |
# | RDB_Pass        The remote database password.                           |
# +-------------------------------------------------------------------------+

DB_Host                 localhost
DB_Database             cacti
DB_User                 cactiuser
DB_Pass                 cactiuser
DB_Port                 3306

RDB_Host                localhost
RDB_Database            cacti
RDB_User                cactiuser
RDB_Pass                cactiuser
RDB_Port                3306

変更するところはないようだ。
コンソールの設定メニューからパスを見ると該当箇所がみつかります。

これを保存すると完了となります。
ちなみに、spineで他のホストの収集しようとすると、Unknownのままになってしまい、収集できませんでした。cmdに戻してなんとか表示。
うまくいくようになったら、更新しますけどウェブ上では情報不足ですね。

さて、とりあえず自サーバのグラフが出て欲しいので、snmpdが起動して欲しいところ。

#cp /usr/local/share/snmp/snmpd.conf.example /usr/local/share/snmp/snmpd.conf

む? これで起動してもsnmpwalkできんな。このバージョンよくわからない。
検索しても情報すごく少ないし。やめた。

# cp -p  /etc/snmpd.config  /etc/snmpd.config_orig

とりあえず、publicで通信してみる。

#snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: cacti-svr.ins-net.ne.jp 923008463 FreeBSD 11.0-RELEASE-p1
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.12325.1.1.2.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (167163) 0:27:51.63
SNMPv2-MIB::sysContact.0 = STRING: sysmeister@example.com
SNMPv2-MIB::sysName.0 = STRING: cacti-svr.ins-net.ne.jp
SNMPv2-MIB::sysLocation.0 = STRING: Room 200
SNMPv2-MIB::sysServices.0 = INTEGER: 76
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-SMI::enterprises.12325.1.1.1.10.2
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-SMI::enterprises.12325.1.1.1.10.3
SNMPv2-MIB::sysORID.3 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-SMI::enterprises.12325.1.1
SNMPv2-MIB::sysORID.5 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ipMIB
SNMPv2-MIB::sysORID.7 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.8 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.9 = OID: IP-FORWARD-MIB::ipForward
SNMPv2-MIB::sysORDescr.1 = STRING: udp transport mapping
SNMPv2-MIB::sysORDescr.2 = STRING: lsock transport mapping
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for SNMPv2 entities.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for the Begemot SNMPd.
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module to describe generic objects for network interface sub-layers.
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations, but excluding their management of IP routes.
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing TCP implementations.
SNMPv2-MIB::sysORDescr.8 = STRING: The MIB module for managing UDP implementations.
SNMPv2-MIB::sysORDescr.9 = STRING: The MIB module for the display of CIDR multipath IP Routes.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (1) 0:00:00.01

もってこれるし、こっちでいいことに。
/etc/rc.confを以下のようにする。

# snmpd
snmpd_enable="NO"
bsnmpd_enable="YES"

設定ファイルに修正を入れます。

#diff -urN /etc/snmpd.config_orig /etc/snmpd.config
--- /etc/snmpd.config_orig      2016-09-29 10:45:37.000000000 +0900
+++ /etc/snmpd.config   2017-04-16 06:07:49.189681000 +0900
@@ -9,8 +9,8 @@
 location := "Room 200"
 contact := "sysmeister@example.com"
 system := 1    # FreeBSD
-traphost := localhost
-trapport := 162
+#traphost := localhost
+#trapport := 162

 #
 # Set the SNMP engine ID.
@@ -25,8 +25,8 @@
 read := "public"
 # Uncomment begemotSnmpdCommunityString.0.2 below that sets the community
 # string to enable write access.
-write := "geheim"
-trap := "mytrap"
+#write := "geheim"
+#trap := "mytrap"

 #
 # Declarations for SNMP-USER-BASED-SM-MIB authentication and privacy options
@@ -95,16 +95,17 @@
 begemotSnmpdCommunityDisable   = 1

 # open standard SNMP ports
-begemotSnmpdPortStatus.0.0.0.0.161 = 1
+#begemotSnmpdPortStatus.0.0.0.0.161 = 1
+begemotSnmpdPortStatus.127.0.0.1.161 = 1

 # open a unix domain socket
 begemotSnmpdLocalPortStatus."/var/run/snmpd.sock" = 1
 begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4

 # send traps to the traphost
-begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
-begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
-begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)
+#begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
+#begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
+#begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)

 sysContact     = $(contact)
 sysLocation    = $(location)

こんな感じ。
他のサーバでbsnmpdを使う場合には、上記に加えて、

begemotSnmpdPortStatus.192.168.1.246.161 = 1

のように自ホストのIFのアドレスを指定します。
また、TCPWrapperの制御があるので、hosts.allowに

snmpd : 192.168.1.0/255.255.255.0 : allow

っぽい記載を加えます。

サービスは以下のようにすればこれまでに同様となります。

#service bsnmpd start

ポートの確認。

#sockstat -l | grep snmp
root     bsnmpd     13715 4  udp4   *:*                   *:*
root     bsnmpd     13715 5  udp4   127.0.0.1:161         *:*
root     bsnmpd     13715 6  stream /var/run/snmpd.sock

cronは管理が面倒なので、/etc/crontabに記載する方法にしました。

#cacti
*/5     *       *       *       *       root    /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1

実行されるのを待って、rrdファイルが生成されるのを確認しました。
出力されるけど、スクリプトのエラーが出ている。

#ln -s /usr/local/bin/perl5 /usr/bin/perl

まだメモリーだけはエラーみたいだ。

/proc/meminfo: No such file or directory

FreeBSDでは、これがないので出ないで正解らしい。

さて、Windowsサーバにもsnmp serverを動作させて情報取得をやってみたのですが、接続できているのにUnknownのままで、ポーラーをcmdに戻して表示ができるようにはなりました。

困ったのは、Graph Treeが設定できないこと。
誰も困っていないのかなぁ。docs.cacti.netの1.0.0のマニュアルは古いままだし、実体に一致していないしなぁ。
仕方が無いので、
http://docs.cacti.net/manual:100:6_reference.4_cli_script.8_add_tree_item#add_items_to_a_tree
を参照しつつ、phpのコマンドにて登録を行いました。

#cd /usr/local/share/cacti/cli/
#/usr/local/bin/php -q add_tree.php --type=node --node-type=host --tree-id=7 --host-id=4

みたいな感じです。
最新の版は、1.1.2というバージョンみたいですが、portsも追いついていないみたいなので、このホットなバージョンは早すぎな感じです。
とはいっても、0.8系のバージョンは残していないみたいなので、微妙かなぁ。
CentOSやRHELが安定して利用できていたので、そっちがお勧めかなぁ、というのが現時点での感想です。

Copyright © 1996,1997-2006,2007- by F.Kimura,