前言:在工作中常常需要对服务器进行监控,但是要选择一款合适监控软件可不容易,今天介绍下zabbix这款监控软件

一、Zabbix介绍
1.Zabbix是一个企业级的、开源的、分布式的监控套件
2.Zabbix可以监控网络和服务的监控状况.Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警.
这样可以保证快速的对问题作出相应. Zabbix可以利用存储数据提供杰出的报告及图形化方式. 这一特性将帮助用户完成容量规划。
3.Zabbix 支持 polling和trapping两种方式. 所有的 Zabbix报告都可以通过配置参数在WEB前端进行访问.
Web前端将帮助你在任何区域都能够迅速获得你的网络及服务状况. Zabbix 可以通过尽可能的配置来扮演监控你的IT基础框架的角色,
而不管你是来自于小型组织还是大规模的公司.
4.Zabbix是零成本的. 因为 Zabbix 编写和发布基于 GPL V2 协议. 意味着源代码是免费发布的
5.Zabbix公司也提供商业化的技术支持

二、Zabbix特性
1.数据收集
a.可用性及性能检测
b.支持SNMP(trapping及polling)、IPMI-(智能平台管理接口,定义了嵌入式管理子系统进行通信的特定方法)、JMX监控-(是一个为应用程序、设备、系统等植入管理功能的框架)
c.自定义检测
b.自定义间隔收集数据
e.server/porxy/agents

2.灵活的阀值定义
a.允许灵活地自定义问题阀值,Zabbix中称为触发器(trigger),存储在后端数据库中。

3.高级告警配置
a)可以自定义告警升级(escalation)、接收者及告警方式
b)告警信息可以配置并允许使用宏变量,让zabbix更加灵活
c)通过远程命令实行自动化动作(action)

4.实时绘图
a)通过内置的绘图方法实现监控数据实时绘图

5.扩展的图形化显示
b)允许自定义创建多监控项视图
c)网络拓扑
d)自定义的面板(screen)和slide shows,并允许在dashboard页面显示
e)报告
f)高等级(商业)监控资源

6.历史数据存储
a)数据存储在数据库中
b)历史数据可配置
c)内置数据清理机制

7.配置简单
a)主机通过添加监控设备方式添加
b)一次配置,终生监控(除非调整或删除)
c)监控设备允许使用模板

8.模板使用
a)模板中可以添加组监控
b)模板允许继承

9.网络自动发现
a)自动发现网络设备
b)agent自动注册
c)自动发现文件系统、网卡设备、SNMP OID(对象标识符)等

10.快速的web接口
a)web前端采用php编写
b)访问无障碍
c)你想怎么做就能做
d)审计日志

11.Zabbix API
a)Zabbix API提供程序级别的访问接口,第三方程序可以很快接入

12.权限系统
b)安全的权限认证
c)用户可以限制运行维护的列表

13.全特性、agent易扩展
a)在监控目标上部署
b)支持Linux及window

14.二进制守护进程
a)C开发,高性能,低内存
b)易移植

15.具备应对负责环境情况
a)通过Zabbix proxy可以非常容易的创建远程监控

三、Zabbix进程构成
默认情况下 zabbix 包含 5 个程序: zabbix_agentd、 zabbix_get、 zabbix_proxy、 zabbix_sender、
zabbix_server,另外 zabbix_java_gateway
1.zabbix_agentd
客户端守护进程,收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等
2.zabbix_get
zabbix工具,单独使用的命令,通常在 server 或者 proxy 端执行, 用户获取被监控端数据, 通常用于排错。
例如在 server 端获取不到客户端的内存数据,我们可以使用 zabbix_get 获取客户端的内容的方式来做故障排查
3.zabbix_sender
zabbix工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的 check,并且与 trapper 配合使用。 生
存环境中,个别非常耗时间 check 经常导致 zabbix 超时。于是我们在脚本执行完毕之后,使用 sender 主动提交数据
4.zabbix_server
zabbix服务端守护进程。zabbix_agentd、 zabbix_get、 zabbix_sender、 zabbix_proxy、 zabbix_java_gateway 的数
据最终都是提交到 server
备注:当然不是数据都是主动提交给 zabbix_server,大多数情况下都是 server 主动去取数据。
5.zabbix_proxy
zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。
一般跨机房、地区的环境需要用到proxy。
6.zabbix_java_gateway
zabbix2.0 之后引入的一个功能。顾名思义: Java 网关,类似 agentd,但是只用于 Java 方面。
需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy。

四、Zabbix安装

安装Zabbix前需要搭建LNMP环境

4.1、安装Nginx
1.创建用户

useradd -M -s /sbin/nologin nginx

2.进入/usr/local/src目录,创建/usr/local/nginx目录

cd /usr/local/src
mkdir /usr/local/nginx

3.解压nginx源码包

tar xf nginx-1.10.3.tar.gz

4.安装前的准备,安装pcre和openssl,支持rewrite和https  

yum install pcre* openssl* -y

5.编译nginx

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
make && make install

6.启动Nginx 

/usr/local/nginx/sbin/nginx
访问测试一下
[root@lnmp nginx]# curl -I http://localhost
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 22 Mar 2017 16:41:22 GMT

7.添加环境变量  

vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
source /etc/profile.d/nginx.sh

4.2、安装MySQL服务  

1.创建用户

useradd mysql -M -s /sbin/nolgoin

2.进入目录,解压mysql二进制包  

cd /usr/local/
tar xf mysql-5.5.54-linux2.6-x86_64.tar.gz

3.生成配置文件和开机脚本 

cd mysql-5.5.54-linux2.6-x86_64/support-files/
cp my-small.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysqld

4.编辑/etc/init.d/mysqld文件  

cat /etc/init.d/mysqld | grep -E "^basedir=|^datadir="
basedir=/usr/local/mysql		#原始目录
datadir=/usr/local/mysql/data		#数据目录
chmod 755 /etc/init.d/mysqld

5.做一个软链接  

ln -s mysql-5.5.54-linux2.6-x86_64/ mysql  

6.修改权限,为了生成初始化数据库

chown mysql.mysql -R /usr/local/mysql

7.初始化数据库  

cd /usr/local/mysql/scripts/
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
WARNING: The host 'lnmp' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
170323  1:12:30 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
170323  1:12:30 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.54) starting as process 5104 ...
OK
Filling help tables...
170323  1:12:30 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
170323  1:12:30 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.54) starting as process 5111 ...
OK

8.启动数据库

/etc/init.d/mysqld start
. SUCCESS!

9.添加环境变量  

vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh

10.添加数据库密码

mysqladmin -uroot password '123456'

11.登录测试  

终端命令:mysql -p123456
结果输出: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.54 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

4.3、安装PHP

1.安装依赖  

yum install gcc make gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel -y

2.创建目录

mkdir /usr/local/php

3.解压编译安装PHP

cd /usr/local/ && tar xf php-5.5.38.tar.gz
cd php-5.5.38/
/configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc --with-bz2 --with-curl \
--enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-fpm-user=nginx --with-fpm-group=nginx \
--with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --enable-soap --enable-static \
--with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-mhash --enable-pcntl \
--with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-inline-optimization \
--with-mysql=mysqlnd --enable-fpm --with-libdir=lib64 --enable-bcmath  --enable-shmop --enable-sysvsem
make && make install

4.安装成功后配置php,在php.ini配置文件添加内容

cd /usr/local/php-5.5.38
cp php.ini-production /usr/local/php/etc/php.ini
cp php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

5.安全优化  

vim /usr/local/php/etc/php.ini
expose_php = Off		#关闭版本信息
display_errors = Off		#错误信息控制,测试的时候开启
log_errors = On			#打开错误日志
error_log = /usr/local/php/log/php_errors.log	#log日志路径,log_errors必须开启
allow_url_fopen = Off		#打开远程(禁止)
cgi.fix_pathinfo=0		#防止nginx文件类型错误解析漏洞
max_execution_time = 300	#单个脚本最大运行时间,单位是秒
memory_limit = 128M		#单个脚本最大使用的内存,单位为K或M
post_max_size = 16M
upload_max_filesize = 2M	#上传文件最大许可2M
max_input_time = 300		#单个脚本等待输入最长时间
date.timezone = 'Asia/Shanghai'	#时间区域

6.启动php-fpm  

cd /usr/local/php-5.5.38/
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
chkconfig php-fpm on
service php-fpm start
Starting php-fpm  done

查看端口

netstat -tpunl | grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      125593/php-fpm

7.设置环境变量

cd /etc/profile.d/
[root@lnmp profile.d]# vim php.sh
[root@lnmp profile.d]# cat php.sh
export PATH=/usr/local/php/sbin:$PATH
[root@lnmp profile.d]# source php.sh

8.结合nginx连接php 添加php文件

[root@lnmp html]# vim /usr/local/nginx/html/index.php
[root@lnmp html]# cat index.php
<?php
   phpinfo();
 ?>

9.配置nginx配置文件

cd /usr/local/nginx/conf
grep -vE "(#|^$)" nginx.conf.default > nginx.conf
vim nginx.conf
在http标签下输入以下内容
server {
    listen  80;
    server_name www.test.com;
    index index.php
    root html;
    location ~ .*\.(php|php5)?$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi.conf;
	}
}

10.重启nginx服务

nginx -s reload

浏览器访问是否处理php页面,如果有就成功了

4.4正式安装zabbix

确保以下参数选项

1.数据库要在my.cnf添加的选项

character-set-server=utf8     #设置字符集为utf8
innodb_file_per_table=1        #让innodb的每个表文件单独存储

2.PHP配置参数,php.ini配置文件

max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
date.timezone = 'Asia/Shanghai'

3.安装所需的依赖包

yum install net-snmp-devel.x86_64 mysql-devel

4.做一个软件接

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
/sbin/ldconfig

5.创建zabbix编译时指定目录

mkdir /usr/local/zabbix

6.解压zabbix源码包,并且编译安装

cd /usr/local/ && tar xf zabbix-3.2.4.tar.gz
cd zabbix-3.2.4/
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-libxml2
参数说明
―prefix=/usr/local/zabbix 为指定安装目录为/usr/local/zabbix
―enable-server 为安装zabbix服务端程序
―enable-agent 为安装agent程序
―with-mysql 为使用mysql数据库
―with-net-snmp 为启用snmp支持
―with-libcurl 为启用curl
―with-libxml2 编译xml模块,主要用于监控vm虚拟机
[root@zabbix zabbix-3.2.4]#make
[root@zabbix zabbix-3.2.4]#make install
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*                                  *
***********************************************************

7.创建zabbix用户  

groupadd zabbix
useradd -g zabbix zabbix
id zabbix
uid=502(zabbix) gid=502(zabbix) groups=502(zabbix)
chown -R zabbix:zabbix /usr/local/zabbix/
mkdir -p /var/log/zabbix-server
mkdir -p /var/log/zabbix-agentd
chown -R zabbix:zabbix /var/log/zabbix-server/
chown -R zabbix:zabbix /var/log/zabbix-agentd/

8.初始化zabbix数据库
zabbix server 与 proxy 需要数据库, angent 不需要。尤其要注意的是proxy只需要导入1个sql文件,而server一共要导入3个sql 文件。
我当时在搭建 proxy 的时候导入了3个sql,导致出现报错。后来才发现 proxy 只需要导入1个表结构即可。
创建zabbix数据库,和zabbix用户

mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

9.进入zabbix-3.2.4的源码目录,按顺序导入三个SQL脚本导入zabbix库

cd /usr/local/zabbix-3.2.4/
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/schema.sql
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/images.sql
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/data.sql

10.修改zabbix.conf

vim /usr/local/zabbix/etc/zabbix_server.conf

DBName=zabbix  数据库名字
DBUser=zabbix  数据库用户
DBPassword=123456  zabbix密码
DBHost=localhost   主机
PidFile=/tmp/zabbix_server.pid
DBSocket=/tmp/mysql.sock

11.zabbix3.2.4的启动

拷贝zabbix_server,zabbix_agentd文件
cp /usr/local/zabbix-3.2.4/misc/init.d/fedora/core/zabbix_server /etc/init.d/zabbix_server
cp /usr/local/zabbix-3.2.4/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
修改zabbix_server,zabbix_agentd文件
vim /etc/init.d/zabbix_server
BASEDIR=/usr/local/zabbix
vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix
启动
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start

12.添加环境变量和开机自启动

cd /etc/profile.d/
vim zabbix.sh
export PATH=/usr/local/zabbix/sbin:$PATH
source /etc/profile.d/zabbix.sh
chkconfig --add zabbix_server
chkconfig zabbix_server on

13.拷贝zabbix的web环境文件

cd /usr/local/zabbix-3.2.4/frontends/
cp -rf php /usr/local/nginx/html/zabbix

确保前面都没问题,打开浏览器访问http://url/zabbix

Zabbix企业分布式监控工具-LMLPHP

 Zabbix企业分布式监控工具-LMLPHP

 Zabbix企业分布式监控工具-LMLPHP

Zabbix企业分布式监控工具-LMLPHP

如果这一步有问题,chdmo 777 /usr/local/nginx/html/zabbix/conf/,因为要生成zabbix.conf.php文件

默认用admin用户登录,密码为zabbix

Zabbix企业分布式监控工具-LMLPHP

这是效果图,可以根据自己的需求来调整zabbix

Zabbix企业分布式监控工具-LMLPHP

06-05 18:28