项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html
一、User parameters 用户参数
1、介绍和用法
有时,你可能想要运行一个代理检查,而不是Zabbix的预定义
你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中
A user parameter also contains a key 一个用户参数也包含一个键
The key will be necessary when configuring an item 在配置监控项时,key是必需的
Note: Need to restart the agent 注意:需要重新启动agent 服务
2、用法展示
① free | awk ‘/^Mem/{print $3}‘ 自己需要查找的参数的命令
cd /etc/zabbix/zabbix_agentd.d/
UserParameter=memory.used,free | awk ‘/^Mem/{print $3}‘
③ systemctl restart zabbix-agent.service 重启agent 服务
zabbix_get -s 192.168.30.7 -p 10050 -k "memory.used"
3、用法升级
UserParameter=memory.stats[*],cat /proc/meminfo | awk ‘/^$1/{print $$2}‘
分析:$$2:表示不是前边调位置参数的$2 ,而是awk 的参数$2
(2)在zabbix-server 端,查询使用这个用户参数的key
① 添加Memory Total 的item监控项,使用memory.stats[MemTotal] 的用户参数
② clone 克隆Memory Total 创建Memory Free 的监控项
③ 创建Memory Buffers 的item 监控项,使用 memory.stats[Buffers] 的key
4、使用用户参数监控php-fpm 服务的状态
② vim /etc/php-fpm.d/www.conf 打开php-fpm的状态页面
user = nginx group = nginx pm.status_path = /php-fpm-status #php-fpm 的状态监测页面 ping.path = /ping #ping 接口,存活状态是否ok ping.response = pong #响应内容pong
③ systemctl start php-fpm 开启服务
(2)设置nginx ,设置代理php,和php-fpm的状态页面匹配
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* /(php-fpm-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; #访问这个页面就不用记录日志了 }
② systemctl start nginx 开启nginx服务
① 查询 curl 192.168.30.7/php-fpm-status
cd /etc/zabbix/zabbix_agentd.d/
UserParameter=php-fpm.stats[*],curl -s http://127.0.0.1/php-fpm-status | awk ‘/^$1/{print $$NF}‘
分析:设置用户参数为php-fpm.stats[*],$1为第一个参数;$$NF为awk中的参数,倒数第一列
systemctl restart zabbix-agent
(4)在zabbix-server 端,查询使用这个用户参数的key
zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[idle]"
zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[active]"
zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[max active]"
(5)创建一个模板,在模板上创建4个item监控项,使用定义的用户参数
④ fpm.stats[max active processes]
③ php-fpm max active processes
/etc/zabbix/zabbix_agentd.d/php_status.conf
二、Network discovery 网络发现
1、介绍
网络发现:zabbix server扫描指定网络范围内的主机;
网络发现是zabbix 最具特色的功能之一,它能够根据用户事先定义的规则自动添加监控的主机或服务等
加快Zabbix部署
简化管理
可用服务(ftp, ssh, http, ...)
zabbix_agent的响应;
snmp_agent的响应;
(3)网络发现通常包含两个阶段:discovery发现 和actions动作
Zabbix定期扫描网络发现规则中定义的IP范围;检查的频率对于每个规则都是可配置的
由网络发现模块执行的服务和主机(IP)的每个检查都会生成一个发现事件
② actions:网络发现中的事件可以触发action,从而自动执行指定的操作,把discvery events当作前提条件;
Sending notifications 发送通知
Adding/removing hosts 添加/删除主机
Enabling/disabling hosts 启用/禁用host
Adding hosts to a group 向组中添加主机
Removing hosts from a group 移除组中的主机
Linking hosts to/unlinking from a template 从模板链接主机或取消链接
Executing remote scripts 执行远程脚本
这些事件的配置还可以基于设备的类型、IP 、状态、上线/ 离线等进行配置
如果基于SNMP 检测成功,则会创建SNMP 接口
如果某服务同时响应给了agent 和SNMP ,则两种接口都会创建
如果同一种发现机制( 如agent) 返回了非惟一数据,则第一个接口被识别为默认,其它的为额外接口
即便是某主机开始时只有agent 接口,后来又通过snmp 发现了它,同样会为其添加额外的snmp 接口
不同的主机如果返回了相同的数据,则第一个主机将被添加,余下的主机会被当作第一个主机的额外接口
2、配置网络发现Network discovery
yum -y install zabbix-agent zabbix-sender
② 设置agent 配置,可以把之前设置好的node1的配置传过来
vim /etc/zabbix/zabbix_agentd.conf
Hostname=node2.along.com #只需修改hostname
zabbix ALL=(ALL) NOPASSWD: ALL
① key:zabbix_get -s 192.168.30.2 -p 10050 -k "system.hostname"
② 更新间隔:1h就好,不要扫描太过频繁,扫描整个网段,太废资源;这里为了实验,设为1m
c) 配置action 完成,默认是disabled 停用的
(5)如果自己需要添加的主机已经扫描添加完成,就可以关闭网络扫描了,因为太耗资源
三、web监控
1、介绍
① Web监控:监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
web Scenario: web场景(站点)
web page :web页面,一个场景有多个页面
內建key:要测一个页面,要测三个步骤(下边3个內建key)
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]: 响应时长
web.test.rspcode[Scenario,Step]:响应码
2、创建设置web场景
a) 设置名为home page,URL为http://192.168.30.7/index.html 的web页面
b) 设置名为fpm status,URL为http://192.168.30.7/fpm-status 的web页面
3、查看测试
四、主动/被动 监控
1、介绍
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
主动监控能极大节约监控server 的资源。
(2)zabbix_sender发送数据:实现人工生成数据,发给server端
① zabbix server上的某主机上,直接定义Item时随便定义一个不与其它已有key冲突的key即可,即item type为"zabbix trapper";
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value 值
2、设置一个通过內建key发送数据的主动监控
ServerActive=192.168.30.107 给哪个监控server 发送数据 Hostname=node1.along.com 自己的主机名,假设主机定死了,不设置下一项 #HostnameItem= 如果自己的主机名易变动,这一项相当于key一样去匹配
因为key:system.cpu.switches :上下文的数量进行切换,它返回一个整数值。为了监控效果,选择下一秒减上一秒的值作为监控
3、设置一个通过命令zabbix_sender发送数据的主动监控
(1)配置一个zabbix traper(采集器) 的item 监控项
五、基于SNMP监控(了解)
1、介绍
三种通信方式:读(get, getnext)、写(set)、trap(陷阱);
161/udp
162/udp
v1: 1989
v2c: 1993
v3: 1998
MIB:Management Information Base 信息管理基础
yum install net-snmp net-snmp-utils
/etc/snmp/snmpd.conf
systemctl start snmpd 被监控端开启的服务
systemctl start snmptrapd 监控端开启的服务(如果允许被监控端启动主动监控时启用)
① 定义认证符,将社区名称"public"映射为"安全名称"
1.1.0:系统描述信息,SysDesc
1.3.0:监控时间, SysUptime
1.5.0:主机名,SysName
1.7.0:主机提供的服务,SysService
2.1.0:网络接口数目
2.2.1.2:网络接口的描述信息
2.2.1.3:网络接口类型
……
# snmpget -v 2c -c public HOST OID
# snmpwalk -v 2c -c public HOST OID 通过这个端口查询到的数据,全列出了
2、配置SNMP监控
view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.2 # 网络接口的相关数据 view systemview included .1.3.6.1.4.1.2021 # 系统资源负载,memory, disk io, cpu load view systemview included .1.3.6.1.2.1.25
snmpget -v 2c -c public 192.168.30.2 .1.3.6.1.2.1.1.3.0
snmpget -v 2c -c public 192.168.30.2 .1.3.6.1.2.1.1.5.0
(4)在node2上加一个 Template OS Linux SNMPv2 模板
3、设置入站出站packets 的SNMP监控
① 把交换机、路由器的SNMP 把对应的OID的分支启用起来
③ 我们要监控的某一数据:如交换机的某一个接口流量、报文,发送、传入传出的报文数有多少个;传入传出的字节数有多少个,把OID取出来,保存
interface traffic packets(out)
六、JMX接口
1、介绍
Java虚拟机(JVM)具有内置的插装,使您能够使用JMX监视和管理它。您还可以使用JMX监视工具化的应用程序。
安装 zabbix-java-gateway程序包,启动服务;
yum -y install zabbix-java-gateway
JavaGateway=172.16.0.70
JavaGatewayPort=10052
StartJavaPollers=5 #监控项
监控tomcat:
/etc/sysconfig/tomcat,添加
CATALINA_OPTS="-Djava.rmi.server.hostname=TOMCAT_SERVER_IP -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" #启用JVM接口,默认没有启用
添加监控项:
jmx[object_name,attribute_name]
object name - 它代表MBean的对象名称
attribute name - 一个MBean属性名称,可选的复合数据字段名称以点分隔
示例:
jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
④ jmx的详细文档:https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
2、配置JVM接口监控
yum -y install java-1.8.0-openjdk-devel tomcat-admin-webapps tomcat-docs-webapp
② 加CATALINA_OPTS= #启用JVM接口,默认没有启用
CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.30.2 -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)在zabbix-server 端,安装配置java-gateway
yum -y install zabbix-java-gateway
/etc/zabbix/zabbix_java_gateway.conf 安装完后,会生成一个java_gateway 的配置文件
systemctl start zabbix-java-gateway.service 不用修改,直接开启服务
② 修改server 配置,开启java-gateway的配置
vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.30.107 JavaGatewayPort=10052 StartJavaPollers=5 #打开5个监控项
③ systemctl restart zabbix-server 重启zabbix-server 服务
(4)自己定义一个堆内存使用的监控项,基于JVM接口(没必要,使用模板就好)
七、分布式监控
1、介绍
proxy and node
Server-agent
Server-Node-agent
Server-Proxy-agent
server-node-agent
server-proxy-agent
创建、授权用户、导入schema.sql;
Server=
zabbix server主机地址;
Hostname=
当前代理服务器的名称;在server添加proxy时,必须使用此处指定的名称;
=需要事先确保server能解析此名称;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1
注意:zabbix agent端要允许zabbix proxy主机执行数据采集操作:
2、实现分布式zabbix proxy监控
③ 设置主机名 hostnamectl set-hostname zbproxy.along.com
④ vim /etc/hosts 每个机器都设置hosts,以解析主机名;DNS也行
192.168.30.107 server.along.com
192.168.30.3 node3.along.com zbproxy.along.com
机器名称 |
IP配置 |
服务角色 |
zabbix-server |
192.168.30.107 |
监控 |
agent-node1 |
192.168.30.7 |
被监控端 |
agent-node2 |
192.168.30.2 |
被监控端 |
node3 |
192.168.30.3 |
代理proxy |
zabbix-server 通过代理node3 监控node2
[server] skip_name_resolve = on innodb_file_per_table = on innodb_buffer_pool_size = 256M max_connections = 2000 log-bin = master-log
② systemctl start mariadb 开启服务
MariaDB [(none)]> create database zbxproxydb character set ‘utf8‘; MariaDB [(none)]> grant all on zbxproxydb.* to ‘zbxproxyuser‘@‘192.168.30.%‘ identified by ‘zbxproxypass‘; MariaDB [(none)]> flush privileges;
(3)在node3 上下载zabbix 相关的包,主要是代理proxy的包
yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
zabbix-proxy-mysql 包里带有,导入数据的文件
cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ 复制
mysql -root -p zbxproxydb < schema.sql 导入数据
① vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.30.107 #server 的IP ServerPort=10051 #server 的端口 Hostname=zbxproxy.along.com #主机名 ListenPort=10051 #proxy自己的监听端口 EnableRemoteCommands=1 #允许远程命令 LogRemoteCommands=1 #记录远程命令的日志 数据的配置 DBHost=192.168.30.3 DBName=zbxproxydb DBUser=zbxproxyuser DBPassword=zbxproxypass ConfigFrequency=30 #多长时间,去服务端拖一次有自己监控的操作配置;为了实验更快的生效,这里设置30秒,默认3600s DataSenderFrequency=1 #每一秒向server 端发一次数据,发送频度
② systemctl start zabbix-proxy 开启服务
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.30.107,192.168.30.3 ServerActive=192.168.30.107,192.168.30.3
systemctl restart zabbix-agent 启动服务
八、查询使用网上模板监控
1、找官方的share 分享网站
https://cn.bing.com/ 搜索 zabbix share
2、在node1 上使用此模板
vim /etc/nginx/nginx.conf 按照网页的操作指示
location /stub_status { stub_status on; access_log off; # allow 127.0.0.1; #为了操作方便,我取消的访问控制 # deny all; }
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/nginx.sh 从网页上获取脚本
cd /etc/zabbix/zabbix_agentd.d/
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/userparameter_nginx.conf 很短,自己写也行
(4)在windows 上下载模板,并导入这server 的模板中
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/zbx_export_templates.xml 可以现在linux上下载,再sz 导出到windows上
九、zabbix-server 监控自己,数据库,nginx
1、下载安装,配置agent
vim /etc/zabbix/zabbix_agentd.conf 配置agent
EnableRemoteCommands=1 允许远程命令 LogRemoteCommands=1 记录远程命令 Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=server.along.com
2、自动生成Zabbix server 的主机
3、在主机中添加模板
4、启用Zabbix server
5、监控到数据
十、调优
1、调优
历史数据不要保存太长时长;
尽量让数据缓存在数据库服务器的内存中;
② 触发器表达式:减少使用聚合函数 min(), max(), avg();尽量使用last(),nodata();
因为聚合函数,要运算
③ 数据收集:polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active)主动监控);
④ 数据类型:文本型数据处理速度较慢;尽量少收集类型为文本 text或string类型的数据;多使用类型为numeric 数值型数据 的;
2、zabbix服务器的进程
alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
StartPollers=60
StartPingers=10
...
StartDBSyncer=5
...
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M
分表:
history_*
trends*
events*
3、其它解决方案
exporter:收集
alertmanager: