一、zabbix简介
Zabbix 是一个企业级分布式开源监控解决方案。Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。
Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。Zabbix 通过 C/S 模式采集数据,通过 B/S 模式在 web 端展示和配置。
zabbix核心组件如下:
Server
Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。
Web 界面
为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
Proxy
Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
Agent
Zabbix agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
二、zabbix下载及环境部署
先准备三个纯净的centos7主机环境。
下载地址:下载Zabbix
安装版本:
根据官网下面给的步骤操作即可:
在yum 源中添加了zabbix文件:
但是由于在官网地址下载太慢,所以我们将其中的源换成阿里云的源:
在阿里云上下载:
激活前端的源:
初始化数据库:
在mysql官网下载rpm包:
初始密码:
设置新密码,此处的新密码要求大小写+数字+特殊符号超过8位。
若是密码忘记了,先关掉数据库,进入 /var/lib/mysql 中,将其中的数据全部删掉,再打开数据库再重新操作一遍。(仅限于最开始没有数据的时候)
导入数据库:
因为数据较大,导入时间可能较长,注意不要ctrl+c退出。导入成功:
修改zabbix-server配置文件:
配置前端:
环境配置成功:
此处的密码是zabbix。
三、 zabbix主机发现
将server1上的zabbix.repo源copy给server2和server3,由于是copy的,所以没有校验key,修改yum源文件:
修改server-agent 配置文件:
3.1 手动在web端添加
此时在网页监控端,配置---主机 中 创建主机:
填好信息后添加主机:
此时server2已经被添加了,但是我们还没设置监控项,所以后面一块是空白:
添加模板:
此监控项意思是server端主动采集信息:
选择后进行更新,我们就发现添加了一些监控项,这些监控项是直接从模板中添加的:
进入监控项可以发现里面有各种监控项的设置:
以上为手工在web的添加方法。在server3上编辑和server2同样的配置文件:
在 配置---动作 中 Discovery actions 是配合自动发现策略的,当自动发现发现一个agent,他就会自动执行其中的动作:
将其启用:
进入 配置---自动发现:
设置完成后更新:
必需先启用动作再启用自动发现,因为如果自动发现了但是没有动作,此条消息就过去了。在 监测---自动发现中:
在 配置--主机中发现已经自动添加了,自动发现适用于通用模板的监控项:
3.2 主机被自动发现
接下来我们设置主机自动被发现。我们先把server3主机删掉,然后让其主动注册过来:
首先我们先将自动发现和动作停掉:
创建一个自动注册动作:
匹配条件:名称包含sever:
到达匹配条件的做以下操作:
添加成功:
我们刚刚断开了server3,现在我们只需重启server3的zabbix服务,就会被自动发现并添加:
可以看到server3已经被自动发现了。
四、使用zabbix的api
4.1 通过API添加主机
当完成了前端的安装配置后,你就可以使用远程HTTP请求来调用API。为此,需要向位于前端目录中的
api_jsonrpc.php
文件发送HTTP POST请求。例如,如果你的Zabbix前端安装在 http://company.com/zabbix, 那么用HTTP请求来调用apiinfo.version
方法就如下面这样:curl -s XPOST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1, "auth": null }' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
请求的 Content-Type 头部必须设置为以下值之一: application/json-rpc, application/json 或 application/jsonrequest。
我们也可以将其写进脚本中:
4.2 使用api检索主机
我们现在有一个有效的用户身份验证令牌,可以用来访问Zabbix中的数据。 例如,让我们使用 host.get 方法检索所有已配置主机的ID,主机名和接口 :
curl -s XPOST -H 'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "b523e950a24541ed6da53d6f9ff1fb58"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
更改脚本内容使用刚刚获得的token:
此时我们就得到了所有主机列表。
4.3 通过api删除主机
我们先把刚刚的自动注册动作禁掉:
curl -s XPOST -H 'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10438" #此处为刚刚获得的hostid
],
"id": 2,
"auth": "b523e950a24541ed6da53d6f9ff1fb58"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
只要不报错就成功:
4.4 使用api添加主机
curl -s XPOST -H 'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.254.3",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"tags": [
{
"tag": "server3",
"value": "Linux server"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": "b523e950a24541ed6da53d6f9ff1fb58"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
此时server3已经成功添加: