如何通过Zabbix获取监控数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Zabbix获取监控数据相关的知识,希望对你有一定的参考价值。
参考技术A 1.Serverzabbix系统核心进程,轮询并捕获数据、发送通知等。是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中。
参考:
https://www.zabbix.com/documentation/2.4/manual/config
#####################################
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": "0424bd59b807674191e7d77572075f33",
"id": 1
*获取hosts信息
"jsonrpc": "2.0",
"method": "host.get",
"params":
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
,
"id": 2,
"auth": "0424bd59b807674191e7d77572075f33"
本例使用可用的用户认证令牌通过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": "0424bd59b807674191e7d77572075f33",
"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": "038e1d7b1735c6a5436ee9eae095879e",
"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": "0424bd59b807674191e7d77572075f33"
返回结果如下,包含的不是result属性而是error属性
"jsonrpc": "2.0",
"error":
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
,
"id": 3
对于获取监控数据来说,比较关心的应该是history.get这个方法。这种方式实际上最终还是由后台数据库获取的。方法提供了丰富的参数,使用非常灵活。但对于一次性大规模的取出大量主机大量监控项的大批数据不太适合。本回答被提问者和网友采纳
Zabbix分布式监控系统Zabbix
一.Zabbix功能及特性简介
Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息
1.Zabbix数据收集方式:
a.Agent客户端(Agent客户端支持多平台部署)
b.如果是无法安装客户端的设备,例如网络设备,则可以通过SNMP(简单网络管理协议)获取监控数据
c.支持通过IPMI获取硬件的温度,风扇,硬盘,电源等
d.通过Zabbix自带的检测进行监控
2.Zabbix支持自定义监控:
可以通过shell,python,ruby等可执行的脚本收集监控数据
3.Zabbix可以通过监控对象的趋向判断是否可能会发生异常,从而可以做到预告警功能。
4.Zabbix拥有告警关联功能(防止海量的告警难以排查,它可以迅速关联到核心问题所在)
5.Zabbix安全和认证,它可以设置用户的权限,安全方面通过TLS传输信息,防止信息被窃听(TLS是SSL的升级版)
6.Zabbix自动化:
a.网络自动发现
b.Agent自动注册
二.Zabbix架构
三.Zabbix Server安装配置1(二进制方式:centos7.5+zabbix4.4.1+pgsql12)
①找到相应的zabbix镜像
1. 在https://repo.zabbix.com/zabbix/4.4/rhel 选择自己需要的源后,再通过rpm -ivh在线安装
2.yum -y install zabbix-server-pgsql(本人在linux中使用yum安装zabbix报错Failed connect to repo.zabbix.com,甚至之后用yum再安装其他程序也会报错。个人解决办法如下:由于连接不上zabbix官方推荐的地址,考虑是不是国外的网站被墙了,因此找阿里或清华大学镜像源,例如
找到zabbix.repo文件,修改内容如下图
再次执行
yum -y install zabbix-server-pgsql
关闭selinux,vim /etc/selinux/config
②安装postgresql(这里是12)
1.拉取镜像
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2.安装客户端
yum install postgresql12
3.安装服务
yum install postgresql12-server
4.检查是否安装成功
rpm -qa | grep postgres
5.初始化数据库,设置自动启动
/usr/pgsql-12/bin/postgresql-12-setup initdb systemctl enable postgresql-12 systemctl start postgresql-12
6.进入postgresql
su - postgres 或 sudo -i -u postgres
psql
7.设置密码
password postgres
8.默认的PostgreSQL数据目录是/var/lib/pgsql/版本号/data
9.修改PostgreSQL配置
PostgreSQL的配置文件就在这个目录下/var/lib/pgsql/版本号/data/postgresql.conf,访问控制的配置文件是pg_hba.conf
修改postgresql.conf,这里只修改了listen_addresses,port和password_encryption,更多参数修改最好参考官方文档。
再修改pg_hba.conf配置文件(开启远程连接和密码校验规则)
10.重启服务(如果后面zabbix连接数据库报错Connection to database ‘xxx‘ failed ident ...的话,可以将ident设置为trust,并重启数据库后重启zabbix)
service postgresql-12 restart
11.查看运行状态
service postgresql-12 status
pgsql常用的命令例如c 类比与use,q类比于exit,这些可以自行查阅
③.安装Zabbix server,Web前端,agent
yum -y install zabbix-server-pgsql zabbix-web-pgsql zabbix-apache-conf zabbix-agent
1.创建初始数据库
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
2.导入初始架构和数据
zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix
4.编辑配置文件 /etc/zabbix/zabbix_server.conf(修改数据库名,用户名和密码)
DBPassword=password
4.为Zabbix前端配置PHP,编辑配置文件 /etc/httpd/conf.d/zabbix.conf( 选择所需要的时区,例如下面是上海的).
php_value date.timezone Asia/Shanghai
5.启动Zabbix server和agent进程,并为它们设置开机自启:
systemctl restart zabbix-server zabbix-agent httpd
systemctl enable zabbix-server zabbix-agent httpd
6.配置php,修改文件 vim /etc/php.ini ,具体要修改的参数如下:
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
max_input_vars = 10000
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
7.配置完成后启动服务
systemctl start httpd.service
4.Zabbix Agent 安装配置(Linux 和Windows)
①参考上面的Zabbix Server的安装步骤①
(将zabbix-server-pgsql改成zabbix-agent即可)
②修改配置
vim /etc/zabbix/zabbix_agentd.conf
将其中的Server和ServerActive指向先前搭建的Zabbix Server地址,设置HostName例如ywb_agent
③在web端添加主机
以上是关于如何通过Zabbix获取监控数据的主要内容,如果未能解决你的问题,请参考以下文章