共计 8275 个字符,预计需要花费 21 分钟才能阅读完成。
1. 写在前面
本文主要介绍的是 zabbix 的编译安装过程,包含它的基础环境 LNMP,虽然 zabbix 官方一般推荐的环境是 LAMP。以及实现简单的监控任务,在发现问题时能够发送通知邮件。
2. 系统环境
提前安装好如下两个包组:yum groupinstall “Development Tools” “Server Platform Development”。
3. 搭建 web 服务
zabbix 作为监控系统需要有图形化的页面呈现给运维人员,它使用 web+php 的方式来实现。这里首先搭建其需要的 web 服务。我使用的是 nginx-1.10.3 的源码包编译安装的方式。相应步骤如下:
- 添加 nginx 用户
- 编译安装 nginx
将前面提到的nginx-1.10.3.tar.gz
包解压以后,cd 到nginx-1.10.3
目录中,然后使用如下参数进行configure
:
- 创建软链接至 nginx
默认情况下 nginx 编译安装的路径(prefix) 是在/usr/local/nginx
,所以创建一个软链接,使用起来更方便:ln -s /usr/local/nginx-1.10.3/ /usr/local/nginx
- 将源码安装的 nginx 执行程序放到 PATH 环境变量中
在 Linux 中,通过源码安装的各类软件包的执行程序都可以都通过这种方式放入 PATH 环境变量中方便使用,且相应的文件不需要赋予执行权限。
- 更改 nginx 文件夹属主为 nginx
chown -R nginx.nginx /usr/local/nginx-1.10.3
- 验证 web service
- 设置 nginx 开机自启
这里我选择的是直接将 nginx 执行程序添加到rc.local
脚本中:
- 至此 web service 的搭建工作完成。下面继续 mysql 的搭建。
4. 搭建 mysql 服务
zabbix 的 server 和 proxy 是需要连接数据库的,zabbix 支持多种类型的数据库,本文只涉及到 mysql。
- 添加 mysql 用户
useradd -s /sbin/nologin -M mysql
- 解压 mysql 二进制包到目标文件夹
因为我使用的是名为mysql-5.5.53-Linux2.6-x86_64.tar.gz
的压缩包,此包实际是一个 mysql 的二进制包,相当于从相应平台安装编译好后打包出来的,直接解压以后可以使用,而无需再 configure 和 make&&make install 了。操作指令:tar xf mysql-5.5.53-Linux2.6-x86_64.tar.gz -C /usr/local #解压出来的文件会自动放置于 /usr/local/mysql-5.5.53-Linux2.6-x86_64 中
- 创建软链接
为后续使用方便,如在脚本中引用路径时更方便,这里还是给它设置一个软链接:ln -s /usr/local/mysql-5.5.53-Linux2.6-x86_64/ /usr/local/mysql
- 更改 mysql 文件夹属主为 mysql
chown -R mysql.mysql /usr/local/mysql/
- 初始化 mysql 数据库
在解压后的 mysql 目录中有一个 scripts 目录其中有一个mysql_install_db
的文件,执行它,并指定用户为mysql
,数据目录使用其默认的路径/usr/local/mysql/data
,操作如下:
- 设置 mysql 开机自启
mysql 目录中有一个 support-files 目录,其中有一个mysql.server
文件,将其复制到/etc/init.d/
下,并更名为mysqld
:cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqldchkconfig mysqld on
- 提供 mysql 的配置文件
同样是在support-files
目录中有多种不同类型的 mysql 配置文件,本文我使用的是my-small.cnf
,将其复制到/etc
目录下,因为我没有设置非常规的 basedir 和 datadir,所以这里可以不用对其进行修改:cp support-files/my-small.cnf /etc/my.cnf #更名为 my.ncf
- 启动 mysql 服务
service mysqld start lsof -i :3306 # 检查 mysql 是否启动成功
- 设置 mysql root 账户密码
mysqladmin -uroot -p<password>
然后在使用 root 用户登录。
5. 搭建 php-fpm 环境
- configure php
在将前面提到的php-5.5.38.tar.gz
包解压以后,cd
到php-5.5.38
目录中,执行以下configure
指令:
configure
完成以后,会提示进行make test
,这是一个非常耗时间的过程,最后的结果有可能有一些警告,但不一定会有很大的影响,可以忽略。我在操作过程中遇到如下提示,没有去深究它,后面编译安装正常完成,没有错误提示,使用也还未发现问题。
- 在
configure
过程中如果碰到的有错误提示,请根据提示信息予以解决,查看是否上述指定的包并未安装所致。 - 安装 php-fpm
makemake install
- 设置 php 的软链接
ln -s /usr/local/php-5.5.38/ /usr/local/php
- 将 php 的执行程序放入 PATH 变量中
- 提供 php 的配置文件
在php
的源码包中提供的有 php 的配置文件,在解压后的目录中将其复制到我们在configure
时指定的位置并更名为php.ini
,如:--with-config-file-path=/usr/local/php-5.5.38/etc
。
- 提供 php-fpm 的配置文件
php-fpm
的配置文件在执行make install
时已安装好了,只需要将其改名即可:
- 启动 php-fpm
- 设置 php-fpm 开机自启
在编译后的 php 源码包中其实就提供了 php-fpm 服务脚本:./sapi/fpm/init.d.php-fpm
,我们只需要将其复制到/etc/init.d/
目录下,并更名即可。操作如下:
- 将 php-fpm 与 nginx 结合
在php-fpm
可以正常启动以后,需要配置 web service 可以访问 php-fpm 服务,因为我这里使用的nginx
提供 web service,所以修改其配置 文件/etc/usr/local/nginx/conf/nginx.conf
如下:
-
- 可以直接将原
nginx.conf
文件中与php-fpm
相关的部分的注释直接去掉,并修改成如上所示内容。 - 测试 nginx 是否可正常使用 php-fpm
- 要进行此测试,还需要修改
nginx.conf
中的根location
,在其首页中添加index.php
,内容如下:
- 要进行此测试,还需要修改
- 可以直接将原
-
-
- 在
nginx
的html
文件夹中使用如下指令,建立index.php
文件:echo "<?php phpinfo(); ?>" > index.php
- 重启 nginx 程序和 php-fpm 服务
- 在
-
-
- 浏览器中输入这台 server 的 ip 后回车
正常情况下,可以显示 phpinfo 的详细信息了,如下所示:php info 页面
- 浏览器中输入这台 server 的 ip 后回车
6. 搭建 zabbix server
- 创建 zabbix 用户
useradd -s /sbin/nologin -M zabbix
- configure zabbix
将前面提到的zabbix-3.2.4.tar.gz
包解压以后,cd
到解压后的目录 (zabbix-3.2.4) 后执行如下指令:
- 因为 zabbix server 也需要被监控,所以其也需要 agent。
configure 时使用了--with-net-snmp --with-libcurl --with-libxml2
所以需要先在系统中使用yum
安装 net-snmp-devel、libcurl-devel、libxml2-devel 包,使用yum
安装会自动解决依赖关系将 net-snmp、libcurl、libxml2 一并安装上。
正常完成configure
后,会显示如下汇总信息:
- 安装 zabbix
根据configure
完成后的提示执行make install
即可,无需执行 make 然后再 make install。
7. 建立给 zabbix 使用的数据库
zabbix
要实现将其相关的配置信息,监控的信息都存储于后台的数据库中,自然需要建立相应的数据库,并配置相应的账号。zabbix
支持多种类型的数据库,这里只以 mysql
为例, 且是在 zabbix server 上的 mysql 上需要做的。
- 创建给 zabbix 使用的数据库 zabbix
- 初始化 zabbix 数据库
在 zabbix 的源码解压目录中有一个database
目录,其中有针对不同类型数据库要使用的初始化 sql 语句,在这里需要选择 mysql 目录中的语句:
- 修改 zabbix server 配置文件
源码安装的 zabbix,其配置文件默认位于其安装目录的etc
目录中,即:/usr/local/zabbix/etc
下,server 的为zabbix_server.conf
,此时修改其连接数据库的相关信息即可,默认连接的数据库即为本机的数据库,数据库即为 zabbix,密码为空,所以将密码设置为前面创建的密码即可。DBPassword=<password>
- 修改 zabbix agent 的配置文件
文件位置和 server 的一样,需要修改的地方有如下几处:
- 设置 zabbix server 和 agent 开机自启动
zabbix 原生也提供了用于实现开机自启动的服务脚本,它们在 3.2.4 版本中位于解压后的目录/root/softwares/zabbix-3.2.4/misc/init.d
,这个目录下有针对不同类型系统的脚本,这里我选择的是 fedora 这一目录中的脚本,脚本位置及名称如下:
很明显分别有针对 server 和 agent 的脚本,把它们复制到 /etc/init.d/
目录下:
打开这两个文件 (zabbix_agentd 和 zabbix_server) 查看其内容,根据实际情况进行修改,一般需要更改的只是如下内容:
将这两个服务安装添加到自启动中:
- 启动 zabbix server 和 agent 程序
8. 安装 zabbix web 程序
zabbix 对于监控的结果可以通过 web 页面来进行展示和查看,它需要安装一个使用 php 程序来运行的 web 站点,根据 zabbix 的官方要求,还有如下 php 的参数需要提前修改:
上述修改都在 php.ini
文件中完成。在本文的环境中它位于 /usr/local/php/etc/php.ini
。另外需要补充一下,zabbix3.2.4 它要求的 php 版本最低为 5.4。修改完php.ini
文件后,重启 php-fpm 服务service php-fpm restart
。
安装 zabbix web 程序操作步骤如下:
-
- 创建 web 站点
在 web service 的根目录下给 zabbix 单独创建一个根目录,用于存放 zabbix 的 php 程序文件,然后再将源码解压目录中名为frontends/php
目录中的全部内容复制过来。
- 创建 web 站点
- 打开 zabbix web 完成配置过程
浏览器中输入
http://server_ip/zabbix
打开 zabbix 的 web 界面,初次打开会显示欢迎界面,此时 web 程序的安装还没有完成,并不需要登录 web 站点的用户名和密码,然后点击Next step
可以看到它会进行一个 php 环境参数的检测,需要它们全部显示为OK
在继续进行下一步,从此步也可以看到很多之前 php configure 时所 enable 和 with 的选项参数,它们都是运行 zabbix web 程序所要求的。 - zabbix 3.2.4 web 需求 php 的环境如下:
php 环境检测通过的结果如下图所示:
zabbix web php 环境检测通过图 1
zabbix web php 环境检测通过图 2
- 配置 zabbix web 连接的数据库
数据库为本机名为 zabbix 的 mysql 数据库,账户名和密码输入此前创建 zabbix 数据库时配置授权的账户和密码。
zabbix web DB 配置
- 配置 zabbix server 信息
这里在 Name 处可以填上本机的主机名,其它保持默认即可。
zabbix server 详细信息
- zabbix web 安装信息汇总
zabbix web 安装信息汇总
- 生成 zabbix web 的配置文件并导入站点配置目录中
zabbix web 安装程序会自动生成一个名为zabbix.conf.php
的配置文件,并尝试自动将其放入 zabbix 站点配置目录中,但由于权限问题,会创建失败,此时只需要通过浏览器下载,然后手动入到指定目录即可,web 安装程序会有相关提示,如下图所示:
zabbix web conf install
文件导入完成后,点击Finish
,会出现以下信息,即表示 zabbix web 安装成功。
zabbix web 安装成功提示信息
- 登录 zabbix web 界面
在浏览器中输入http://server_ip/zabbix
即可打开 zabbix 的登录界面,输入如下默认账户和密码即可登录:
user name:Admin
password:zabbix
此用户为 zabbix web 系统中 super user,拥有最高权限,用户名注意字母大小写。
初始情况下,只配置了让 zabbix server 监控它自己,下面继续配置一台 Linux server,让 zabbix server 可以监控它,并可以发送监控通知邮件。
9. 被监控端安装 zabbix agent
安装过程还是使用源码编译安装的方式,先创建 zabbix 用户。
在被监控的 Linunx server 上,只需要安装 zabbix agent,在 configure 时使用如下参数即可:
configure 完成以后,注意观察汇总信息是否有错误提示,是否只启用了 agent,有问题根据实际情况去排查并解决。如果没有错误,则根据提示信息执行 make install
完成安装过程。
被监控端设置软链接,添加 zabbix 执行程序路径至 PATH 变量,修改 zabbix_agentd.conf
文件以及 zabbix_agentd 服务开机自启的过程参考前文相关内容即可,此处不在赘述。
最后启动被监控端的 zabbix_agentd 服务。
10.zabbix server 上配置监控内容
在 zabbix server 上配置刚安装了 zabbix agent 的主机,并设置要监控的内容。
- 添加要监控的主机
在 zabbix web 上添加要监控的主机,选择Configuration
—->Hosts
—>Create host
,在如下界面中填写相应信息:zabbix web 添加主机 1
根据实际情况填写主机名,选择主机分组,主机 ip,对于主机分组此处我选择 Linux servers
作为示例。
然后可以选择 Host
旁的 Templates
,zabbix 内置了很多种不同的模板,它包含的有监控条目item
,告警触发器trigger
,图形展示Graphs
,屏幕Screens
等。以下为给主机应用模板的操作过程:
给主机应用监控模板 1
选择相应的监控模板
确认主机是否应用了监控模板
示例中的 server3
上我启用的有 web 服务,所以这里选择了 zabbix 内置的 Template App HTTP Serivice
这一模板对 http 服务进行监控。等待片刻,ZBX
会显示成绿色即表示 zabbix server 能和 server3 上的 zabbix agent 正常通信了,如下所示:
zabbix server 已可监控到 server3
11. 配置 zabbix server 发送通知邮件
zabbix server 默认支持多种发送通知的方式,其中就包含的有名为 Email
的方式,但经过多次尝试都未能实现让 zabbix server 发送通知邮件,所以这里使用 zabbix 调用外部脚本且借助公网 smtp 服务器的方式来发送通知邮件。详细过程如下:
- 配置 Media Type
zabbix 支持自定义 Media Type,这里我创建一个名为 user mail 的 Media Type,并指定它是需要使用Scripts
的方式。在Administration
下选择Media Types
,然后选择Create media type
,创建内容如下:
zabbix 自定义 media type
- 建立通知邮件脚本
默认情况下通知邮件脚本应该存放在/usr/local/zabbix/share/zabbix/alertscripts
,直接在这个路径下建立相应的脚本即可,如果脚本不是存放在此处,需要修改zabbix_server.conf
文件中此处# AlertScriptsPath=${datadir}/zabbix/alertscripts
取消掉注释并写上脚本完整的存放路径。mail.sh 的内容如下: - 定义收件人邮件地址
在 zabbix 中每个用户可以关联多个Media type
,在这里我给Admin
这一用户关联上前面已经定义好的名为user mail
的 Media type,并填上其邮件地址,即 zabbix 发送邮件通知时的收件人邮件地址。在 zabbix web 上依次选择Administration
,Users
,Admin
,Media
标签,然后点击Add
,给这一用户定义一个 media,此处选择user mail
,如下所示:
给用户关联相应的 Media-1
给用户关联相应的 Media-2
给用户关联相应的 Media-3
- 设置发送通知的 action
zabbix 中只有设置 了 action,它才知道应该如何发送通知,如在什么条件下发送,通知通过哪个 media type 发送,发送给哪些人,发送的频率是怎么样的,发送的通知主题和正文是怎样的,当故障恢复以后如何发送通知等。这些必须在 action 中定义好。以下为配置示例,当被监控端不是在工程态 (维护状态) 中,发生了Problem
事件,即将相关信息发送给zabbix administraotrs
组内的所有用户且通过上面自定义的user mail
这一 media 发送。
大致过程如下:依次选择Configuration
,Actions
,Create action
,然后按照下图所示过程进行操作:
定义 action 名称及触发条件
定义故障时 action 的具体行为 -1
定义故障时 action 的具体行为 -2
定义故障恢复后 action 的具体行为
查看刚定义的 action
从上述过程也可以看到其实这些 action 定义的是由 Trigger 来触发的,因为前面我是直接给主机应用了 zabbix 内置的 http service 的模板,它里面已经关联的有相应的 trigger 了,所以当 http service 发生变化,会自动触发相应的 trigger,而后又触发 zabbix 执行相应的 action。这是 zabbix 发送通知的一个大致的过程。
- 定义 zabbix 发送通知邮件使用的账户
zabbix server 本机非合法的 smtp 服务器,由它直接发送邮件给公网邮箱,会有很多问题,不一定成功。所以这里依然选择使用公网的 163 smtp 服务器来发送 zabbix 的通知邮件。因为不需要用到本机的 smtp 服务,所以可以选择将 smtp 服务停止,并确保本机有 mail 程序可用,它由 mailx 软件包提供。在上面定义通知邮件脚本时就已经用到了 mail 指令。
本机服务账户配置方法,在/etc/mail.rc
中增加如下内容: - 制造告警测试是否正常收到通知邮件
将 server3 的 web service 停掉,将近 3 分钟查看邮件客户端,收到了 zabbix 发送的通知邮件。这个从故障发生到 zabbix 发送通知消息的时长,取决于监控的 item 配置的检测时长和 trigger 判断条件,默认的 http service 的检测时长为 1 分钟,其判断条件为最大连续检测到 3 次失败即认为 http service down,触发相应的 trigger,并与相应的 action 联动,从而发送通知邮件。zabbix 发送的通知邮件内容大致如下:
zabbix 通知邮件
12. 小结
以上即为 zabbix 实现监控 Linux 服务器并发送通知邮件的实现过程小记。只是 zabbix 的基础入门,还有很多内容需要在不断的使用中熟悉,也可以参考官网手册,会有很多收获。