c4rt1y

网络监控之zabbix安装部署大全

0x01 介绍

Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利
zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题
zabbix主要由2部分构成zabbix server和zabbix agent,可选组建zabbix proxy
zabbix server可以通过SNMP,zabbix agent,fping端口监视等方法对远程服务器或网络状态完成监视,数据收集等功能。同时支持Linux以及Unix平台,Windows平台只能安装客户端
在centos7下安装zabbix。学习zabbix的主动监控,被动监控,脚本编写,代理监控等内容

0x02 基础环境安装

#一共四台服务器
node.com  10.10.10.12
node1.com 10.10.10.11
node2.com 10.10.10.20
node3.com 10.10.10.30

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#两种方法设置host(每台对应每台的host地址)
echo "node.com" > /etc/hostname
hostname node.com

#设置host
cat >>/etc/hosts <<EOF 
10.10.10.12 node.com 
10.10.10.20 node1.com
10.10.10.30 node2.com
10.10.10.13 node3.com
EOF	

#关闭selinux,需要重启
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config

#临时关闭seLinux
setenforce 0

#重启
reboot

0x03 master 安装

#创建zabbix账号权限
groupadd zabbix
useradd -g zabbix zabbix

#下载第三方依赖环境包
yum -y install epel-release

#安装依赖环境
yum install php-pecl-ssh2.x86_64 libssh2-devel.x86_64 net-snmp* OpenIPMI OpenIPMI-devel -y   
yum install php php-mysql php-common php-mbstring php-gd php-odbc php-pear  php-xml php-bcmath php-ldap httpd  httpd-manual -y
yum install gcc  libxml2-devel  unixODBC-devel net-snmp-devel libcurl-devel libssh2-devel OpenIPMI-devel openssl-devel openldap-devel –y 

#修改php配置文件
sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
sed -i '/;date.timezone =/a\date.timezone = Asia/Shanghai' /etc/php.ini
sed -i '/max_input_time =/s/60/300/' /etc/php.ini
sed -i '/mbstring.func_overload = 0/a\mbstring.func_overload = 1' /etc/php.ini
sed -i '/post_max_size =/s/8M/32M/' /etc/php.ini

#下载mysql源
rpm -ivh  http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
#检测源是否安装
yum repolist enabled | grep mysql  
#安装mysql,直接yum安装会安装MariaDB,这里会出现zabbix编译的时候出现不存在mysql_config文件
yum install mysql-community-server mysql-devel -y
#启动mysql
service mysqld start 


#修改数据库密码
mysqladmin  -uroot password "123321"
#创建zabbix数据库和创建zabbix数据库账号密码
echo "create database IF NOT EXISTS zabbix default charset utf8 COLLATE utf8_general_ci;" | mysql -uroot -p123321
echo "grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';" | mysql -uroot -p123321
echo "flush privileges;" | mysql -uroot -p123321


#下载zabbix
wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.7/zabbix-3.2.7.tar.gz
#解压
tar zxf zabbix-3.2.7.tar.gz
cd zabbix-3.2.7

#导入数据库
mysql -uzabbix -pzabbix  zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix  zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix  zabbix < database/mysql/data.sql


#编译安装
./configure  --prefix=/usr/local/zabbix  --enable-server  --enable-agent  --enable-proxy -with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-unixodbc --with-ssh2 --with-openipmi --with-openssl 
make install

#创建www环境
mkdir /var/www/html/zabbix 
cp -r frontends/php/*   /var/www/html/zabbix 
chown -R apache:apache  /var/www/html/zabbix/
chmod +x /var/www/html/zabbix/conf/ 

#增加启动项
cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
cp misc/init.d/tru64/zabbix_server /etc/init.d/
chmod +x /etc/init.d/zabbix_*

#修改zabbix_server和zabbix_agent配置文件
sed -i 's:DAEMON=/usr/local/sbin/zabbix_server:DAEMON=/usr/local/zabbix/sbin/zabbix_server:g' /etc/init.d/zabbix_server
sed -i 's:DAEMON=/usr/local/sbin/zabbix_agentd:DAEMON=/usr/local/zabbix/sbin/zabbix_agentd:g' /etc/init.d/zabbix_agentd
sed -i 's:DBUser=root:DBUser=zabbix:g' /usr/local/zabbix/etc/zabbix_server.conf
sed -i '/# DBPassword=/a\DBPassword=zabbix' /usr/local/zabbix/etc/zabbix_server.conf
sed -i 's/Server=127.0.0.1/Server=10.10.10.12/g' /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=node.com/g' /usr/local/zabbix/etc/zabbix_agentd.conf

#修改httpd配置文件
sed -i '/#ServerName www.example.com:80/a\ServerName zabbix' /etc/httpd/conf/httpd.conf 

#启动mysql,httpd,zabbix_server和zabbix_agent
systemctl  restart httpd.service
systemctl  restart mysqld.service
/etc/init.d/zabbix_server restart
/etc/init.d/zabbix_agentd restart

#网页访问IP/zabbix,设置网站,DB=zabbix DBUSER=zabbix DBPASSWORD=zabbix

0x04 node1 安装 (zabbix_server 主动)

#安装编译环境
yum install gcc gcc-c++ -y

#下载zabbix
wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.7/zabbix-3.2.7.tar.gz
#解压
tar zxf zabbix-3.2.7.tar.gz
cd zabbix-3.2.7
#编译安装
./configure --prefix=/usr/local/zabbix/ --enable-agent
make install

#配置agent配置文件
sed -i "s/Server=127.0.0.1/Server=10.10.10.12/g" /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=node1.com/g' /usr/local/zabbix/etc/zabbix_agentd.conf

#设置启动项
cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_agentd
sed -i "s:DAEMON=/usr/local/sbin/zabbix_agentd:DAEMON=/usr/local/zabbix/sbin/zabbix_agentd:g" /etc/init.d/zabbix_agentd
#启动agent
/etc/init.d/zabbix_agentd restart

#接下来在web界面创建监控
在Congiguration->Host->Create host

node01_01

选择模板,由于只有http协议,我们就选择linux系统监控

node01_02 node01_03 node01_04 node01_05

在Congiguration->Host上会看到最新的监控信息

node01_06

0x05 node2 安装 (使用 Discovery 主动发现)

首选,创建一个Discovery,在Congiguration->Discovery->Create discovery rule

node02_01

第二步是在Congiguration->Actions->Create action(这里选择Discovery) ![node02_02](/image/2017-09-25-install-zabbix_and_using/node02_02.png)

node02_03 node02_04

#安装编译环境
yum install gcc gcc-c++ -y

#下载zabbix
wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.7/zabbix-3.2.7.tar.gz
#解压
tar zxf zabbix-3.2.7.tar.gz
cd zabbix-3.2.7
#编译安装
./configure --prefix=/usr/local/zabbix/ --enable-agent
make install

#配置文件1
sed -i "s/Server=127.0.0.1/Server=10.10.10.12/g" /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=node2.com/g' /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i '/# StartAgents=3/a\StartAgents=0' /usr/local/zabbix/etc/zabbix_agentd.conf

#配置文件如下
grep '^[a-Z]' /usr/local/zabbix/etc/zabbix_agentd.conf
Server=10.10.10.12
Hostname=node2.com

#设置启动环境
cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_agentd
sed -i "s:DAEMON=/usr/local/sbin/zabbix_agentd:DAEMON=/usr/local/zabbix/sbin/zabbix_agentd:g" /etc/init.d/zabbix_agentd

#重启
/etc/init.d/zabbix_agentd restart

#查看监控出现了

node02_05

#被动式agentd
首先,我们创建一个被动式扫描模板
Congiguration->Template->Template OS Linux,选择全部克隆,名字名为Template OS Linux Active

template_01 template_02 template_03

进入新建立的模板,然后选择Items,全部选择

template_04

type设置为Zabbix agent

template_05

由于即使改成被动扫描,但是里面默认有几个是必须主动扫描,所以我们把他们改成disable

template_06

#另外一种配置文件(多开一个ServerActive=10.10.10.11)
sed -i "s/ServerActive=127.0.0.1/ServerActive=10.10.10.12/g" /usr/local/zabbix/etc/zabbix_agentd.conf
grep '^[a-Z]' /usr/local/zabbix/etc/zabbix_agentd.conf
Server=10.10.10.12
ServerActive=10.10.10.12
Hostname=node2.com

#重新启动
/etc/init.d/zabbix_agentd restart

#会发现采取了被动扫描,被动扫描的时候,不存在绿色光标

node02_06

0x06 node3 安装 (zabbix_agent 自动注册)

首先,为了防止Discovery的干扰(关闭Discovery)

node03_00

#安装源
yum install http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm -y
#安装客户端
yum install zabbix-agent -y

sed -i "s/Server=127.0.0.1/Server=10.10.10.12/g" /etc/zabbix/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=node3.com/g' /etc/zabbix/zabbix_agentd.conf

#ServerActive被注释了
[root@node3 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.10.10.12
Hostname=node3.com
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#在Congiguration->Actions->Create action(这里选择Auto registration)

node03_01 node03_02 node03_03

#被动式监控(无绿色显示,无色的)

node03_04

0x08 proxy代理 安装 (在node3之上)

#安装源和mysql
rpm -ivh https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
rpm -ivh  http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 
yum -y install epel-release
yum install mysql-community-server mysql-devel -y

#安装zabbix-proxy-mysql
yum install zabbix-proxy-mysql  -y

#启动mysql
service mysqld start

#创建数据库密码和创建数据库
mysqladmin  -uroot password "123321"
echo "create database IF NOT EXISTS zabbix_proxy default charset utf8 COLLATE utf8_general_ci;" | mysql -uroot -p123321
echo "grant all privileges on zabbix_proxy.* to zabbix@'localhost' identified by 'zabbix';" | mysql -uroot -p123321
echo "flush privileges;" | mysql -uroot -p123321

#解压SQL文件
gunzip /usr/share/doc/zabbix-proxy-mysql-3.2.7/schema.sql.gz 
#导入数据库文件
mysql -uzabbix -pzabbix  zabbix_proxy < /usr/share/doc/zabbix-proxy-mysql-3.2.7/schema.sql

#设置配置文件
sed -i '/# ProxyMode=0/a\ProxyMode=0' /etc/zabbix/zabbix_proxy.conf 
sed -i '/# DBPassword=/a\DBPassword=zabbix' /etc/zabbix/zabbix_proxy.conf 
sed -i 's/Server=127.0.0.1/Server=10.10.10.12/g' /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=node3.com/g' /usr/local/zabbix/etc/zabbix_agentd.conf

#查看proxy配置
grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf 
ProxyMode=0
Server=10.10.10.12
Hostname=node3.com
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix

#启动zabbix-proxy
systemctl restart zabbix-proxy

#在Administration->Proxies->Create proxy

node3_proxy_01

修改其他服务器的zabbix_agent.conf中的server改为代理服务器,然后再host里面加入proxy

node3_proxy_02 node3_proxy_03

0x06 自定义监控 (node1上举例子)

#在node1上,login-user是函数名,统计当前有多少shell在线
vi /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter = login-user,uptime | awk -F ' ' '{print $6}'

/etc/init.d/zabbix_agentd restart

#在监控里面设置界面查看情况,比较直观

jiankong_01 jiankong_02 jiankong_03 jiankong_04 jiankong_05 jiankong_06

#此时我设置了3个用户在线,可以直接看到

jiankong_07

0x07 自定义报警 (node1上举例子)

#设置假设超过3个用户登录则提示报警

baojing_01 baojing_02 baojing_03 baojing_04 baojing_05 baojing_06

0x07 自定义邮件发送 (node1上举例子)

#默认shell脚本存在放该路径下(单变量)
vi /etc/local/zabbix/share/zabbix/alertscripts/SendMail.sh
echo $1 $2 $3 >>/tmp/SendMial

chmod +x /etc/local/zabbix/share/zabbix/alertscripts/SendMail.sh

fasong_01 fasong_02 fasong_03 fasong_04 fasong_05

#由于是模拟操作,所以这里会在Server上出现一个/tmp/SendMial文件

0x08 zabbix API使用

1.验证
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}' http://10.10.10.11/zabbix/api_jsonrpc.php |python -mjson.tool

#获取的认证
b56e995df71d62496e50c67947c15727

2.获取服务器
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": "host.id"
    },
    "auth": "b56e995df71d62496e50c67947c15727",
    "id": 1
}' http://10.10.10.11/zabbix/api_jsonrpc.php |python -mjson.tool

3.加入某个组
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "Linux server",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "10.10.10.10",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "2"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ],
        "inventory_mode": 0,
        "inventory": {
            "macaddress_a": "01234",
            "macaddress_b": "56768"
        }
    },
    "auth": "b56e995df71d62496e50c67947c15727",
    "id": 1
}' http://10.10.10.11/zabbix/api_jsonrpc.php |python -mjson.tool

0x09 学习心得

官方文档,别人的笔记,多看日志,之前大见过,不过没做笔记,这次搭建一次性开了太多环境和内容,思路稍微有部分混乱,但是流程基本如此。比较常用的方法就是使用proxy代理,然后进行操作,这应该是比较流行。如下所示:

zabbix1 zabbix2

0x10 资料来源

老男孩第十二期
http://blog.csdn.net/reblue520/article/category/6403502/2
http://abcdocker.blog.51cto.com/11255059/d-1
https://www.zabbix.com/documentation/2.4
GoTop