0x01 前言

前些天我想将我安装好的cacti 1.0更新升级,升级后却发现我的历史数据都丢失了!因为cacti 1.0还处于开发阶段,我也不想再深入探讨这问题。

在经过一番权衡后,我决定在家里部署zabbix对我服务器的服务进行监控。安装完成后发现zabbix不但界面比较好看,而且易用性比cacti高很多。这里我将介绍我基于centos 7的安装过程。

0x02 准备

zabbix是一款web-based的开源监控软件,因为这样就需要数据库支持,在这里我选用mariadb;还需要PHP解析器,我选用PHP7;同时还需要web服务器,我使用nginx作为前端服务器,apache作为后端服务器。

因为我使用家里的服务器学习nginx的负载均衡,所以服务器架构是:

LNMPA(Linux+nginx+mariadb+php+apache)

相对比较复杂。当然,你可以使用nginx或者apache作为web服务器。

在这里我不叙述web-based环境的安装,请准备以下环境:

  1. 数据库,可以选用Mysql、mariadb或其他数据库
  2. PHP解析器
  3. web服务器,可选用nginx、apache或其他服务器软件

最后需要下载源码,你可以通过以下地址获取:

Download Zabbix

在上面的页面你可以发现不但有源码,还有适用于各种虚拟平台的预安装镜像和打包好的package。但我倾向于编译安装。所以在这里我下载Zabbix 3.2:

1476588137

0x03 编译安装

首先需要将下载好的压缩包进行解压:

[root@test1 codex]# tar zxvf zabbix-3.2.1.tar.gz

然后进入到源码文件夹进行编译

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openipmi --with-openssl --with-libcurl
  • 如果你的mariadb数据库与zabbix程序不在同一服务器上,请通过以下命令安装MySQL library:
[root@test1 zabbix-3.2.1]# yum install mysql-devel
  • 如果编译的时候提示缺失SSH2 library,请通过以下命令安装libssh2-devel
[root@test1 zabbix-3.2.1]# yum install libssh2-devel
  • 如果编译的时候提示缺失open IPMI相关的库:
configure: error: Invalid OPENIPMI directory - unable to find ipmiif.h

请通过以下命令安装openipmi:

[root@test1 zabbix-3.2.1]# yum install OpenIPMI-devel

通过configure后的信息如下:

1476588138

通过以下命令编译和安装:

#编译
make

#安装
make install

0x04 配置server

如果你是依据我的config命令进行了编译安装,那么请使用以下命令进入zabbix目录:

[root@test1 ~]# cd /usr/local/zabbix/

在这个目录里可以看到以下文件夹:

1476588139

其中etc文件夹里放置了server和agentd的配置文件,sbin文件夹里放置了server和agentd的启动器。

为了使用方便,将server和agentd的启动器创建软链接到/usr/local/sbin这个文件夹里:

[root@test1 zabbix]# ln -s /usr/local/zabbix/sbin/zabbix_server /usr/local/sbin/
[root@test1 zabbix]# ln -s /usr/local/zabbix/sbin/zabbix_agentd /usr/local/sbin/

此时还不能启动server,还需要编辑server的配置文件,将数据库的连接信息添加进去。在进行此操作之前,需要先配置数据库。

在源码文件夹的database文件夹里有配置数据库所需要导入的文件:

1476588140

我使用的是mariadb,所以我使用mysql文件进行导入。要注意的是:导入的时候需要遵循以下顺序:

  1. schema.sql
  2. images.sql
  3. data.sql

通过以下命令进行导入,导入前请确认你的数据库服务器运行正常:

[root@test1 ~]# mysql -u roo -p -h 10.1.1.13 zabbix < /root/codex/zabbix-3.2.1/database/mysql/schema.sql
[root@test1 ~]# mysql -u roo -p -h 10.1.1.13 zabbix < /root/codex/zabbix-3.2.1/database/mysql/images.sql
[root@test1 ~]# mysql -u roo -p -h 10.1.1.13 zabbix < /root/codex/zabbix-3.2.1/database/mysql/data.sql

注意!请将上面命令中的数据库IP地址、用户名、数据库名和源码路径根据实际情况进行更换。

然后修改server的配置文件,以下是需要修改的部分。其他部分请更具需要自行修改:

############ GENERAL PARAMETERS #################

### Option: ListenPort
#	Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10051

ListenPort=10051

### Option: SourceIP
#	Source IP address for outgoing connections.
#
# Mandatory: no
# Default:
# SourceIP=

### Option: LogType
#	Specifies where log messages are written to:
#		system  - syslog
#		file    - file specified with LogFile parameter
#		console - standard output
#
# Mandatory: no
# Default:
# LogType=file

### Option: LogFile
#	Log file name for LogType 'file' parameter.
#
# Mandatory: no
# Default:
# LogFile=

LogFile=/tmp/zabbix_server.log

### Option: LogFileSize
#	Maximum size of log file in MB.
#	0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1

### Option: DebugLevel
#	Specifies debug level:
#	0 - basic information about starting and stopping of Zabbix processes
#	1 - critical information
#	2 - error information
#	3 - warnings
#	4 - for debugging (produces lots of information)
#	5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3

### Option: PidFile
#	Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_server.pid

### Option: DBHost
#	Database host name.
#	If set to localhost, socket is used for MySQL.
#	If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost

DBHost=10.1.1.13

### Option: DBName
#	Database name.
#	For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=

DBName=zabbix

### Option: DBSchema
#	Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=

### Option: DBUser
#	Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=

DBUser=zabbix

### Option: DBPassword
#	Database password. Ignored for SQLite.
#	Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=

DBPassword=zabbix

### Option: DBSocket
#	Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=/tmp/mysql.sock

### Option: DBPort
#	Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Range: 1024-65535
# Default (for MySQL):
# DBPort=3306

DBPort=3306

完后修改后即可尝试启动zabbix_server:

[root@test1 etc]# zabbix_server

如果一切正常,那么通过ps命令会显示:

1476588141

0x05 配置web界面

服务器配置完成后继续配置web操作界面。以下是我的nginx配置文件,用处不大,因为它只是将请求转到apache而已:

[root@web ~]# cat /usr/local/nginx/conf.d/zabbix.t.com.ngx.conf 
server {
    listen                  80;
    server_name             zabbix.t.com;

    root                    /usr/local/html/zabbix.t.com/public_html/;
    access_log              /usr/local/html/zabbix.t.com/logs/ngx_access.log;

    location / {

        index               index.php index.html;
        proxy_pass          http://127.0.0.1:8080;

    }

}

以下是我的apache配置文件:

[root@web ~]# cat /usr/local/apache2/conf.d/zabbix.t.com.apa.conf 
<VirtualHost 127.0.0.1:8080>
	ServerAdmin [email protected]
	DocumentRoot /usr/local/html/zabbix.t.com/public_html/
	ServerName zabbix.t.com
	ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9005/usr/local/html/zabbix.t.com/public_html/$1
	ErrorLog /usr/local/html/zabbix.t.com/logs/apa.error.log
</VirtualHost>

以下是我的php-fpm配置文件:

[root@web ~]# cat /usr/local/php7/etc/php-fpm.d/zabbix.t.com.conf 
[zabbixtcom]
;useradd -M -s /sbin/nologin -n zabbixtcom
listen = 127.0.0.1:9005
user = zabbixtcom
group = daemon
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /usr/local/html/zabbix.t.com/logs/fpm-php.log
php_flag[display_errors] = off
php_admin_value[memory_limit] = 256M
pm.max_requests = 3000
request_terminate_timeout = 300

确认web服务器运行正常后,从zabbix源码文件夹复制web客户端到指定位置。我的web文件需要放置在以下位置,请根据实际情况进行修改:

[root@web ~]# ll /usr/local/html/zabbix.t.com/
总用量 4
drwxr-xr-x  2 zabbixtcom daemon   47 10月 14 02:10 logs
drwxr-xr-x 13 zabbixtcom daemon 4096 10月 15 21:30 public_html

通过以下命令进行复制、重命名和修正用户与用户组:

#复制到指定位置
[root@web ~]# cp -r codex/zabbix/zabbix-3.2.1/frontends/php/ /usr/local/html/zabbix.t.com/

#重命名文件夹
[root@web ~]# mv /usr/local/html/zabbix.t.com/php /usr/local/html/zabbix.t.com/public_html/

#修改所属用户与用户组
[root@web ~]# chown -R zabbixtcom:daemon /usr/local/html/zabbix.t.com/

注意!以上信息请根据实际情况进行修改。

0x06 最后配置

完成前面的步骤,在一切正常的情况下通过IP或设定的域名即可访问zabbix,然后根据页面的步骤提示进行最终设定。

1476588142

0x07 结语

zabbix内置简体中文,可是有些字符显示为“口”,我想这应该是字体设置错误所导致的,也有可能是我电脑缺失必要的字体所导致的。以下是安装完成后的界面:

1476588143

但仅过这两天的使用,无论是易用性还是界面上,我觉得都比cacti要好。