文章目录
- 1.zabbix架构
- 2.安装部署
- 3.监控
- 4.API实现功能
1.zabbix架构
Zabbix 是一个基于WEB界面的企业级的、开源的、分布式的监控套件,被用来监控IT基础设施的可用性和性能。它能监视各种网络参数,
保证服务器系统的安全运营,并提供灵活的告警机制,允许用户对事件发送基于邮件、短信、微信和钉钉等告警方式,这样可以保证用户可以快速定位/解决存在的各种问题。
Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得其成为容量规划的理想选择。
Zabbix 所有的报表、统计数据和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。
适当的配置后,Zabbix可以在监控IT基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是零成本的,因为Zabbix编写和发布基于GPL V2协议. 意味着源代码是免费发布的。
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)等系统之上。
优点:
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在执行过程中会对数据库增加压力,需要对数据库进行优化
2.安装部署
1.zabbix环境的搭建
在zabbix-server端安装zabbix-agent是为了监控本机 zabbix安装包下载地址
iksemel-1.4-2.el7.centos.x86_64.rpm fping-3.10-1.el7.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
[root@base2 ~]# ls
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
[root@base2 ~]# yum install -y 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-web-4.0.5-1.el7.noarch.rpm zabbix-web-mysql-4.0.5-1.el7.noarch.rpm zabbix-server-mysql-4.0.5-1.el7.x86_64.rpm
[root@base2 ~]# yum install -y httpd mariadb-server
[root@base2 ~]# systemctl start mariadb
[root@base2 ~]# mysql_secure_installation 安全初始化
[root@base2 ~]# mysql -p
Enter password:
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos'; #给zabbix用户授权并设置密码
MariaDB [(none)]> quit
Bye
[root@base2 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix # 给zabbix用户导入初始架构(Schema)和数据。
Enter password: # 此处的密码是在数据库中给zabbix用户设置的密码
[root@base2 ~]# cd /etc/zabbix/
[root@base2 zabbix]# ls
web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf
[root@base2 zabbix]# vim zabbix_server.conf
124 DBPassword=westos # 修改数据库密码
[root@base2 zabbix]# systemctl start zabbix-server
[root@base2 zabbix]# systemctl start zabbix-agent
[root@base2 zabbix]# vim /etc/httpd/conf.d/zabbix.conf
20 php_value date.timezone Asia/Shanghai # 修改时区
[root@base2 zabbix]# systemctl start httpd
进行前端设置
以上是zabbix监控平台的搭建,现在我们开始使用zabbix来实现我们的需求
3.监控
先开启一个客户端
[root@base3 ~]# ls
zabbix-agent-4.0.5-1.el7.x86_64.rpm
[root@base3 ~]# rpm -ivh zabbix-agent-4.0.5-1.el7.x86_64.rpm
[root@base3 ~]# vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.25.78.12
139 ServerActive=172.25.78.12 # Agent主动把ip传给server
150 Hostname=base3 # 当前主机的主机名需要解析
[root@base3 ~]# systemctl start zabbix-agent
(1)手动添加
添加模板(设定通过监控采集什么)
添加主机
(2)自动发现
先删除手动添加的主机
刷新网页,查看是否发现设备
[root@base2 ~]# zabbix_server -R config_cache_reload # 重载配置
[root@base2 ~]# systemctl restart zabbix-server # 如果没有发现,就重启一下server端,因为具有延时性
(3)自动注册
先配置一个可以自动注册的客户端
[root@base4 ~]# ls
zabbix-agent-4.0.5-1.el7.x86_64.rpm
[root@base4 ~]# rpm -ivh zabbix-agent-4.0.5-1.el7.x86_64.rpm
[root@base4 ~]# vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.25.78.12
139 ServerActive=172.25.78.12
150 Hostname=base4
[root@base4 ~]# systemctl start zabbix-agent
[root@base4 ~]# netstat -antlp | grep zabbix
再关闭自动发现规则
设置自动注册
[root@base4 ~]# systemctl restart zabbix-agent # 为了更快的被服务端搜索到,我们可以重启一下客户端
4.API实现功能
获取主机地址
#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
得到一个登录令牌
获取主机hostid
#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.更改脚本
[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
添加主机
(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