Zabbix监控系统部署:源码安装

1. 概述

本篇博客主要从zabbix使用者的角度(运维)来源码部署zabbix,并利用zabbix进行集群的性能监控,故障报警及处理等基础功能测试。

软件安装方式为源码编译安装最新版zabbix。源码部署不仅有利于把控整个软件部署的整个过程及其细节,也能够更好地调整,移植和升级zabbix系统。

1.1 基础环境

节点分配:

主机 配置 角色 IP 备注
node17 >512M zabbix_server 192.168.80.17 提供LANMP环境
node18 >512M zabbix_proxy 192.168.80.18
node19 >512M zabbix_agent 192.168.80.19

系统版本:

操作系统 CentOS6.5_x86_64 安装方式
HTTP httpd-2.2.15-69 YUM
MySQL mysql-5.1.71 YUM
PHP PHP 5.6.36 YUM安装后升级
MAIL /bin/mail YUM
Zabbix zabbix-3.4.12.tar.gz 源码编译

配置约定:

  1. 采用全局文件系统,减少部署过程
  2. 采用本地用户,而非LDAP认证缩短部署过程
  3. 不配置启动脚本,以远程管理方式启动服务

系统环境

  1. 关闭防火墙:service iptables stop
  2. 取消selinux:setenforce 0 或修改配置文件/etc/selinux/config,使SELINUX=disabled

2. 部署过程

2.1 创建用户组

根据zabbix的部署文档,如果在相同节点同时部署zabbix server,zabbix proxy,zabbix agent等,需要为运行不同的进程创建不同的进程用户

本篇博客为了区分不同进程的角色,虽然将服务分散在不同节点,也创建不同的进程用户:

  1. zabbix server进程用户:zbx_s
  2. zabbix proxy进程用户:zbx_p
  3. zabbix agent进程用户:zbx_a

在node17上执行命令:

创建server进程用户:useradd -M -s /sbin/nologin -u 501 zbx_s
创建proxy进程用户:useradd -M -s /sbin/nologin -u 502 zbx_p
创建agent进程用户:useradd -M -s /sbin/nologin -u 503 zbx_a

按照约定:将node17的/etc/passwd,/etc/group,/etc/shadow拷贝至node18和node19

若采用LDAP进行全局认证,此过程可以省略,转为配置LDAP全局认证,这里不做介绍。

2.2 下载源码解压编译安装

2.2.1 下载源码解压

zabbix官网地址:https://www.zabbix.com/

最新版zabbix下载地址:

wget https://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.4.12/zabbix-3.4.12.tar.gz

解压源码目录:

tar -zxvf zabbix-3.4.12.tar.gz -C /tmp/ && cd /tmp/zabbix-3.4.12/

2.2.2 YUM安装依赖环境

由于node17系统是最小化安装,因此需要安装基本的编译环境和构建工具:

执行yum -y install gcc gcc-c++ libtool autoconf automake

因为本篇博客要在配置编译环境过程,即执行./configure脚本时,指定一些依赖软件环境,主要包括:

libxml2,libxml2-devel,libevent,libevent-devel,pcre,pcre-devel,net-snmp,net-snmp-devel

因此,需要通过YUM来安装这些依赖软件环境。执行命令:

yum -y install libxml2 libxml2-devel libevent libevent-devel net-snmp net-snmp-devel pcre pcre-devel

2.2.3 编译安装最新版curl

在centos6.5系统上安装zabbix-3.4.12时,因为操作系统版本过低的问题,会导致在后面配置zabbix发送邮件时报错,报错的原因为curl版本过低。

因此需要更新node17上的curl版本。

此时通过rpm -qa | grep curl,检查系统是否安装curl包,并通过curl -V确定curl的版本。

node17检查的版本为curl 7.19.7,并且可以通过该命令,查看该版本支持的协议有:tftp ftp telnet dict ldap ldaps http file https ftps scp sftp

下载新版curl

通过wget https://curl.haxx.se/download/curl-7.61.0.tar.gz下载最新版本的curl源码

解压配置编译安装

tar -zxvf curl-7.61.0.tar.gz -C /tmp
cd /tmp/curl-7.61.0
./configure
make && make install

此时执行curl -V,能够看到curl版本已经更新至7.61,且支持的协议有:dict file ftp gopher http imap pop3 rtsp smtp telnet tftp

虽然已经安装了最新版的curl,但是此时YUM命令已经不能使用,错误提示:No module named pycurl

注:此时需要解决这个问题,具体方法参见博客《Error【0007】:zabbix中因为curl版本过低而无法发送邮件.md》,博客园地址:https://www.cnblogs.com/liwanliangblog/p/9419205.html

2.2.4 更新GNU构建工具

在上面的步骤中,已经通过YUM安装了autoconf和automake等GNU构建工具

但是在编译zabbix时,指定的编译选项:--enable-proxy和--enable-agent会因为这两个工具的版本过低而无法编译。

因此,这部分主要进行这两个版本的更新。

首先查看当前的工具版本:

autoconf -V : autoconf (GNU Autoconf) 2.63

automake --version:automake (GNU automake) 1.11.1

在GNU官网下载这两个工具的更高版本:

autoconf:wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz

automake:wget ftp://ftp.gnu.org/gnu/automake/automake-1.5.tar.gz

解压并编译安装

tar -zxvf autoconf-2.68.tar.gz -C /tmp && cd /tmp/autoconf-2.68 && ./configure && make && make install
tar -zxvf automake-1.5.tar.gz -C /tmp && cd /tmp/automake-1.15 && ./configure && make && make install

重新登陆通过autoconf --version和automake --version选项验证安装

2.2.5 YUM安装MySQL

因为使用MySQL作为数据库,并且在编译zabbix时,需要指定MySQL的安装环境,在此通过YUM来安装数据库

node17上执行:

yum -y install mysql mysql-server mysql-clients mysql-devel

2.2.5 配置编译安装

配置

./configure  --prefix=/usr/local/zabbix/3.4.6 \
--enable-server --enable-proxy --enable-agent --enable-ipv6 \
--with-mysql --with-libxml2 --with-net-snmp --with-libevent --with-libpcre --with-openssl --with-libcurl \

编译安装

make all && make install

2.3 部署监控前端站点环境

zabbix监控前端时通过PHP语言构建,后端采用MySQL存储配置和监控数据。

在最新版的zabbix中,要求PHP的版本不低于5.6。

本部分主要介绍监控前端的站点环境部署

2.3.1 部署Web服务器

Web服务器通过httpd提供服务。

安装HTTP

node17执行命令:yum -y install httpd

配置

编辑httpd的主配置文件,

vim /etc/httpd/conf/httpd.conf,修改ServerName=192.168.80.17

启动httpd

node17执行,service httpd restart && chkconfig httpd on

2.3.2 部署DB数据库服务器

安装MySQL

上述过程中,已经通过YUM安装了MySQL,这里主要时配置MySQL

启动MySQL服务:service mysqld start

配置MySQL

执行mysql回车,进入数据库后:

#删除无用用户和登陆
delete from mysql.user where user = ' ' and host = 'node17';
delete from mysql.user where user = ' ' and host = 'localhost';
delete from mysql.user where user = 'root' and host = 'node17';
#授权root用户对所有库的权限
grant all privileges on *.* to 'root'@'localhost' identified by 'liwanliang';
grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'liwanliang';
grant all privileges on *.* to 'root'@'192.168.80.1' identified by 'liwanliang';
grant all privileges on *.* to 'root'@'192.168.80.17' identified by 'liwanliang';
#刷新权限
flush privileges;
#创建zabbix数据库
create database zabbix;
#授权zabbix用户对zabbix库的权限
grant all privileges on zabbix.* to 'zabbix'@'192.168.80.17' identified by 'liwanliang';
#刷新权限
flush privileges;

配置MySQL默认字符编码

因为MySQL默认编码不是utf8,因此会在后续的配置中,出现中文变成???的现象,因此需要提前配置MySQL字符编码,如下:

Zabbix监控系统部署:源码安装

配置MySQL开机启动

node17执行:chkconfig mysqld on

2.3.3 部署PHP环境

zabbix前端采用PHP语言编写,并且zabbix-3.4.12版本需要PHP5.6以上支持。

本篇博客在最小化安装系统上通过YUM安装PHP环境,并且更新YUM源升级PHP的方式来部署PHP环境。

注:升级过程参见包括:https://www.cnblogs.com/savokiss/p/6259816.html

更新YUM源

node17上执行

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

安装PHP5.6环境

yum -y install php56w php56w-fpm php56w-mysql php56w-mbstring php56w-gd php56w-dom php56w-bcmath php56w-ldap

配置PHP

在配置文件/etc/php.ini中,以下内容需要修改或者取消注释

post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
always_populate_raw_post_data = -1

注:这些参数会在前端站点初始化时检查并提示修改

重启httpd生效

service httpd restart

2.3.4 配置zabbix部分

拷贝站点前端文件

在解压后的zabbix目录下,有一个叫做frontends的目录,里面存放着zabbix前端框架文件,将其拷贝至httpd服务器根目录下:

cp -r /tmp/zabbix-3.4.12/frontends/php /var/www/html/zabbix

导入数据库

在解压后的zabbix目录下,有一个叫做database的目录,里面存放着各类zabbix后端数据库的初始化sql语句。

执行以下命令,进行数据库安装:

#注:以下顺序最后不要乱,以免报错
mysql -h 192.168.80.17 -uzabbix -p zabbix < schema.sql
#输入密码:liwanliang,等待结束
mysql -h 192.168.80.17 -uzabbix -p zabbix < images.sql
#输入密码:liwanliang,等待结束
mysql -h 192.168.80.17 -uzabbix -p zabbix < data.sql
#输入密码:liwanliang,等待结束

图形化配置

安装了前端和数据库之后,便可以通过浏览器进行zabbix监控前端的初始化安装。

本篇博客不涉及,参见以下内容:

博客园地址:https://www.cnblogs.com/liwanliangblog/p/9410900.html

笔记内链:《Zabbix监控系统部署:前端初始化.md

登陆

当前端配置完成之后,便可登陆zabbix

初次登陆,默认的账号为:Admin,密码为zabbix

登陆之后,可以配置语言环境,其他用户等,具体参见以下内容:

博客园地址:

笔记内链:《Zabbix监控系统部署:基本功能测试.md

中文字体显示方块

这是因为zabbix前端配置的字体无法正常显示,这里参照网上的教程,将win10操作系统中的宋体字拷贝至zabbix前端目录下,并重新配置。

具体操作如下:

  1. win10找到【宋体】字,将其拷贝到nod17的zabbix字体目录下

    Zabbix监控系统部署:源码安装
  2. 配置字体配置文件

    vim /var/www/html/zabbix/include/defines.inc.php

Zabbix监控系统部署:源码安装

Zabbix监控系统部署:源码安装

  1. 刷新验证

3. 环境共享

按照配置约定,为了减少部署的步骤,将node17的/usr/local目录,通过NFS共享给node18和node19

同时因为node18和node19拷贝了node17的用户组和密码等文件,因此具有相通的zbx_s/zbx_p/zbx_a等进程用户

3.1 安装NFS环境

node17执行:yum -y install rpcbind nfs-utils

3.2 配置NFS共享目录

编辑文件vim /etc/exportfs,内容如下

/usr/local 192.168.80.0/24(rw,no_root_squash,no_all_squash)

3.3 启动NFS服务

执行service rpcbind start && service nfs start,设置服务启动

执行命令chkconfig rpcbind on && chkconfig nfs on,设置开机启动服务

3.4 node18和node19挂载

node18和node19需要安装nfs-utils,执行yum -y install nfs-utils rpcbind安装

执行命令挂载:mount.nfs 192.168.80.17:/usr/loca/ /usr/local

通过ldd /usr/local/zabbix/3.4.6/sbin/zabbix_agentd验证agent的可用与否。

3.5 批量启动

共享了node17的文件系统之后,对于node18和node19,只需要按照“命令+配置”的方式,便可启动对应的服务。

使用全局文件系统启动服务需要注意的是程序的pid文件和sock文件等,需要放置在节点根文件系统上,而不能够放在NFS全局文件系统,否则会因为进程互斥导致无法启动进程

上一篇:线上服务的FGC问题排查,看这篇就够了!


下一篇:线上服务内存OOM问题定位三板斧