点击此处即可访问zabbix官网
1.zabbix概述
Zabbix 是一个基于WEB界面的企业级的、开源的、分布式的监控套件,被用来监控IT基础设施的可用性和性能。它能监视各种网络参数,
保证服务器系统的安全运营,并提供灵活的告警机制,允许用户对事件发送基于邮件、短信、微信和钉钉等告警方式,这样可以保证用户可以快速定位/解决存在的各种问题。
Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得其成为容量规划的理想选择。
Zabbix 所有的报表、统计数据和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。
适当的配置后,Zabbix可以在监控IT基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是零成本的,因为Zabbix编写和发布基于GPL V2协议. 意味着源代码是免费发布的。
2.zabbix的组成
zabbix 由2部分构成,zabbix server与可选组件zabbix agent。
zabbix server:可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,
它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。zabbix server可以单独监视远程服务器的服务状态;
同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(主动轮询/agent方式),同时还可被动接收zabbix agent发送的数据(被动捕获/trapping方式)。
zabbix agent:需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows (2000/2003/XP/Vista)等系统之上。
3.zabbix的优缺点
优点:
1.数据采集:可用性和性能检测,自动发现,支持agent、snmp、JMX、telnet等多种采集方式,支持主动和被动模式数据传输、支持用户自定义插件,自定义间隔收集数据
2.高可用:server对设备性能要求低,支持proxy分布式监控,分布式集中管理,有自动发现功能,可以实现自动化监控;开放式接口,扩展性强,插件编写容易
3.告警管理:支持多条件告警,支持多种告警方式,支持多组模板,模板继承。
4.告警设置:告警周期,告警级别,告警恢复通知、告警暂停,时段阈值、支持维护周期、支持单机停用
5.图形化展示:允许自定义创建多监控项视图,网络拓扑,自定义面板展示,自定义IT服务可用性
6.历史数据:历史数据查询可配置,内置housekeeping数据清理机制
7.安全审计:具备安全的用户审计日志,权限认证,用户可以限制允许维护的列表。
缺点:
1.性能瓶颈,监控系统没有低估高峰期,具有持续性和周期性,机器量越大,数据的增大会使数据库的写入成为一定的瓶颈,官网给出的单机上限5000台,届时就需要增加proxy,增加成本。
2.Zabbix采集数据有pull方式,也就是server主动模式,当目标机器量大之后,pull任务会出现积压。采集数据会延迟
3.项目二次开发,需要分析MySQL表结构,表结构比较复杂,通过API开发对开发能力有要求。
4.内置housekeeping在执行过程中会对数据库增加压力,需要对数据库进行优化
实验环境:
server1: 172.25.66.1 zabbix-server
server2: 172.25.66.2 zabbix-agent
注意: 每个主机都需要添加本地解析(/etc/hosts)
1.安装zabbix
安装包:
#依赖包
fping-3.10-1.el7.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
#安装包
zabbix-agent-4.0.5-1.el7.x86_64.rpm
zabbix-server-mysql-4.0.5-1.el7.x86_64.rpm
zabbix-web-4.0.5-1.el7.noarch.rpm
zabbix-web-mysql-4.0.5-1.el7.noarch.rpm
#1.在官网上下载zabbix
[root@sever1 ~]# ls
#2.安装zabbix
[root@sever1 ~]# yum install -y *
2.安装阿帕奇和数据库
[root@sever1 ~]# yum install -y mariadb-server httpd
3.配置阿帕奇
[root@sever1 zabbix]# cd /etc/httpd/conf.d
[root@sever1 conf.d]# ls
autoindex.conf php.conf README userdir.conf welcome.conf zabbix.conf
#1.更改配置文件
[root@sever1 conf.d]# vim zabbix.conf
#####################
php_value date.timezone Asia/Shanghai #更改时区
#2.开启apache
[root@server1 ~]# systemctl start httpd
4.配置数据库
#1.开启数据库
[root@server1 ~]# systemctl start mariadb
#2.初始化(修改密码)
[root@sever1 ~]# mysql_secure_installation
#3.登陆数据库
[root@sever1 ~]# mysql -uroot -pwestos
#创建数据库
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
#创建用户并授权
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';
[root@server1 ~]# cd /usr/share/doc/zabbix-server-mysql-4.0.5/
[root@server1 zabbix-server-mysql-4.0.5]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
#导入数据; 此过程较缓慢,请耐心等待
[root@server1 zabbix-server-mysql-4.0.5]# zcat create.sql.gz | mysql -u zabbix -p zabbix
Enter password:
[root@sever1 zabbix-server-mysql-3.4.6]# cd /etc/zabbix/
[root@sever1 zabbix]# ls
web zabbix_java_gateway.conf zabbix_server.conf
zabbix_agentd.conf zabbix_java_gateway_logback.xml
zabbix_agentd.d zabbix_proxy.conf
[root@sever1 zabbix]# vim zabbix_server.conf
#####################
DBPassword=westos #zabbix数据库的密码
#zabbix-agent用于:自己监控自己
[root@server1 ~]# systemctl start zabbix-server
[root@server1 ~]# systemctl start zabbix-agent
#查看端口
[root@server1 ~]# netstat -antlp
注意:默认登陆用户:Admin 密码:zabbix(不是刚创建的数据库用户)
先配置server2结点:
[root@server1 ~]# scp zabbix-agent-4.0.5-1.el7.x86_64.rpm [email protected]:
[root@server2 ~]# ls
zabbix-agent-3.4.6-1.el7.x86_64.rpm
#1.安装zabbix-agent
[root@server2 ~]# rpm -ivh zabbix-agent-3.4.6-1.el7.x86_64.rpm
warning: zabbix-agent-3.4.6-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-3.4.6-1.el7 ################################# [100%]
#3.配置agent
[root@server2 ~]# cd /etc/zabbix/
[root@server2 zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@server2 zabbix]# vim zabbix_agentd.conf
######################
Server=172.25.66.1 #zbbix-server端的ip
ServerActive=172.25.66.1 #主动连接zbbix-server,主要用于自动注册时使用
Hostname=server2 #本机的主机名;前提是必须有本地解析
#4.开启agent
[root@server2 zabbix]# systemctl start zabbix-agent
#查看端口
[root@server2 zabbix]# netstat -antlp
一般先添加agent动作,再开启网络发现(Location network),如果你先打开网络发现,自动发现会延时
1.启用自动发现
2.启用触发器
3.启用并更改自动发现规则
测试:
查看自动发现的状态,发现了一个设备
当再次查看主机时,自动发现了server2主机
排错:
若自动发现主机失败,则执行 cat /var/log/zabbix/zabbix_agentd.log 查看日志
如果日志报错:cannot send list of active checks to "172.25.66.2": host [server2] not found 报错,尝试重新启动zabbix-server,再刷新网页即可
1.先删除之前自动发现的server2主机
2.手动添加
添加主机:
添加模板:
zabbix一般都是通过模板进行采集数据
自动注册添加:是代理主机(zabbix-agent)主动连接服务主机(zabbix-server)
注意:一定要先关闭自动发现,否则还未注册成功就已经自动发现主机了
3.自动注册
添加动作:
添加操作:
4.重启zabbix-agent
#重启时为了能够更快的自动注册
[root@server2 ~]# systemctl restart zabbix-agent
测试:
#1.更改脚本
[root@server1 ~]# vim zabbix-api1.sh
#################
curl -s -X POST -H 'Content-Type:application/json' -d ' #-s表示禁用curl命令的输出信息 (隐藏不必要的输出信息); -d 表示上传内容
{
"jsonrpc": "2.0",
"method": "user.login", ##用户登陆
"params": {
"user": "Admin", #zabbix登陆用户
"password": "zabbix" #用户密码
},
"id": 1,
"auth": null
}' http://172.25.66.1/zabbix/api_jsonrpc.php | python -m json.tool #上传地址 转换输出格式
#2.给脚本一个可执行权限
[root@server1 ~]# chmod +x zabbix-api1.sh
#3.调用脚本
[root@server1 ~]# ./zabbix-api1.sh
#1.更改脚本
[root@server1~]# vim zabbix-api2.sh
#################
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get", ##获取主机hostid
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces":[
"interfaceid",
"ip"
]
},
"id": 1,
"auth": "a6adbf0b8bd33c801a38a8a1ef655be"
}' http://172.25.66.1/zabbix/api_jsonrpc.php | python -m json.tool
#2.给脚本一个可执行权限
[root@server1 ~]# chmod +x zabbix-api2.sh
#3.调用脚本
[root@server1 ~]# ./zabbix-api2.sh
(1)更改api脚本
#1.更改脚本
[root@server1 ~]# vim zabbix-api3.sh
#################
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.delete", ##删除主机
"params": [
"10264"
],
"id": 1,
"auth": "a6adbf0b8bd33c801a38a8a1ef655be5"
}' http://172.25.66.1/zabbix/api_jsonrpc.php | python -m json.tool
#2.给脚本一个可执行权限
[root@server1 ~]# chmod +x zabbix-api3.sh
#3.调用脚本
[root@server1 ~]# ./zabbix-api3.sh
测试:
刷新网页,查看主机,发现刚自动注册的server2主机删除成功
(1).先关闭自动注册和触发器
(2).查看组id和模块id
(3).编写api脚本
#1.更改脚本
[root@server1 ~]# vim zabbix-api4.sh
#################
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create", ##创建主机
"params": {
"host": "server2", #主机名
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.66.2", #主机ip
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2" #组id
}
],
"templates": [
{
"templateid": "10001" #模块id
}
]
},
"id": 1,
"auth": "a6adbf0b8bd33c801a38a8a1ef655be5"
}' http://172.25.66.1/zabbix/api_jsonrpc.php | python -m json.tool
#给脚本一个可执行权限
[root@server1 ~]# chmod +x zabbix-api4.sh
#调用脚本
[root@server1 ~]# ./zabbix-api4.sh