1. 如何通过Zabbix获取监控数据
zabbix基本架构:
1.Server
zabbix系统核心进程,轮询并捕获数据、发送通知等。是zabbix agent和zabbix proxy汇报数据的对象。server自身可远程检测网络服务。所有的前后端配置、统计信息、可操作数据存储于此。包含server、前段界面和后端DB几部分。
2.Agent
部署在被监控主机上用于监控本地资源和应用并向zabbix server汇报结果。使用本地系统调用故非常高效。有主动和被动两种检测模式。被动模式下agent根据server或proxy的具体请求来返回数据。主动模式下先主动由server获取监控项列表在检测并返回新的数据。采用主动或被动检测取决于相应监控项的配置。
3.Proxy
可以自由选择部署或者不部署,主要用于分担server的负载。在集汪洞中化监控远程位置、分支、网络的场景中是很好的解决方案。可从被监控设备收集数据缓存在proxy本地后传递给其所属的zabbix server。proxy需要单独的数据库。
4.Java gateway
java实现的守护进程用于监控JMX类型的应用程序。
5.Sender
命令行工具zabbix_sender,用于向zabbix server发送性能数据和可用性数据。多用于用户脚本定期向server发送数据。
如:
shell> cd bin
shell> ./zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43
6.Get
命令行工具zabbix_get,用于同agent通信从agent获取数据。可用于zabbix agents的troubleshooting。
如:
shell> cd bin
shell> ./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
#zabbix术语表:
host
需要被监控的设备,如交换机、路由器、WEB服务器、DB服务器等
host group
被监控设备的逻辑分组,如DB服务器一组、WEB服务器一组等。可包含主机和模板。用于权限控制
item
需要被监控的项,如CPU空闲率、某一块磁盘的使宴陵亮用率等
trigger
用于评估收到的监控值是否超出设定的阈值的逻辑表达式
event
如trigger状态改变等值得注意的事件
action
预先定义的响应event的一系列operations
escalation
执行action中的operations的定制场景;一连串的发送通知、执行远程命令
media
传递notification的方式
notification
通过media发送给用户的关于某个event的消息
remote command
在被监控机器上触发并自动执行的预定义命令
template
用于简化和加速主机上大规模监控任务的部署。包含一系列晌宽项目,如items, triggers, graphs, screens, applications, low-level discovery rules
application
逻辑组中的一组items
web scenario
一个或多个HTTP request用以检查web站点可用性
frontend
zabbix的web界面
zabbix api
允许通过JSON RPC 协议创建、更新和获取zabbix对象如,hosts, items, graphs and others。或者执行其他任务
zabbix server
zabbix核心,履行监控,与zabbix proxies、zabbix client交互、计算trigger、发送notification、存储数据等任务
zabbix agent
部署在被监控主机上用于监控本地资源和应用
zabbix proxy
可代zabbix server收集数据分担处理负载
#zabbix配置:
可通过WEB界面或者模板进行配置
需配置内容包括users、user groups、hosts、host groups、items、Triggers、Events、notification、templates、visualisation等。
最终配置会被存储在后端database中。
zabbix取数方式
1.zabbix api
基于WEB的API,通过JSON PRC协议获取或更改zabbix配置,并可用于获取历史监控数据。clients和API间的request和response使用JSON格式。包含一系列可从功能上分为不同组别的方法。
发起HTTP请求的格式类似如下:
POST HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
其中是zabbix前端的地址;Content-Type必须指明且为application/json-rpc, application/json or application/jsonrequest三者之一。{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}是请求的具体内容。
一些实例:
*登录认证
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
其中:
jsonrpc:指明JSON-RPC协议版本,这里是2.0版本
method:指明调用的API方法,这里是用户登录
params:需要传递给API method的参数,这里是用户名和密码
id:本次请求的标识符
auth:用户认证令牌,目前尚无所以为null
若参数无误response将会包含用户认证令牌,如:
{
"jsonrpc": "2.0",
"result": "",
"id": 1
}
*获取hosts信息
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": ""
}
本例使用可用的用户认证令牌通过host.get方法获取所配置的主机的ID 、name等信息,返回如下
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
为了考虑性能影响、尽量仅列出所需项而非返回所有数据
*创建新监控项
例如在上一步获取的host上建立新的监控项、监控/home/joe/目录的剩余空间
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"type": 0,
"value_type": 3,
"interfaceid": "1",
"delay": 30
},
"auth": "",
"id": 3
}
其中params参数中的几个关键参数含义如下:
name:监控项的名称,这个可以自己灵活定义,其中的$1代表key_中的第一个参数,此处为/home/joe/
key_:预定义的监控项,zabbix提供了一系列此类监控内容,此处需从其中进行选择。
hostid:即上步获得的hostid
value_type:监控数据值的类型,不同的数字代表不同的类型,此处的3代表整型
delay:zabbix取数时间间隔,此处为30秒取一次
返回结果如下:
{
"jsonrpc": "2.0",
"result": {
"itemids": [
"24759"
]
},
"id": 3
}
itemid为生成的监控项的id
*获取历史数据:
从历史记录表获取itemids为23296的按clock降序排列的十条记录
history参数可能的取值
0 - float;
1 - string;
2 - log;
3 - integer;
4 - text.
{
"jsonrpc": "2.0",
"method": "history.get",
"params": {
"output": "extend",
"history": 0,
"itemids": "23296",
"sortfield": "clock",
"sortorder": "DESC",
"limit": 10
},
"auth": "",
"id": 1
}
返回结果:
{
"jsonrpc": "2.0",
"result": [
{
"itemid": "23296",
"clock": "1351090996",
"value": "0.0850",
"ns": "563157632"
},
{
"itemid": "23296",
"clock": "1351090936",
"value": "0.1600",
"ns": "549216402"
},
...]
}
*错误处理
下例忘记了groups这个参数
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "Linux server",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
]
},
"id": 3,
"auth": ""
}
返回结果如下,包含的不是result属性而是error属性
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 3
}
对于获取监控数据来说,比较关心的应该是history.get这个方法。这种方式实际上最终还是由后台数据库获取的。方法提供了丰富的参数,使用非常灵活。但对于一次性大规模的取出大量主机大量监控项的大批数据不太适合。
2. 如何通过Zabbix获取监控数据
历史数据:history相关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均值,即存储监控数据的原始数据。
趋势数据:trends相关表,趋势数据是经过Zabbix计算的数据,数据是从history_uint里面汇总的,从trends_uint可以查看到监控数据每小时最大,最小和平均值,即存储监控数据的汇总数据。
Zabbix可以通过两种方式获取历史数据:
1.通过Zabbix前台获取历史数据
通过Zabbix前台查看历史数据非常简单,可以通过Monitoring->Lastest data的方式查看。也可以点击右上角的As plain test按钮保存成文本文件。
2.通过前台获取的数据进行处理和二次查询有很多限制,因此可以通过SQL语句直接从后台DB查询数据。
首先大家应该熟悉SQL语句Select 常用用法:
SELECT [ALL | DISTINCT] Select_List [INTO [New_Table_name]
FROM { Table_name | View_name} [ [,{table2_name | view2_name}
[,…] ]
[ WHERE Serch_conditions ]
[ GROUP BY Group_by_list ]
[ HAVING Serch_conditions ]
[ ORDER BY Order_list [ASC| DEsC] ]
说明:
1)SELECT子句指定要查询的特定表中的列,它可以是*,表达式,列表等。
2)INTO子句指定要生成新的表。
3)FROM子句指定要查询的表或者视图。
4)WHERE子句用来限定查询的范围和条件。
5)GROUP BY子句指定分组查询子句。
6)HAVING子句用于指定分组子句的条件。
7)ORDER BY可以根据一个或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号,ASC表示升序,DESC表示降序。
8)mysql聚合函数:sum(),count(),avg(),max(),avg()等都是聚合函数,当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到Having子句进行判断了,例如聚合函数的值是否大于某一个值等等。
3. 如何从Zabbix数据库中获取监控数据
Zabbix可以通过两种方式获取历史数据:
1.通过Zabbix前台获取历史数据
通过Zabbix前台查看历史数据非常简单,可以通过Monitoring->Lastest data的方式查看。也可以点击右上角的As plain test按钮保存成文本文件。
2.通过前台获取的数据进行处理和二次查询有很多限制,因此可以通过SQL语句直接从后台DB查询数据。
首先大家应该熟悉SQL语句Select 常用用法:
SELECT [ALL | DISTINCT] Select_List [INTO [New_Table_name]
FROM { Table_name | View_name} [ [,{table2_name | view2_name}
[,...] ]
[ WHERE Serch_conditions ]
[ GROUP BY Group_by_list ]
[ HAVING Serch_conditions ]
[ ORDER BY Order_list [ASC| DEsC] ]
说明:
1)SELECT子句指定要查询的特定表中的列,它可以是*,表达式,列表等。
2)INTO子句指定要生成新的表。
3)FROM子句指定要查询的表或者视图。
4)WHERE子句用来限定查询的范围和条件。
5)GROUP BY子句指定分组查询子句。
6)HAVING子句用于指定分组子句的条件。
7)ORDER BY可以根据一个或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号,ASC表示升序,DESC表示降序。
8)mysql聚合函数:sum(),count(),avg(),max(),avg()等都是聚合函数,当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到Having子句进行判断了,例如聚合函数的值是否大于某一个值等等。
从Zabbix数据库中查询监控项目方法,这里已查询主机的网卡流量为例子:
1)通过hosts表查找host的ID。
mysql> select host,hostid from hosts where host="WWW05";
+-------+--------+
| host | hostid |
+-------+--------+
| WWW05 | 10534 |
+-------+--------+
1 row in set (0.00 sec)
2)通过items表查找主的监控项和key以及itemid。
mysql> select itemid,name,key_ from items where hostid=10534 and key_="net.if.out[eth0]";
+--------+-----------------+------------------+
| itemid | name | key_ |
+--------+-----------------+------------------+
| 58860 | 发送流量: | net.if.out[eth0] |
+--------+-----------------+------------------+
1 row in set (0.00 sec)
3)通过itemid查询主机的监控项目(history_uint或者trends_uint),单位为M。
主机流入流量:
mysql> select from_unixtime(clock) as DateTime,round(value/1024/1024,2) as Traffic_in from history_uint where itemid="58855" and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' limit 20;
+---------------------+------------+
| DateTime | Traffic_in |
+---------------------+------------+
| 2014-09-20 00:00:55 | 0.10 |
| 2014-09-20 00:01:55 | 0.09 |
| 2014-09-20 00:02:55 | 0.07 |
| 2014-09-20 00:03:55 | 0.05 |
| 2014-09-20 00:04:55 | 0.03 |
| 2014-09-20 00:05:55 | 0.06 |
| 2014-09-20 00:06:55 | 0.12 |
| 2014-09-20 00:07:55 | 0.05 |
| 2014-09-20 00:08:55 | 0.10 |
| 2014-09-20 00:09:55 | 0.10 |
| 2014-09-20 00:10:55 | 0.12 |
| 2014-09-20 00:11:55 | 0.12 |
| 2014-09-20 00:12:55 | 0.13 |
| 2014-09-20 00:13:55 | 3.16 |
| 2014-09-20 00:14:55 | 0.23 |
| 2014-09-20 00:15:55 | 0.24 |
| 2014-09-20 00:16:55 | 0.26 |
| 2014-09-20 00:17:55 | 0.23 |
| 2014-09-20 00:18:55 | 0.14 |
| 2014-09-20 00:19:55 | 0.16 |
+---------------------+------------+
20 rows in set (0.82 sec)
主机流出流量:
mysql> select from_unixtime(clock) as DateTime,round(value/1024/1024,2) as Traffic_out from history_uint where itemid="58860" and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' limit 20;
+---------------------+-------------+
| DateTime | Traffic_out |
+---------------------+-------------+
| 2014-09-20 00:00:00 | 4.13 |
| 2014-09-20 00:01:00 | 3.21 |
| 2014-09-20 00:02:00 | 2.18 |
| 2014-09-20 00:03:01 | 1.61 |
| 2014-09-20 00:04:00 | 1.07 |
| 2014-09-20 00:05:00 | 0.92 |
| 2014-09-20 00:06:00 | 1.23 |
| 2014-09-20 00:07:00 | 2.76 |
| 2014-09-20 00:08:00 | 1.35 |
| 2014-09-20 00:09:00 | 3.11 |
| 2014-09-20 00:10:00 | 2.99 |
| 2014-09-20 00:11:00 | 2.68 |
| 2014-09-20 00:12:00 | 2.55 |
| 2014-09-20 00:13:00 | 2.89 |
| 2014-09-20 00:14:00 | 4.98 |
| 2014-09-20 00:15:00 | 6.56 |
| 2014-09-20 00:16:00 | 7.34 |
| 2014-09-20 00:17:00 | 6.81 |
| 2014-09-20 00:18:00 | 7.67 |
| 2014-09-20 00:19:00 | 4.11 |
+---------------------+-------------+
20 rows in set (0.74 sec)
4)如果是两台设备,汇总流量,假如公司出口有两台设备,可以用下面的SQL语句汇总每天的流量。下面SQL语句是汇总上面主机网卡的进出流量的。
mysql> select from_unixtime(clock,"%Y-%m-%d %H:%i") as DateTime,sum(round(value/1024/1024,2)) as Traffic_total from history_uint where itemid in (58855,58860) and from_unixtime(clock)>='2014-09-20'and from_unixtime(clock)<'2014-09-21' group by from_unixtime(clock,"%Y-%m-%d %H:%i") limit 20;
+------------------+---------------+
| DateTime | Traffic_total |
+------------------+---------------+
| 2014-09-20 00:00 | 4.23 |
| 2014-09-20 00:01 | 3.30 |
| 2014-09-20 00:02 | 2.25 |
| 2014-09-20 00:03 | 1.66 |
| 2014-09-20 00:04 | 1.10 |
| 2014-09-20 00:05 | 0.98 |
| 2014-09-20 00:06 | 1.35 |
| 2014-09-20 00:07 | 2.81 |
| 2014-09-20 00:08 | 1.45 |
| 2014-09-20 00:09 | 3.21 |
| 2014-09-20 00:10 | 3.11 |
| 2014-09-20 00:11 | 2.80 |
| 2014-09-20 00:12 | 2.68 |
| 2014-09-20 00:13 | 6.05 |
| 2014-09-20 00:14 | 5.21 |
| 2014-09-20 00:15 | 6.80 |
| 2014-09-20 00:16 | 7.60 |
| 2014-09-20 00:17 | 7.04 |
| 2014-09-20 00:18 | 7.81 |
| 2014-09-20 00:19 | 4.27 |
+------------------+---------------+
20 rows in set (1.52 sec)
5)查询一天中主机流量的最大值,最小值和平均值。
mysql> select date as DateTime,round(min(traffic)/2014/1024,2) as TotalMinIN,round(avg(traffic)/1024/1024,2) as TotalAvgIN,round(max(traffic)/1024/1024,2) as TotalMaxIN from (select from_unixtime(clock,"%Y-%m-%d") as date,sum(value) as traffic from history_uint where itemid in (58855,58860) and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' group by from_unixtime(clock,"%Y-%m-%d %H:%i") ) tmp;
+------------+------------+------------+------------+
| DateTime | TotalMinIN | TotalAvgIN | TotalMaxIN |
+------------+------------+------------+------------+
| 2014-09-20 | 0.01 | 4.63 | 191.30 |
+------------+------------+------------+------------+
1 row in set (1.74 sec)
6)查询主机组里面所有主机CPU Idle平均值(原始值)。
mysql> select from_unixtime(hi.clock,"%Y-%m-%d %H:%i") as DateTime,g.name as Group_Name,h.host as Host, hi.value as Cpu_Avg_Idle from hosts_groups hg join groups g on g.groupid = hg.groupid join items i on hg.hostid = i.hostid join hosts h on h.hostid=i.hostid join history hi on i.itemid = hi.itemid where g.name='上海机房--项目测试' and i.key_='system.cpu.util[,idle]' and from_unixtime(clock)>='2014-09-24' and from_unixtime(clock)<'2014-09-25' group by h.host,from_unixtime(hi.clock,"%Y-%m-%d %H:%i") limit 10;
+------------------+----------------------------+----------+--------------+
| DateTime | Group_Name | Host | Cpu_Avg_Idle |
+------------------+----------------------------+----------+--------------+
| 2014-09-24 00:02 | 上海机房--项目测试 | testwb01 | 94.3960 |
| 2014-09-24 00:07 | 上海机房--项目测试 | testwb01 | 95.2086 |
| 2014-09-24 00:12 | 上海机房--项目测试 | testwb01 | 95.4308 |
| 2014-09-24 00:17 | 上海机房--项目测试 | testwe01 | 95.4580 |
| 2014-09-24 00:22 | 上海机房--项目测试 | testwb01 | 95.4611 |
| 2014-09-24 00:27 | 上海机房--项目测试 | testwb01 | 95.2939 |
| 2014-09-24 00:32 | 上海机房--项目测试 | testwb01 | 96.0896 |
| 2014-09-24 00:37 | 上海机房--项目测试 | testwb01 | 96.5286 |
| 2014-09-24 00:42 | 上海机房--项目测试 | testwb01 | 96.8086 |
| 2014-09-24 00:47 | 上海机房--项目测试 | testwb01 | 96.6854 |
+------------------+----------------------------+----------+--------------+
10 rows in set (0.75 sec)
7)查询主机组里面所有主机 CPU Idle平均值(汇总值)。
mysql> select from_unixtime(hi.clock,"%Y-%m-%d %H:%i") as Date,g.name as Group_Name,h.host as Host, hi.value_avg as Cpu_Avg_Idle from hosts_groups hg join groups g on g.groupid = hg.groupid join items i on hg.hostid = i.hostid join hosts h on h.hostid=i.hostid join trends hi on i.itemid = hi.itemid where g.name='上海机房--项目测试' and i.key_='system.cpu.util[,idle]' and from_unixtime(clock)>='2014-09-10' and from_unixtime(clock)<'2014-09-11' group by h.host,from_unixtime(hi.clock,"%Y-%m-%d %H:%i") limit 10;
+------------------+----------------------------+----------+--------------+
| Date | Group_Name | Host | Cpu_Avg_Idle |
+------------------+----------------------------+----------+--------------+
| 2014-09-10 00:00 | 上海机房--项目测试 | testwb01 | 99.9826 |
| 2014-09-10 01:00 | 上海机房--项目测试 | testwb01 | 99.9826 |
| 2014-09-10 02:00 | 上海机房--项目测试 | testwb01 | 99.9825 |
| 2014-09-10 03:00 | 上海机房--项目测试 | testwb01 | 99.9751 |
| 2014-09-10 04:00 | 上海机房--项目测试 | testwb01 | 99.9843 |
| 2014-09-10 05:00 | 上海机房--项目测试 | testwb01 | 99.9831 |
| 2014-09-10 06:00 | 上海机房--项目测试 | testwb01 | 99.9829 |
| 2014-09-10 07:00 | 上海机房--项目测试 | testwb01 | 99.9843 |
| 2014-09-10 08:00 | 上海机房--项目测试 | testwb01 | 99.9849 |
| 2014-09-10 09:00 | 上海机房--项目测试 | testwb01 | 99.9849 |
+------------------+----------------------------+----------+--------------+
10 rows in set (0.01 sec)
8)其它与Zabbix相关的SQL语句。
查询主机已经添加但没有开启监控主机:
select host from hosts where status=1;
查询NVPS的值:
mysql> SELECT round(SUM(1.0/i.delay),2) AS qps FROM items i,hosts h WHERE i.status='0' AND i.hostid=h.hostid AND h.status='0' AND i.delay<>0;
+--------+
| qps |
+--------+
| 503.40 |
+--------+
1 row in set (0.11 sec)
望采纳
4. 如何通过Zabbix获取监控数据
您好,是这样的:
zabbix基本架构:
1.Server
zabbix系统核心进程,轮询并捕获数据、发送通知等。是zabbix agent和zabbix proxy汇报数据的对象。server自身可远程检测网络服务。所有的前后端配置、统计信息、可操作数据存储于此。包含server、前段界面和后端DB几部分。
2.Agent
部署在被监控主机上用于监控本地资源和应用并向zabbix server汇报结果。使用本地系统调用故非常高效。有主动和被动两种检测模式。被动模式下agent根据server或proxy的具体请求来返回数据。主动模式下先主动由server获取监控项列表在检测并返回新的数据。采用主动或被动枯渣检测取决于相应监控项的配置。
3.Proxy
可以自由选择部署或者不部署,主要用于分担server的负载。在集中化监控远程位置、分支、网络的场景中是很好的解决方案。可从被指掘监控设备收集数据缓存在proxy本地后传递给其所属的zabbix server。proxy需要单独的数据库。
4.Java gateway
java实现的守护进程用于监控JMX类型的应用程序。
5.Sender
命令行工具zabbix_sender,用于向zabbix server发送性能数据和可用性数据。多用于用户脚本定期向server发送数据。
如:
shell> cd bin
shell> ./zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43
6.Get
命令行工具zabbix_get,用于同agent通信从agent获取数据。可用于zabbix agents的troubleshooting。没逗悄
如:
shell> cd bin
shell> ./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
#zabbix术语表:
host
需要被监控的设备,如交换机、路由器、WEB服务器、DB服务器等
host group
被监控设备的逻辑分组,如DB服务器一组、WEB服务器一组等。可包含主机和模板。用于权限控制
item
需要被监控的项,如CPU空闲率、某一块磁盘的使用率等
trigger
用于评估收到的监控值是否超出设定的阈值的逻辑表达式
event
如trigger状态改变等值得注意的事件
action
预先定义的响应event的一系列operations
escalation
执行action中的operations的定制场景;一连串的发送通知、执行远程命令
media
传递notification的方式
notification
通过media发送给用户的关于某个event的消息
remote command
在被监控机器上触发并自动执行的预定义命令
template
用于简化和加速主机上大规模监控任务的部署。包含一系列项目,如items, triggers, graphs, screens, applications, low-level discovery rules
application
逻辑组中的一组items
web scenario
一个或多个HTTP request用以检查web站点可用性
frontend
zabbix的web界面
zabbix api
允许通过JSON RPC 协议创建、更新和获取zabbix对象如,hosts, items, graphs and others。或者执行其他任务
zabbix server
zabbix核心,履行监控,与zabbix proxies、zabbix client交互、计算trigger、发送notification、存储数据等任务
zabbix agent
部署在被监控主机上用于监控本地资源和应用
zabbix proxy
可代zabbix server收集数据分担处理负载
#zabbix配置:
可通过WEB界面或者模板进行配置
需配置内容包括users、user groups、hosts、host groups、items、Triggers、Events、notification、templates、visualisation等。
5. 如何安装Zabbix
zabbix是一个CS结构的监控系统,之前一直没有很好的整理下安装:安装几次都要重新看,目前将Zabbix配置安装进行整理如下
Zabbix配置需要web、php、mysql、gcc等支持
请自行配置好
接下来我们开始操作
操作范例的操作系统为Centos 5.2
tar zxvf zabbix-1.6.2.tar.gz mysql -uroot -p mysql> create databases zabbix; mysql> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY ‘zabbix’ WITH GRANT OPTION; mysql> use zabbix; mysql> source /usr/local/src/zabbix-1.6.2/create/schema/mysql.sql mysql> source /usr/local/src/zabbix-1.6.2/create/data/data.sql mysql> source /物梁誉usr/local/src/zabbix-1.6.2/create/data/images_mysql.sql cd zabbix-1.6.2
./configure –prefix=/渣蔽usr/local/zabbix/ \ //指定安装目罩段录 –enable-server \ //安装server,被监控节点不需要 –enable-agent \ //安装agent –with-mysql \ //需要mysql支持需要指定目录 –with-net-snmp //需要snmp支持需要指定目录
常用的编译选项如下,需要更多的可以看帮助
–enable-static Build statically linked binaries –enable-server Turn on build of server –enable-proxy Turn on build of proxy server –enable-agent Turn on build of agent –enable-ipv6 Turn on support of IPv6 –with-mysql –with-oracle –with-pgsql –with-sqlite3 –with-jabber –with-net-snmp –with-ucd-snmp
Zabbix配置客户端只需执行:
./configure –prefix=/usr/local/zabbix –enable-agent make && make install
Zabbix配置安装过程没有报错基本就OK,接下来增加对应的端口:
vi /etc/services
加入
zabbix_agent 10050/tcp # zabbix agent zabbix_agent 10050/udp # zabbix agent zabbix_trapper 10051/tcp # zabbix trapper zabbix_trapper 10051/udp # zabbix trapper
复制配置文件和服务启动脚本
cp -rf misc/conf /opt/app/zabbix/etc -R
到
misc/init.d/
选择一个自己合适自己环境的启动脚本,或者自己写一个
添加一个zabbix用户
useradd zabbix
然后用脚本启动zabbix_server和zabbix_agentd
[root@zabbix ~]#ll /usr/local/zabbix/sbin/ total 2344 -rwxr-xr-x 1 root root 362581 Apr 16 22:55 zabbix_agent -rwxr-xr-x 1 root root 425336 Apr 16 22:55 zabbix_agentd -rwxr-xr-x 1 root root 136854 Apr 16 22:55 zabbix_get -rwxr-xr-x 1 root root 163086 Apr 16 22:55 zabbix_sender -rwxr-xr-x 1 root root 1284665 Apr 16 22:55 zabbix_server
Zabbix配置回到zabbix的编译目录:
生成配置文件:
mkdir /etc/zabbix cp misc/conf/* /etc/zabbix/ vi frontends/php/include/db.inc.php
更改数据库相关内容:
$DB_TYPE ="MYSQL"; $DB_SERVER ="localhost"; $DB_DATABASE ="zabbix"; $DB_USER ="zabbix"; $DB_PWD ="zabbix"; cp -rf frontends/php /var/www/html/zabbix -R
php环境需求
PHP version: 5.2.8 Ok PHP Memory limit: 128M Ok PHP post max size: 8M Ok PHP max execution time: 300 sec Ok PHP Databases support: MySQL Ok PHP BC math support yes Ok GD Version: bundled (2.0.34 compatible) Ok Image formats: PNG Ok PHP Timezone: Asia/Shanghai
注:gd-devel没有安装上去将无法在web端安装过去,对应的其他也要安装,比如net-snmp,可通过yum来安装,方便。
[root@zabbix ~]#rpm -qa|grep gd gd-devel-2.0.33-9.4.el5_1.1 gd-2.0.33-9.4.el5_1.1
安装php-bcmath
yum -y install php-bcmath
修改时区
Vi /etc/php.ini date.timezone =Asia/Shanghai
如何安装Zabbix就介绍到这里了。
6. 怎样使用zabbix监控服务器的mysql数据库
怎样使用zabbix监控服务器的
mysql数据库
进入
zabbix
web
台Configuration-->Hosts
groups-->点击尺态Create
host
group-->选择template
选项卡
选择模板TemplateApp
MySQLTempldate
OS
Linux点击update
即(032.png)
进入zabbix
web
台configuration-->hosts-->点击主机
name-->选择旅圆template选
项卡选择模板Template
App
MySQL点击左陵镇源边Add按钮点击update按钮即(033.png)
7. 如何通过Zabbix获取监控数据
##################################
zabbix基本架构
##################################
1.Server
zabbix系统核心进程,轮询并捕获数据、发送通知等。是zabbix agent和zabbix proxy汇报数据的对象。server自身可远程检测网络服务。所有的前后端配置、统计信息、可操作数据存储于此。包含server、前段界面和后端DB几部分。
2.Agent
部署在被监控主机上用于监控本地资源和应用并向zabbix server汇报结果。使用本地系统调用故非常高效。有主动和被动两种检测模式。被动模式下agent根据server或proxy的具体请求来返回数据。主动模式下先主动由server获取监控项列表在检测并返回新的数据。采用主动或被动检测取决于相应监控项的配置。
3.Proxy
可以自由选择部署或者不部署,主要用于分担server的负载。在集中化监控远程位置、分支、网络的场景中是很好的解决方案。可从被监控设备收集数据缓存在proxy本地后传递给其所属的zabbix server。proxy需要单独的数据库。
4.Java gateway
java实现的守护进程用于监控JMX类型的应用程序。
5.Sender
命令行工具zabbix_sender,用于向zabbix server发送性能数据和可用性数据。多用于用户脚本定期向server发送数据。
如:
shell> cd bin
shell> ./zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43
6.Get
命令行工具zabbix_get,用于同agent通信从agent获取数据。可用于zabbix agents的troubleshooting。
如:
shell> cd bin
shell> ./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
####################################
#zabbix术语表
####################################
host
需要被监控的设备,如交换机、路由器、WEB服务器、DB服务器等
host group
被监控设备的逻辑分组,如DB服务器一组、WEB服务器一组等。可包含主机和模板。用于权限控制
item
需要被监控的项,如CPU空闲率、某一块磁盘的使用率等
trigger
用于评估收到的监控值是否超出设定的阈值的逻辑表达式
event
如trigger状态改变等值得注意的事件
action
预先定义的响应event的一系列operations
escalation
执行action中的operations的定制场景;一连串的发送通知、执行远程命令
media
传递notification的方式
notification
通过media发送给用户的关于某个event的消息
remote command
在被监控机器上触发并自动执行的预定义命令
template
用于简化和加速主机上大规模监控任务的部署。包含一系列项目,如items, triggers, graphs, screens, applications, low-level discovery rules
application
逻辑组中的一组items
web scenario
一个或多个HTTP request用以检查web站点可用性
frontend
zabbix的web界面
zabbix api
允许通过JSON RPC 协议创建、更新和获取zabbix对象如,hosts, items, graphs and others。或者执行其他任务
zabbix server
zabbix核心,履行监控,与zabbix proxies、zabbix client交互、计算trigger、发送notification、存储数据等任务
zabbix agent
部署在被监控主机上用于监控本地资源和应用
zabbix proxy
可代zabbix server收集数据分担处理负载
######################################
#zabbix配置
######################################
可通过WEB界面或者模板进行配置
需配置内容包括users、user groups、hosts、host groups、items、Triggers、Events、notification、templates、visualisation等。
最终配置会被存储在后端database中。
#####################################
zabbix取数方式
####################################
1.zabbix api
基于WEB的API,通过JSON PRC协议获取或更改zabbix配置,并可用于获取历史监控数据。clients和API间的request和response使用JSON格式。包含一系列可从功能上分为不同组别的方法。
发起HTTP请求的格式类似如下:
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
其中http://company.com/zabbix/是zabbix前端的地址;Content-Type必须指明且为application/json-rpc, application/json or application/jsonrequest三者之一。{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}是请求的具体内容。
一些实例:
*登录认证
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
其中:
jsonrpc:指明JSON-RPC协议版本,这里是2.0版本
method:指明调用的API方法,这里是用户登录
params:需要传递给API method的参数,这里是用户名和密码
id:本次请求的标识符
auth:用户认证令牌,目前尚无所以为null
若参数无误response将会包含用户认证令牌,如:
{
"jsonrpc": "2.0",
"result": "",
"id": 1
}
*获取hosts信息
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": ""
}
本例使用可用的用户认证令牌通过host.get方法获取所配置的主机的ID 、name等信息,返回如下
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
为了考虑性能影响、尽量仅列出所需项而非返回所有数据
*创建新监控项
例如在上一步获取的host上建立新的监控项、监控/home/joe/目录的剩余空间
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"type": 0,
"value_type": 3,
"interfaceid": "1",
"delay": 30
},
"auth": "",
"id": 3
}
其中params参数中的几个关键参数含义如下:
name:监控项的名称,这个可以自己灵活定义,其中的$1代表key_中的第一个参数,此处为/home/joe/
key_:预定义的监控项,zabbix提供了一系列此类监控内容,此处需从其中进行选择。
hostid:即上步获得的hostid
value_type:监控数据值的类型,不同的数字代表不同的类型,此处的3代表整型
delay:zabbix取数时间间隔,此处为30秒取一次
返回结果如下:
{
"jsonrpc": "2.0",
"result": {
"itemids": [
"24759"
]
},
"id": 3
}
itemid为生成的监控项的id
*获取历史数据:
从历史记录表获取itemids为23296的按clock降序排列的十条记录
history参数可能的取值
0 - float;
1 - string;
2 - log;
3 - integer;
4 - text.
{
"jsonrpc": "2.0",
"method": "history.get",
"params": {
"output": "extend",
"history": 0,
"itemids": "23296",
"sortfield": "clock",
"sortorder": "DESC",
"limit": 10
},
"auth": "",
"id": 1
}
返回结果:
{
"jsonrpc": "2.0",
"result": [
{
"itemid": "23296",
"clock": "1351090996",
"value": "0.0850",
"ns": "563157632"
},
{
"itemid": "23296",
"clock": "1351090936",
"value": "0.1600",
"ns": "549216402"
},
...]
}
*错误处理
下例忘记了groups这个参数
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "Linux server",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
]
},
"id": 3,
"auth": ""
}
返回结果如下,包含的不是result属性而是error属性
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 3
}
对于获取监控数据来说,比较关心的应该是history.get这个方法。这种方式实际上最终还是由后台数据库获取的。方法提供了丰富的参数,使用非常灵活。但对于一次性大规模的取出大量主机大量监控项的大批数据不太适合。
2.zabbix_get:
命令行工具,可从远程的zabbix agent获取数据
zabbix_get [-hV] [-s <host name or IP>] [-p <port number>] [-I <IP address>] [-k <item key>]
-s, --host <host name or IP>
-p, --port <port number>
-I, --source-address <IP address>
-k, --key <item key>
-h, --help
-V, --version.
如:zabbix_get -s 127.0.0.1 -p 10050 -k system.cpu.load[all,avg1]
zabbix api获取到的是数据库中的历史数据,zabbix_get可获得实时的数据。可根据工具的特点选择适合的场景。
3.zabbix databases:
直接由zabbix后台数据库获取历史数据。适用于一次性大规模的取出大量主机大量监控项的大批数据。
*相关表
history系列表分别存储不同数据类型的历史数据
表中数据以update interval为时间间隔
zabbix.history -numeric(float)
zabbix.history_log -log
zabbix.history_str -character(up to 255 bytes)
zabbix.history_text -text
zabbix.history_unit -numeric(unsigned intergers)
trends_系列表存储不同类型的历史数据统计结果
表中数据以小时为时间间隔,存储每小时的最小、最大和平均值
zabbix.trends -numeric(float)
zabbix.trends_unit -numeric(unsigned intergers)
character\log\text\类型无历史统计结果
history系列的表只包含itemid、clock、value等数据
trends系列的表只包含itemid、clock、value_min、value_avg、value_max等数据
history、trends需与items、hosts、hosts_groups、groups表关联来获取item名称、host名称、组别等。
*表及重要的表字段
hosts
hosts.hostid 主机id
hosts.host 主机名
hosts.status 主机状态 0为正常监控,1为关闭,3表示是个Template,5尚不不清楚。
hosts_group
hosts_group.hostid 主机id
hosts_group.groupid 所属组id
groups
groups.groupid 组id
groups.name 组名
items
items.itemid 监控项id
items.hostid 监控项所在主机id
items.name 监控项别名
items.key_ 监控项标准名称
items.value_type值类型
items.delay 取数时间间隔
items.history 历史表数据保留天数
items.trends 历史统计表数据保留天数
item.units 数据单位
items表中value_type与history的对应关系
(主要为了存取效率将不同值类型存在不同的history表中)
value_type history表
0 history
1 history_str
2 history_log
3 history_uint
4 history_text
history
hisrtory.itemid 监控项id
trends
trends.itemid 监控项id
zabbix后台系统的涉及到大量的表,取历史数据的话关心这几个即可
*监控项规则解读
zabbix.items表中存在类似于如下的配置项(如网络网卡监控、磁盘监控等):
name key_
Free disk space on $1 vfs.fs.size[/,free]
Free disk space on / (percentage) vfs.fs.size[/,pfree]
Free disk space on $1 vfs.fs.size[/boot,free]
Free disk space on /boot (percentage) vfs.fs.size[/boot,pfree]
Free disk space on $1 vfs.fs.size[/data,free]
Free disk space on /data (percentage) vfs.fs.size[/data,pfree]
Free disk space on $1 vfs.fs.size[{#FSNAME},free]
Free disk space on {#FSNAME} (percentage) vfs.fs.size[{#FSNAME},pfree]
其中类似于如下的配置是zabbix提供的low level discovery配置方式,用于自动创建监控项适用于有多块磁盘、多个目录、多块网卡等类型情形下监控项的自动发现
可以把{#FSNAME}看做是模板可以匹配配置好的所有的相关项比如:
Free disk space on {#FSNAME} (percentage) vfs.fs.size[{#FSNAME},pfree]
Free disk space on /data (percentage) vfs.fs.size[/data,pfree]
Free disk space on /boot (percentage) vfs.fs.size[/boot,pfree]
Free disk space on / (percentage) vfs.fs.size[/,pfree]
类似的还有:
Incoming network traffic on $1 net.if.in[{#IFNAME}]
Outgoing network traffic on $1 net.if.out[{#IFNAME}]
IO.util.{#DISK_NAME} IO.util[{#DISK_NAME}]
等等
而上边例子中的$1、$2等对应key_的参数位置,例如
Free disk space on $1 vfs.fs.size[/,free]
中$1就代表/ ,Free disk space on $1相当于Free disk space on /依次类推
8. zabbix 配置DBHost为远程mysql数据库
Zabbix的简单安装配置说明
1、在已有的LAMP或者LNMP的基础上安装zabbix,安谈搏喊装银陵一些依赖包:
yum -y install mysql-devel libcurl-devel net-snmp-devel
2、添加用户含野:
groupadd zabbix
useradd zabbix -g zabbix
3、创建数据库,添加授权账号
create database zabbix character set utf8;
导入数据库
mysql -uzabbix -pzabbix -hlocalhost zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix -hlocalhost zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix -hlocalhost zabbix < database/mysql/data.sql
9. 怎样使用zabbix监控服务器的mysql数据库
怎旅圆样使用zabbix监控服务器的mysql数据库
进入 zabbix web 台Configuration-->Hosts groups-->点击Create host group-->选择尺态template选项卡选择模板TemplateApp MySQLTempldate OS Linux点击update 即(032.png)
进入zabbix web 台configuration-->hosts-->点击主机 name-->选择陵镇源template选
项卡选择模板Template App MySQL点击左边Add按钮点击update按钮即(033.png)
10. 配置zabbix 怎么将数据导入数据库表
做过Zabbix的同学都知道,Zabbix通过专用的Agent或者SNMP收集相关的监控数据拦裤,然后存储到数据库里面实时在前台展示。Zabbix监控数据主要分为以下两类: 历史数简链简据:history相唤迅关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均...