1、自定义key
接口:server端之所以能够监控agent端,是因为agent端有一个的接口,这个接口用于和server端连接,传送监控的数据,所以一个主机要想被Zabbix监控,首先要在本机安装相应的接口,接口类型有agent,snmp, jmx等,agent是绝大多数linux主机上都可以安装的接口,snmp一般是安装在路由器和交换机等网络设备上使用的接口,jmx是java虚拟机安装使用的接口,Zabbix监控时可以与这三种接口进行连接,进而监控不同的设备或主机。
自定义key:在zabbix agent端的配置文件上由用户通过UserParameter指令定义的key,要监控某一个主机的item,需要通过key在这个主机上获取这个监控项。
vim zabbix_agentd.conf文件中
UserParameter=<key>,<shell,command>,key是自定义的key,可以随便定义,可以加参数;逗号后面是得到要监控的数据的命令或脚本。
示例:用自定义key监控php-fpm的各状态信息
1、在被监控的主机上安装如下软件包
yum install nginx php-fpm zabbix-agent zabbix-sender -y
2、配置zabbix-agent并启动服务
vim /etc/zabbix/zabbix_agentd.conf
LogFileSize=1 ---滚动日志
EnableRemoteCommands=1 #允许sever端控制本机在本地远程执行命令
LogRemoteCommands=1 #远程执行命令时记录日志
Server=172.18.21.107 #被动模式下允许哪个server端过来采集监控数据
ListenPort=10050 #被动模式下agent端监听的端口
ListenIP=0.0.0.0 #被动模式下监听的地址
StartAgents=5 #使用agent接口连接时打开的进程数
ServerActive=172.18.21.107 #主动模式下将监控的数据主动发送给哪个远程的server
Hostname=node4.magedu.com ---主动模式下要告诉server端主机的主机名,这样server端才知道这是谁的数据,进行存储下来
systemctl start zabbix-agent.service
3、配置php-fpm和nginx并启动服务
vim /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
;listen.allowed_clients = 127.0.0.1 #将此行注释掉,默认为允许任务主机连接
user = nginx
group = nginx
pm.status_path = /php-status #指明状态页的uri
ping.path = /ping
ping.response = pong
systemctl start php-fpm
vim /etc/nginx/conf.d/web.conf
server {
listen 80 default_server ;
server_name wwww.a.com;
root /app/website;
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /app/website$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^/(php-status|ping)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
# allow 127.0.0.1; #为了安全最好设置为只允许本机访问状态页面,这里为了测试方便,将此项和下面的一项注释掉了
# deny all;
access_log off; #并且关闭访问日志,不然每监控一个状态信息都会发送日志
}
}
mkdir /app/website -pv
vim /app/website/index.php
<?php
phpinfo();
?>
nginx -t
nginx #启动服务
测试 http://172.18.21.200/index.php看是否连接php成功
http://172.18.21.200/php-status ---看能否看到php-fpm的状态信息
[root@node4 website]#curl -s 172.18.21.200/php-status
pool: www
process manager: dynamic
start time: 22/Nov/2017:20:34:36 +0800
start since: 2117
accepted conn: 9
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 4
active processes: 1
total processes: 5
max active processes: 2
max children reached: 0
slow requests: 0
比如要监控active processes,可以通过这个命令获
curl -s http://127.0.0.1/php-status|awk '/^active/{print $NF}'
要监控total processes,可以通过如下命令获得
curl -s http://127.0.0.1/php-status|awk '/^total/{print $NF}'
也可以把要监控的项做为参数传递给这个命令或者脚本,比如你要监控上面两
项,可以把active和total做为参数传递给这个命令,就应该写成如下格式
curl -s http://127.0.0.1/php-status|awk '/^$1/{print $$NF}',$1表示传给此命令
的第一个参数(active或total),$$NF这里用两个$是为了说明为awk的内建
变量而不是参数,比如你要打印第一列,要写成$$1。
4、自定义key
cd /etc/zabbix/zabbix_agentd.d/
vim php-fpm.conf
也可以加到主配置文件中vim /etc/zabbix/zabbix_agentd.conf
注意UserParameter的大小写,不然服务重启不成功
systemctl restart zabbix-agent
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[total]" ---在server端通过自定义的key手动获取一个监控数据,发现获取成功
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[active]"
1
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[max active]"
2
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[idle]"
4
5、访问zabbix监控的管理页面http://172.18.21.107/zabbix/
创建此主机,然后创建一个模板,在模板的item中添加上面的四项要监控的内容,使用自定义key,然后再将此模板链接到刚才创建的主机上。
创建主机
创建模板
在模板中加入要监控的项目
将此模板链接到要监控的主机
2、网络发现
- 网络发现:zabbix server扫描指定网络范围内的主机;
- 发现方式:ip地址范围;可用服务(ftp, ssh, http, ...)
zabbix_agent的响应;
snmp_agent的响应; - 分两个阶段:
discovery
actions:把discvery events当作前提条件,发现后执行的动作 - 可采取的动作:
send message, remote command
add/remove host
enable/disable host
add host to group
link template to host
示例
在要监控的主机上安装好zabbix-agent和zabbix-sender并启动zabbix-agent服务,这样zabbix-server才能扫描到此主机,进而将其加到监控里,使用如下key进行扫描主机
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "system.uname"
Linux node4.magedu.com 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64
定义发现规则
此时扫描到了要监控的主机,并且处于up状态,但并没有加入到监控中,因为还没有定义发现后的处理动作是什么
定义发现后采用的动作
3、Web监控
监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
内建key:
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]:响应时长
web.test.rspcode[Scenario,Step]:响应码
对某个主机的web页面创建web监控后会自动使用内建的key进行三项指标的监控
如何创建web监控如下
可以在此处查看监控情况
4、主动和被动检测
- 被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
- 主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
-
agent端所需要基本配置:
ServerActive= #主动监控时server端的地址
Hostname= #主动监控时agent端向server端报告自己的主机名,这样服务器端才知道这是谁发过来的监控数据
HostnameItem= #后面两项如果同时启用通常是第二项有效
配置完成后,如何添加主动监控项如下图
-
zabbix_sender发送数据:手动测试agent端向server端发送数据,使用如下的命令,这也是一种主动监控的方式,只不过这种方式不是通过内建的key主动向server端发送数据,而是在agent端通过命令给server端发送数据,一般用于测试用
zabbix_sender命令的选项
-z zabbix_server_ip #指明server端的ip
-p zabbix_server_port #server端端口
-s zabbix_agent_hostname #agent端主机名
-k key #自己定义的kye
-o value #key的值
为了手动测试,此时添加Item时要随便定义一个不与其它已有key冲突的key,并且item type为“zabbix trapper"
在agent端发送一个数据测试一下
此时可以收到数据了
总结:为了减轻server端的压力,监控时一般使用主动监控模式,也就是agent端主动报告监控数据给server端,会极大的提高server端的性能。
5、基于SNMP监控
SNMP监控主要用于监控路由器、交换机等不支持在监控端安装agent接口的设备,此时只能使用简单古老的协议SNMP协议的接口。
监听端口是161/udp被监控端;162/udp监控端监听的端口,如果是主动模式
SNMP协议的版本:v1: 1989,v2c: 1993,v3: 1998
实验时使用的是linux主机,启用SNMP的方法如下
[root@node4 ~]#yum install net-snmp net-snmp-utils #在被监控端安装
[root@node4 ~]#rpm -ql net-snmp
/etc/snmp/snmpd.conf #被监控端的配置文件
/etc/snmp/snmptrapd.conf #如果启动的是主动模式,server端也
需要安装此软件包,监听端口,这样被监控端才能与之连接,主
动发送数据,此文件是主动监控时server端的配置文件
/usr/lib/systemd/system/snmpd.service #被动监控时被监控端启动的服务,监听的端口是161/udp
/usr/lib/systemd/system/snmptrapd.service #主动监控时server端启动的服务,监听的端口是162/udp
也就是说如果是主动监控,server端也要安装net-snmp和net-snmp-utils,并启动snmptrapd.service服务,本实验采用的是被动模式,server端不需要安装
vim /etc/snmp/snmpd.conf
开放的监控项的含义
1.1.0:系统描述信息,SysDesc
.1.3.6.1.2.1. 1.3.0:监控时间, SysUptime
.1.3.6.1.2.1. 1.5.0:主机名,SysName
.1.3.6.1.2.1. 1.7.0:主机提供的服务,SysService
.1.3.6.1.2.1. 2.1.0:网络接口数目
.1.3.6.1.2.1. 2.2.1.2:网络接口的描述信息
.1.3.6.1.2.1.2.2.1.3:网络接口类型
[root@node4 snmp]#systemctl start snmpd
[root@node4 snmp]#ss -nlu
可以使用如下命令手动获取监控的数据
示例:使用snmp接口进行监控
连接模板到此主机
示例自己定义一个item
6、基于JMX的监控
JMX接口主要用于监控像tomcat这种运行于java虚拟机之上的服务。
示例:实现JMX监控tomcat
1、在被监控的主机上安装tomcat组件
[root@node3 ~]#yum install java-1.8.0-openjdk-devel tomcat tomcat-admin-webapps tomcat-webapps -y
[root@node3 ~]#vim /etc/sysconfig/tomcat #添加如下内容,指
明tomcat主机以及jmx监听的端口为12345,等待server端连接后
获取监控数据
CATALINA_OPTS="-Djava.rmi.server.hostname=172.18.21.7 -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
2、在server端安装zabbix-java-gateway
在server端除了要安装zabbix组件外,还需要安装java网关,因为
zabbix不能直接和JMX接口连接,需要安装java网关才可以
[root@node1 ~]#yum install zabbix-java-gateway
[root@node1 ~]#systemctl start zabbix-java-gateway.service
[root@node1 ~]#ss -nlt ---发现监听的端口是10052
3、修改zabbix-server端设置
[root@node1 ~]#vim /etc/zabbix/zabbix_server.conf
JavaGateway=172.18.21.107 #server端的ip地址
JavaGatewayPort=10052 #JavaGateway监听的端口
StartJavaPollers=5 #启动的进程数
[root@node1 ~]#systemctl restart zabbix-server.service #重新启动服务
[root@node1 ~]#systemctl status zabbix-server.service #查看状态是否启用了java poller,说明java-gateway的监控功能启用了
jmx的详细文档: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
7、Zabbix Proxy的配置
为了减轻zabbix-server端的压力,常常需要配置多个proxy代理代替server端去监控主机,并将结果反馈给server端,在proxy上数据先短时的存入自己主机的mysql数据库中,并不断将监控的数据发送至server端。
示例
1、在proxy上的配置
[root@node3 ~]#yum install mariadb-server
[root@node3 ~]#vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
innodb_buffer_pool_size = 256M
log_bin = bin-log
[root@node3 my.cnf.d]#systemctl start mariadb
MariaDB [(none)]> create database zbxproxydb character set 'utf8'; #创建一个数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zbxproxydb.* to zbxproxyuser@'172.18.21.7' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)
[root@node3 my.cnf.d]#yum install zabbix-proxy-mysql zabbix-get zabbix-sender zabbix-agent #因为要监控自己,所以安装了zabbix-sender zabbix-agent
[root@node3 my.cnf.d]#rpm -ql zabbix-proxy-mysql
/usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz
[root@node3 my.cnf.d]#cd /usr/share/doc/zabbix-proxy-mysql-3.4.4/
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS ChangeLog COPYING NEWS README schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#zcat schema.sql.gz >schema.sql
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS ChangeLog COPYING NEWS README schema.sql schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#mysql -uzbxproxyuser -pcentos -h172.18.21.7 zbxproxydb < schema.sql #创建表
2、在proxy上修改的配置文件
[root@node3 zabbix-proxy-mysql-3.4.4]#vim /etc/zabbix/zabbix_proxy.conf
Server=172.18.21.107 #指明server主机的ip
Hostname=node3.magedu.com #指明自己的主机名,这样server端才能识别出这个代理
ServerPort=10051 #server监听的端口,这里要根据server端真正
的监听端口而写,并不一定是10051,如果是被动模式,也就是
server端主动向proxy获取数据时此项可以忽略,主动模式指的是
proxy主动发送监控的数据给server端,一般都是主动模式,以减
轻server端的压力
EnableRemoteCommands=1#允许server端在本机远程执行命令
LogRemoteCommands=1 #远程执行命令时记录到日志中
DBHost=172.18.21.7
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=centos
ConfigFrequency=30 #proxy主动获取server端配置数据的时间间隔
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl start zabbix-proxy.service
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl status zabbix-proxy.service
3、在agent端的配置
[root@node4 snmp]#vim /etc/zabbix/zabbix_agentd.conf
Server=172.18.21.7 #被动监控下允许proxy过来采集数据
ServerActive=172.18.21.7#主动监控下将数据发送给proxy,而不是server了
[root@node4 snmp]#systemctl restart zabbix-agent.service
创建代理
总结:一般情况下proxy使用主动模式,也就是proxy主动将监控的数据报告给server端,这样就可以减轻server端的压力,server端也不必主动去寻找proxy。
8、如何通过官方提供的share.zabbix网站配置监控nginx服务
zabbix官方提供的监控各种服务该如何配置以及监控项的模板的网站:https://share.zabbix.com/
进入该网站,搜索nginx
选择Nginx for Zabbix 3.2 会跳转至github上的此网站:
https://github.com/oscm/zabbix/tree/master/nginx
根据此网站进行一步一步的配置即可
下载时用wget命令下载raw格式
9、zabbix调优
- Database:
历史数据不要保存太长时长;
尽量让数据缓存在数据库服务器的内存中,这就要求根据物理内存情况将数据库的innodb_buffer_pool_size 设置的尽量大一些;
触发器表达式:减少使用min(), max(), avg()等聚合运算;尽量使用last(),nodata();
数据收集:polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active)),也就是尽量使用主动监控模式;
数据类型:文本型数据处理速度较慢;尽量少收集类型为text或string类型的数据;多使用类型为numeric的;
分表:将以下以打头的表进行分表操作,存放在不同的服务器上
history_*
trends*
events* - zabbix服务器的进程:
(1) 服务器组件的数量;alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
StartPollers=60 #各种pollers就是监控时启动的进程数
StartPingers=10
StartDBSyncer=5
(2) 设定合理的缓存大小
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M
总结:zabbix是一种小型的轻量级的监控系统,对于监控中小型企业有很好的实用性,大型企业使用比较重量型的监控系统,比如openfalcon