Zabbix监控系统

什么是Zabbix监控系统?

zabbix 是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源系统,能监控各种网络、CPU、内存、磁盘情况,改系统一般需要LAMP或者LNMP架构支持运行

TOC

★准备工作★

需要两台服务器实验
zabbix_server:192.168.31.101
zabbix_agentd:192.168.31.102
安装包详情:
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
httpd-2.4.48.tar.gz
mysql-boost-5.7.36.tar.gz
php-7.2.34.tar.gz
zabbix-4.2.8.tar.gz
这里选择LAMP架构,php版本选择安装php7.2.34版本,要求最好安装php5.4.0到7.2.xx之间的版本,以免引起zabbix网页产生不必要的错误,已经实验过php7.4.xx的版本的php语法会报错,该版本的zabbix的php语法已经过时
安装包下载地址:
apr和apr-util包下载地址:http://archive.apache.org/dist/apr/
httpd下载地址:https://httpd.apache.org/
mysql下载地址:https://downloads.mysql.com/archives/community/
php下载地址:https://www.php.net/downloads.php
zabbix下载地址:https://www.zabbix.com/cn/download
安装编译所需要的工具和epel源

yum install -y epel-release
yum clean all && yum makecache
yum -y install gcc gcc-g++ cmake make

一、安装LAMP架构

1.安装httpd

1.安装编译httpd时所需要的依赖包

yum -y install expat-devel pcre pcre-devel
#安装apr-1.7.0
tar zxf apr-1.7.0.tar.gz && cd apr-1.7.0
./configure --prefix=/usr/local/apr
make && make install
#安装apr-util-1.6.1
tar zxf apr-util-1.6.1.tar.gz && cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

2.创建apache程序运行使用的用户

groupadd apache && useradd -M -s /sbin/nologin apache -g apache

3.解压安装包编译安装httpd

tar zxf httpd-2.4.48.tar.gz
cd httpd-2.4.48
./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=all --enable-mods-shared=all
make && make install

4.配置httpd配置文件支持php

vim /usr/local/httpd/conf/httpd.conf
-----------------------------------------------------------
ServerRoot "/usr/local/httpd"
Listen 80
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule php7_module        modules/libphp7.so
<IfModule unixd_module>
User apache
Group apache
</IfModule>
ServerAdmin www.apache.com
ServerName www.apache.com
<Directory />
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/usr/local/httpd/htdocs"
<Directory "/usr/local/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
    DirectoryIndex index.php index.html
</IfModule>
<Files ".ht*">
    Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/httpd/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php
</IfModule>
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

启动httpd服务

/usr/local/httpd/bin/apachectl start

2.安装mysql

1.yum安装mysql所需要的依赖包

yum -y install openssl openssl-devel prce pcre-devel bison bison-devel ncurses-devel

2.创建mysql用户给mysql程序使用

groupadd mysql && useradd -M -s /sbin/nologin mysql -g mysql

3.解压安装包,使用cmake工具编译安装mysql

#解压安装包
tar zxf mysql-boost-5.7.36.tar.gz && cd mysql-5.7.36
#cmake编译安装mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_BOOST=boost -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make && make install

4.使用mysql自带的mysqld命令初始化数据库,准备工作

/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/run/mysql.pid --initialize

这里初始化完成之后你会发现在你安装mysql的目录会自动生成data目录,这里还加载了mysql的pid文件的生成目录,记载mysql的pid进程号
5.创建准备mysql的一些工作目录

#创建日志目录并创建错误日志文件
mkdir -p /usr/local/mysql/run /usr/local/mysql/logs
touch /usr/local/mysql/logs/mysql_error.log
#把mysql的安装目录属主改为mysql,授权mysql程序pid运行目录755
chown -R mysql.mysql /usr/local/mysql
chmod 755 /usr/local/mysql/run

6.编辑mysql的配置文件

vim /etc/my.cnf
-----------------------------------------
[client]  
socket = /usr/local/mysql/mysql.sock
[mysqld]
skip-grant-tables
port = 3306
user = mysql
character-set-server=utf8
socket = /usr/local/mysql/mysql.sock
pid-file = /usr/local/mysql/run/mysql.pid
log-error = /usr/local/mysql/logs/mysql_error.log
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
[mysqld_safe]
pid-file = /usr/local/mysql/run/mysql.pid
log-error = /usr/local/mysql/logs/mysql_error.log

7.启动服务并初始化服务密码
启动脚本在/usr/local/mysql/support-files这个目录下

/usr/local/mysql/support-files/mysql.server start

登录数据库设置root密码

mysql -uroot -p

因为配置文件设置了skip-grant-tables参数,所以不需要密码直接进入,开始设置密码

flush privileges;
#进入mysql库下,修改root用户密码为123456
use mysql;
set password for root@localhost=password('123456');
#默认是只能本地登录,授权root用户所有地址都能登录
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

修改配置文件把skip-grant-tables这个参数注释掉(前面加上#号就行)或者删除,再重启服务
#skip-grant-tables

/usr/local/mysql/support-files/mysql.server restart

3.php安装

1.yum安装php所需要的依赖包

yum -y install php-bcmath php-mbstring sqlite-devel oniguruma-devel curl-devel freetype-devel libjpeg-devel libpng-devel libxslt-devel libxml2-devel zlib-devel

2.解压php安装包并编译

tar zxf php-7.2.34.tar.gz
cd php-7.2.34
./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/httpd/bin/apxs --with-gd --with-jpeg-dir --with-freetype-dir --with-curl --with-zlib --with-zlib-dir --with-mysqli --with-config-file-path=/usr/local/php7 --enable-mysqlnd --enable-mbstring --enable-fpm --enable-bcmath --enable-sockets --enable-shared --with-gettext --with-openssl --with-pdo-mysql
make && make install

编译的时候需要注意php的版本不同,添加模块的选项会不同
可以通过./configure --help查看编译选项详情
3.配置php配置文件
这个配置文件根据zabbix网页要求配置

vim /usr/local/php7/php.ini
------------------------------------------
[PHP]
date.timezone = "Asia/Shanghai"
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
zend.exception_ignore_args = Off
expose_php = On
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 16M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension=curl
extension=fileinfo
extension=gd2
extension=mysqli
extension=pdo_mysql
extension=pdo_odbc
[CLI Server]
cli_server.color = On
[Date]
[filter]
[iconv]
[imap]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.default_socket=/usr/local/mysql/mysql.sock
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =/usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.cookie_samesite =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[dba]
[opcache]
[curl]
[openssl]
[ffi]

4.重启httpd服务来重新加载php配置

systemctl restart httpd

优化php命令路径

ln -s /usr/local/php7/bin/* /usr/bin
ln -s /usr/local/php7/sbin/* /usr/sbin

二、安装zabbix

1.安装zabbix所需要的依赖包

yum -y install unixODBC-devel net-snmp-devel OpenIPMI-devel libevent-devel java-devel openldap openldap-devel

2.解压并编译安装zabbix

tar zxf zabbix-4.2.8.tar.gz
cd zabbix-4.2.8
./configure --prefix=/usr/local --sysconfdir=/etc/zabbix --enable-server --enable-proxy --enable-agent --enable-ipv6 --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi --with-unixodbc --with-ldap --enable-java
make && make install

3.创建zabbix用户和zabbix日志文件和配置文件存放目录

groupadd zabbix && useradd -g zabbix zabbix -s /sbin/nologin
mkdir -p /etc/zabbix/logs
chown zabbix.zabbix /etc/zabbix/logs
chmod 775 /etc/zabbix/logs

4.创建zabbix管理服务

cd zabbix-4.2.8
cp misc/init.d/fedora/core/zabbix_* /etc/init.d/
chmod +x /etc/init.d/zabbix_*

5.配置zabbix_server和zabbix_agentd服务配置文件并启动
zabbix_server:服务配置文件

vim /etc/zabbix/zabbix_server.conf
----------------------------------------
#日志文件位置
LogFile=/etc/zabbix/logs/zabbix_server.log
#数据库主机ip
DBHost=localhost
#数据库库名
DBName=zabbix
#数据库用户
DBUser=zabbix
#数据库用户密码
DBPassword=zabbix
#mysql.sock文件位置
DBSocket=/usr/local/mysql/mysql.sock
#数据库端口
DBPort=3306

zabbix_agent服务配置文件:

vim /etc/zabbix/zabbix_agentd.conf
----------------------------------------
#日志文件位置
LogFile=/etc/zabbix/logs/zabbix_agentd.log
#服务端IP地址,如不在本地这需填写远程地址
Server=127.0.0.1
#服务端服务端IP地址及端口
ServerActive=127.0.0.1:10051
Hostname=zabbix_server
#不启用自定义脚本功能,开启则为1
UnsafeUserParameters=0

启动zabbix_server和zabbix_agentd服务

/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start

6.配置mysql数据库供zabbix服务使用
mysql创建库,授权zabbix使用的用户和密码

mysql -uroot -p123456

创建数据库这一步如果直接创建数据库没有加上utf8编码的话,后面登录数据库可能也会出现问题

create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';

导入安装包里的sql文件

cd zabbix-4.2.8
mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql

7.复制网页文件到httpd的网页存放路径并授权

cp -rf frontends/php /usr/local/httpd/htdocs/zabbix
chown -R apache:apache /usr/local/httpd/htdocs/zabbix/

8.访问zabbix网页进行安装
访问192.168.31.101/zabbix页面开始初次安装(如下图所示)
zabbix.001
根据步骤依次安装
进行Check of pre-requisites环节(如下图)
zabbix.002
zabbix.003
zabbix.004
根据Check of pre-requisites环节需要达到以上图中的要求配置,除了对于mysql和php等一些安装包版本要求就是php.ini文件中的配置项的检查要求,在安装php阶段编辑php配置文件的时候已经添加了,所以这里从图中可以看出全部满足
需要满足如下面的配置项:

vim /usr/local/php7/php.ini
----------------------------------
date.timezone = "Asia/Shanghai"
max_execution_time = 300
post_max_size = 32M
max_input_time = 300
memory_limit = 128M
mbstring.func_overload = 2
always_populate_raw_post_data = -1

然后配置mysql信息(如下图)
zabbix.005
设置zabbix_server端口信息(如下图)
zabbix.006
这里直接跳过就行,是检查之前设置的信息(如下图)
zabbix.007
最后加载创建配置文件,安装成功(如下图)
zabbix.008
进入到登录环节(如下图)
zabbix.009
zabbix第一次默认账号为Admin,密码为zabbix
登录成功后进入到主页面(如下图)
zabbix.010
如果在安装的过程中出现以下情况的话
注意:记得查看zabbix.conf.php配置文件是否存在
zabbix.011
说明创建配置文件的时候失败,需要手动创建zabbix.conf.php配置文件,文件的位置就在网页目录的conf目录下有叫zabbix.conf.php.example的模板文件复制修改名字即可

cd /usr/local/httpd/htdocs/zabbix/conf
cp zabbix.conf.php.example zabbix.conf.php

三、安装zabbix客户端

安装配置zabbix_agentd服务

#创建工作目录
useradd -s /sbin/nologin -M zabbix
mkdir -p /etc/zabbix/logs
chown zabbix.zabbix /etc/zabbix/logs
chmod 755 /etc/zabbix/logs
#解压安装包,编译安装
tar zxf zabbix-4.2.8.tar.gz
cd zabbix-4.2.8
./configure --prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-agent
make && make install
#配置zabbix_agentd服务
cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_agentd
ln -s /usr/local/zabbix/sbin/zabbix_agentd /usr/local/sbin

编辑配置文件

vim /etc/zabbix/zabbix_agentd.conf
--------------------------------------
#日志文件位置
LogFile=/etc/zabbix/logs/zabbix_agentd.log
Hostname=agent1
#写服务端ip和本地代理程序ip
Server=192.168.31.101
#这里写服务端ip和端口
ServerActive=192.168.31.101:10051
UnsafeUserParameters=0

启动zabbix_agentd服务

/etc/init.d/zabbix_agentd start

四、配置查看zabbix页面

1.进配置菜单里面创建主机群组
zabbix.012
zabbix.013
2.为zabbix_agents主机群组添加可用的模板直接使用
zabbix.014
把需要的模板都可以选择添加进zabbix_agents主机群组
zabbix.015
zabbix.016
3.创建主机把192.168.31.102添加进去
zabbix.017
注意添加进zabbix_agents主机群组才能使用这个群组的模板
zabbix.018
选择使用该群组的模板
zabbix.019
zabbix.020
然后可以看到该主机可以使用的应用集、监控项和图形界面,然后功能状态点亮,如果没有添加模板,没有监控项功能状态会是灰色的,就不能看到监控画面
zabbix.021
4.可以才监控菜单里面查看图形选择群组、主机、监控选项,因为我添加的模板是可以查看cpu和内存情况的,所以(如下图所示)
CPU使用情况:
zabbix.022
内存使用情况:
zabbix.023
还有很多模板都是可以查看不同的情况的,可以根据需要添加模板,或者自己去配置监控项

报错集锦

configure: error: unixODBC library not found

yum -y install unixODBC-devel

configure: error: Invalid Net-SNMP directory - unable to find net-snmp-config

yum install -y net-snmp-devel

configure: error: Invalid OPENIPMI directory - unable to find ipmiif.h

yum install -y OpenIPMI-devel

configure: error: Unable to use libevent (libevent check failed)

yum -y install libevent-devel java-devel

configure: error: Invalid LDAP directory - unable to find ldap.h

yum install -y openldap openldap-devel

zabbix_server启动报错
Jul 27 21:28:45 feili12138 zabbix_server[1949]: Starting zabbix_server: /usr/local/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Jul 27 21:28:45 feili12138 zabbix_server[1949]: [FAILED]

[root@feili12138 ~]# find / -name libmysqlclient.so*
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/usr/local/mysql/lib/libmysqlclient.so.20.3.23
/usr/local/mysql/lib/libmysqlclient.so.20
/usr/local/mysql/lib/libmysqlclient.so
/renjie/mysql-5.7.36/libmysql/libmysqlclient.so.20.3.23
/renjie/mysql-5.7.36/libmysql/libmysqlclient.so.20
/renjie/mysql-5.7.36/libmysql/libmysqlclient.so
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig