Zabbix学习笔记

青春壹個敷衍的年華 提交于 2020-12-15 09:50:43

 
监控介绍:
    传感器:
        数据采集 --> 数据存储 --> 数据展示 
        报警:采集到的数据超出阈值
            时间序列数据
        开源监控工具:
        SNMP:
            工作模式:NMS端向agent端采集数据;agent端向NMS端报告数据;NMS端请求agnet端修改配置
            安装:# yum install -y net-snmp
            组件:MIB(management information base,管理信息库);SMI(MIB表示符号);SNMP协议
        NMS可发起操作:
            Get, GetNext, Set, Trap(接收agent发来的数据)
            agent: Response
            UDP
                NMS:161
                agent:162
            IPMI,windows自带的一种免费接口。
            SNMP协议之所以需要MIB库来对监控的数据进行描述,是因为协议本身很简单,没有对各项指标进行描述。而不同于SNMP,其他复杂一点的监控系统,比如nagios或者zabbix,他们协议自身就有定义过这些指标,所以zabbix没有类似MIB之类的东西。这样做的缺点在于,zabbix在传输监控数据的时候就会占用较大带宽,因为zabbix使用jason格式传输数据。但是在2.4版本之后,就会简化传输数据的内容,减少带宽消耗。
        SNMP协议的版本:
            v1,v2,v3版本。v1对数据没有任何加密认证。v2也被叫做v2c,c即是communicate,团体认证,即明文表示的共享密钥。而v3是对v2c进行改进的,带有密文的共享密钥。
        Nagios:会关注事件的状态转换,强大的报警监控系统。但是不支持大规模的场景。适用于100台之内的服务器监控场景。因为Nagios不支持分布式,所以对于大场景,可能需要部署多台Negios。
        cacti:可以完成数据的收集和展示,但是对状态转换的敏感度较低,报警较为薄弱。
        zabbix:融合上述两种监控系统的优点,就不用部署两套监控系统了。所谓的分布式监控,是在环境中部署多个agent和一个master,每一台zabbix系统都有自己的数据库,而每台agent会把监控的到的数据存放在自己的数据库中,并且每隔一段时间(比如一小时)之后,将数据发往master,之后删除自身数据库上面的数据。这样下来,master的zabbix的负担就会减少很多。
        ganglia:有许多zabbix所不具备的功能,所以在高性能集群或者分布式系统中被应用。
    多套监控系统监控不同模块,部署多套不同的监控系统监控相同模块。
zabbix:有专用agent的监控工具
    监控主机:
        Linux、Windows、FreeDSB
    网络设备:
        SNMP,SSH
    可监控对象:
        针对服务器:CPU、内存、网络、磁盘、服务、日志、文件等
        针对网页:响应时间、下载速度、返回值、获取特定内容等
    数据存储
        cacti:rrd(round robin database)
        zabbix:mysql,pgsql
    报警机制:
        E-mail、SMS、Jabber、Chat message、Command Execution
 
zabbix监控方式:
Agent:
    passive:
    active:
SNMP:Simple Network Management Protocol
# yum install -y net-snmp net-snmp-utils net-snmp-libs
# vim /etc/snmp/snmpd.conf
# First, map the community name "public" into a "security name"
com2sec    notConfigUser    default    public
# Second, map the security name into a group name:
group    notConfigGroup    v1    notConfigUser
group    notConfigGroup    v2c   notConfigUser
# Third, create a view for us to let the group have rights to:
view    systemview    include    .1.3.6.1.2.1
# Finally, grant the group read-only access to the systemview view.
access    notConfigGroup    ""    any    noauth    exact    systemview    none    none
# systemctl start snmpd
# netstat -lntup     
udp        0      0 0.0.0.0:161             0.0.0.0:*                           885/snmpd
在host里面可以看到有host通过SNMP方式进行监控,之后在创建item的时候的type就可以选择SNMPv2,输入OID之后,就可以
IPMI:智慧平台管理接口原本是Intel架构的企业系统的周边设备所采用的一种工业标准。可以脱离操作系统进行监控
JMX:
zabbix server端安装zabbix—java-gateway
# vim /etc/zabbix/zabbix_java_gateway.conf
Listen_IP=
Listen_PORT=10052
# vim /etc/zabbix/zabbix_server.conf
JavaGateWay=
JavaGateWayPort=10052
Java应用程序开启JMX接口
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10053 -Dcom.sun.management.jmxremote.authentication=false -Dcom.sun.management.jmxremote.ssl=false
监控Tomcat
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
 
zabbix组件:
    zabbix-server;zabbix-agent;zabbix-server-database;zabbix-web-GUI;zabbix-proxy;zabbix-proxy-database
    zabbix-server:主程序
    zabbix-database:存放监控数据
    zabbix-web:展示监控数据
    zabbix-proxy:代理zabbix server收集zabbix agent的数据并存放在自己的database中,并且周期性的发送给zabbix server database中。分布式监控环境中的专用组件,适用于较大规模使用场景
    zabbix-agent:部署在被监控的主机上,负责收集本地数据并且发往Server断或者Proxy端
    各组件之间的工作模式:
        zabbix server的配置文件是zabbix_server.conf,日志文件是zabbix_server.log
        zabbix agentd是一个运行在agnet上面的守护进程,zabbix server可以通过发送收集数据的请求直接从zabbix agentd上获取数据,也可以使用zabbix_get来获取数据,但是zabbix_get通常只用于测试。zabbix agentd可以同时启用多个子进程来监听zabbix server发来的请求,从而发送不同的数据给server。他的配置文件是zabbix_agentd.conf,而期间产生的日志信息则保存在zabbix_agentd.log中。如果zabbix server没有定义主动去收集zabbix agentd的数据,而是开启了被动接收,这样的话zabbix agentd则会通过zabbix_sender将数据主动发送至zabbix server。数据会保存至database中。
        zabbix proxy和上述两种模式类似,也有自己的配置文件zabbix_proxy.conf和日志文件zabbix_proxy.log
        zabbix server也有主动发现的功能,可以主动发现未添加的并且启用了agent的被监控主机,但是由于周期性的探测很耗费资源,所以在大规模监控场景中是会关闭自动发现功能的。
    专业术语:
        主机(host):被监控的主机,可由IP与DNS名称指定。
        主机组(group):主机的逻辑容器,包含主机和模板。
        监控项(item):监控指标。
        item key:对应定义item。
        触发器(tigger):一个表达式,用于评估某指标是否在合理范围内。
        事件(event):一个值得关注的事情。
        动作(action):对于特定事件是先定义的处理方法,包含操作与条件。
        报警升级(escalation):发送警报或执行远程命令的自定义方案
        媒介(media):发送通知的手段或通道
        通知(notification):通过选定的媒介向用户发送的有关某事件的信息
        远程命令(remote command):预定义命令,当被监控主机处于某种条件下自动执行
        模板(template):用于快速定义被监控主机的预设条目集合
        应用(application):一组item的集合
        web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求
        前端(frontend):Zabbix的web接口
    zabbix的逻辑架构:
    zabbix server在启动的时候会启动很多进程,包括watchdog(监控进程的活性)、housekeeper(管理数据保存时间)、alerter(执行警报操作)、poller(拉取数据,最重要)、httppoller(拉取web页面相关数据)、discoverer(主动发现机制)、pinger(通过ping方式检测主机是否在线)、db_config_syncer(数据库配置同步器)、db_data_syncer(数据库数据同步器)、nodewatcher(监控节点)、timer(计时器)、escalator(报警升级)这些进程。
    主动与被动在配置文件中的体现,就是Server与ServerActive。
host group ==> host ==> item(存储于MySQL)(或者Template) ==> graph(zabbix-web) ==> trigger ==> action(condition+operation)
application:把功能相近的一组item归类在一起统一管理组件
zabbix配置要求:
    官方建议:
    对于数据量要求:
在每次zabbix进行数据采集的时候,每个item的历史数据量大概有50个字节,历史趋势数据一般有128个字节,事件数据差不多有130个字节。比如某场景有100台被监控设备,每台20个item,每5分钟采集一次数据,数据保存一年,就可以计算出来大概需要100*20*365*24*60/5=4GB的存储空间。
    zabbix产生的数据主要由4部分组成:
        配置数据:
        历史数据:实际采集到的数据,50Bytes
            天数 X 每秒钟处理的数据量X 24 X 3600 X 50
        历史趋势数据:每小时计算出来的最大值、最小值、平均值和统计,128Bytes
            天数 X 监控项 X 24 X 128
        事件数据:130Bytes
            天数 X 86400 X 130
对于被监控主机较多的场景,比如5000台,每台主机的有40个监控指标,那么一共就有20万个指标了,在这种场景下,监控的频率不宜太频繁,对于某些重要指标可以频率较快(1分钟一次),而某些指标就可以定义的慢一些(30分钟一次)。
zabbix配置思路:
Host group ==> Hosts ==> Applications ==> Items ==> Triggers ==> Events ==> Actions ==> User groups ==> Users ==> Medias
    graph,screen
    依赖关系:
        Host ==> Item ==> Trigger ==> Action ==> Notice,Command
 
安装zabbix:
使用yum安装zabbix-server;zabbix-server-mysql;zabbix-get;zabbix;zabbix-web;zabbix-web-mysql;zabbix-agent;zabbix-sender
zabbix server、zabbix web和zabbix server mysql这三个角色可以不用定义在一台主机上面,可以分开来自己跑自己的业务。
安装数据库
# yum install -y mariadb mariadb-server mariadb-devel
安装并测试nginx与PHP
# yum install -y nginx
# yum install php-fpm php-common php-devel php-mysqlnd php-mbstring php-mcrypt
使用编译安装:
    同时安装server和agent,并支持将数据放入mysql数据中,可使用类似如下配置命令:
    ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssl2
    仅安装server,并支持将数据放入mysql数据中,可使用如下配置命令:
    ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl
    仅安装proxy,并支持将数据放入mysql数据中,可使用如下配置命令:
    ./configure --prefix=/usr --enable-proxy --ith-net-snmp --with-mysql --with-ssh2
    仅安装agent,可使用类似如下命令:
    ./configure --enable-agent
    而后编译安装zabbix即可:
    # make && make install
另外还需要安装web服务器(nginx/apache),mysql以及php,之后创建zabbix用户和zabbix数据库,并且授权zabbix用户。
 
启动zabbix:
安装完zabbix-web之后,在/usr/share/zabbix目录下就会生成web页面所需要的的所有的php文件,将这些文件复制到nginx的网页目录下,就可以打开zabbix的设置页面了。在安装完zabbix-web-mysql之后,会在/usr/share/doc/zabbix-server-mysql-3.4.13中生成一个create.sql.gz的文件,使用gzip -d解压之后,产生一个sql文件,这个就是web数据库的初始数据库,需要导入进新安装的数据库中。
# mysql zabbix < create.sql
当然也可以使用mysql里面是source命令,那样的话可以看到导入结果是不是失败。
mysql> source /usr/share/doc/zabbix-server-mysql-3.4.13/create.sql        
配置文件:/etc/zabbix/zabbix_server.conf
这里对部分配置文件中的内容做一下解释:
StartPollers:server中启动对poller动作做准备的进程数,0~1000,默认5个。poller可以一次性启动多个进程同时收集数据,这一项用来定义进程数,对于cpu性能较高的主机可以多启动几个。
StartIPMIPollers:基于IPMI做的poller。
StartPollersUnreachable:探测主机是否在线的时候使用。
StartTrappers:捕获agent主动发的数据的进程数。
    trapper直译为陷阱,类似"捕获"数据。在zabbix监控数据的时候,在主机收到从来没有监控过的指标发来的数据的时候,监控主机会进行捕获。
StartPingers:
StartDiscovers:自动发现。设置特定条件,比如IP地址段并且监听agent端口,如果发现符合条件的主机,会自动完成后续操作,比如加入监控组、添加模板等。
StartHTTPPollers:请求页面并且监控响应时长
StartTimers:计时器进程
JavaGateway:
JavaGatewayPort:
StartJavaPollers:
StartVMwareCollectors:zabbix可以直接通过VMware上的hypervisor监控虚拟机的状态
VMwareFrequency:
VMwareCacheSize:
SNMPTrapperFile:Trapper信息保存位置
StartCNMPTrapper:
ListenIP:监听地址,默认0.0.0.0
HousekeepingFrequency:执行Housekeeping的频率
    housekeeper主要是清除超出设定时间之外的数据库中的数据的。
MaxHousekeeperDelete:最多删除多少个Housekeeper信息
SenderFrenquency:没有发送出去的警报的发送频率。有些警报会因为媒介的问题发送不出去,比如邮件或者短信等,而这个指标就是重试频率。
CacheSize:缓存打小
CacheUpdateFrequence:
StartDBSyncers:
HistoryCacheSize:
TrendCacheSize:
HistoryTextCacheSize:
ValueCacheSize:
Timeout:
TrapperTimeout:
UnreachablePeriod:
UnreachableDelay:
UnavailableDelay:
AlertScriptsPath:内部报警脚本位置
ExtenalScripts:外部报警脚本位置
FpingLocation:
Fping6Location:
SSHKeyLocation:如果执行脚本的过程中会用到ssh,此为ssh密钥位置
LowSlowQueries:
TmpDir:
StartProxyPollers:
ProxyConfigFrequency:后面的就都是和proxy相关的
ProxyDataFrequency:
AllowRoot:
最后一步,修改php.ini的时区以及部分参数:
# vim /usr/local/php/lib/php.ini
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
date.timezone = Asia/Shanghai
接下来就可以启动zabbix了:
# systemctl start zabbix-server
可以看到进程有一大堆,都是上面可以进行调整与定义的:
# ps aux | grep zabbix
zabbix      924  0.0  0.1 1587564 1752 ?        S    15:31   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix      995  0.0  0.1 1587564 1792 ?        S    15:32   0:00 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.006351 sec, idle 60 sec]
zabbix      996  0.0  0.0 1587564  960 ?        S    15:32   0:00 /usr/sbin/zabbix_server: alerter #1 started
zabbix      997  0.0  0.0 1587564  960 ?        S    15:32   0:00 /usr/sbin/zabbix_server: alerter #2 started
zabbix      998  0.0  0.0 1587564  960 ?        S    15:32   0:00 /usr/sbin/zabbix_server: alerter #3 started
zabbix      999  0.0  0.1 1587836 1612 ?        S    15:32   0:00 /usr/sbin/zabbix_server: housekeeper [deleted 0 hist/trends, 0 items/triggers, 0 events, 0 sessions, 0 alarms, 0 audit items in 0.001305 sec, idle for 1 hour(s)]
zabbix     1000  0.0  0.2 1587712 2180 ?        S    15:32   0:00 /usr/sbin/zabbix_server: timer #1 [processed 1 triggers, 0 events in 0.000352 sec, 0 maintenances in 0.000853 sec, idle 30 sec]
zabbix     1001  0.0  0.1 1587564 1376 ?        S    15:32   0:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000662 sec, idle 5 sec]
zabbix     1002  0.0  0.2 1691932 2748 ?        S    15:32   0:00 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000425 sec, idle 60 sec]
zabbix     1003  0.0  0.2 1587628 2324 ?        S    15:32   0:00 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000002 sec, idle 1 sec]
zabbix     1004  0.0  0.2 1587628 2332 ?        S    15:32   0:00 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000003 sec, idle 1 sec]
zabbix     1005  0.0  0.2 1587628 2328 ?        S    15:32   0:00 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000003 sec, idle 1 sec]
zabbix     1006  0.0  0.2 1587628 2332 ?        S    15:32   0:00 /usr/sbin/zabbix_server: history syncer #4 [synced 1 items in 0.000700 sec, idle 1 sec]
zabbix     1007  0.0  0.1 1587564 1736 ?        S    15:32   0:00 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000467 sec, idle 3 sec]
zabbix     1008  0.0  0.1 1587564 1736 ?        S    15:32   0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000002 sec, idle 5 sec]
zabbix     1009  0.0  0.1 1587564 1152 ?        S    15:32   0:00 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000003 sec, idle 1 sec]
zabbix     1010  0.0  0.1 1587564 1156 ?        S    15:32   0:00 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000001 sec, idle 5 sec]
zabbix     1011  0.0  0.1 1587564 1156 ?        S    15:32   0:00 /usr/sbin/zabbix_server: vmware collector #2 [updated 0, removed 0 VMware services in 0.000001 sec, idle 5 sec]
zabbix     1012  0.0  0.1 1587564 1372 ?        S    15:32   0:00 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000292 sec, idle 5 sec]
zabbix     1013  0.0  0.3 1694552 3180 ?        S    15:32   0:00 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix     1014  0.0  0.3 1694552 3180 ?        S    15:32   0:00 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix     1015  0.0  0.4 1694652 4096 ?        S    15:32   0:00 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix     1016  0.0  0.3 1694568 3460 ?        S    15:32   0:00 /usr/sbin/zabbix_server: poller #4 [got 1 values in 0.000285 sec, idle 1 sec]
zabbix     1017  0.0  0.3 1694568 3632 ?        S    15:32   0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000001 sec, idle 1 sec]
zabbix     1018  0.0  0.3 1694744 3152 ?        S    15:32   0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     1019  0.0  0.1 1587564 1444 ?        S    15:32   0:00 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
zabbix     1020  0.0  0.2 1600588 2980 ?        S    15:32   0:00 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.308861 sec, waiting for connection]
zabbix     1021  0.0  0.2 1600588 2988 ?        S    15:32   0:00 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000221 sec, waiting for connection]
zabbix     1022  0.0  0.1 1587564 1440 ?        S    15:32   0:00 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
zabbix     1023  0.0  0.2 1600588 2984 ?        S    15:32   0:00 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000197 sec, waiting for connection]
zabbix     1024  0.0  0.1 1590172 1188 ?        S    15:32   0:00 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix     1025  0.0  0.1 1587564 1588 ?        S    15:32   0:01 /usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.007194 sec during 5.007195 sec]
zabbix     1026  0.0  0.1 1587564 1616 ?        S    15:32   0:00 /usr/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 6 values, idle 5.003677 sec during 5.003741 sec]
zabbix     1027  0.0  0.1 1587564 1032 ?        S    15:32   0:00 /usr/sbin/zabbix_server: preprocessing worker #1 started
zabbix     1028  0.0  0.1 1587564 1032 ?        S    15:32   0:00 /usr/sbin/zabbix_server: preprocessing worker #2 started
zabbix     1029  0.0  0.1 1587564 1032 ?        S    15:32   0:00 /usr/sbin/zabbix_server: preprocessing worker #3 started
zabbix     1208  0.0  0.1  82812  1260 ?        S    16:18   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix     1209  0.0  0.1  82812  1384 ?        S    16:18   0:02 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix     1210  0.0  0.2  82936  2440 ?        S    16:18   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix     1211  0.0  0.2  82936  2440 ?        S    16:18   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix     1212  0.0  0.2  82936  2440 ?        S    16:18   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix     1213  0.0  0.2  82940  2192 ?        S    16:18   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
zabbix     1214  0.0  0.2  82940  2200 ?        S    16:18   0:01 /usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]
 
zabbix页面:
Monitoring:监控页面
    Dashboard:面板,各常用监控项汇总页面
    Problems:问题页面
    Overview:
    Web:
    Lastest data:最近一次收集的数据
    Tiggers:查看触发器
    Graphs:通过图表的方式监控单个主机的单个指标
    Screens:通过图表的方式监控单个主机的多个指标
    Maps:
    Discovery:
    Services:
Inventory:资产清单
    Overview:
    Hosts:
Reports:显示监控报告
    Status of Zabbix:
    Availability report:
    Tiggers top 100:
    Audit:
    Action log:
    Notification:
Configuration:配置
    Host groups:
    Templates:一堆item的集合
    Hosts:
    Maintenance:增加维护时间,防止因服务器维护下线而引起的告警。配置完成之后会在action的condition中涉及关联。
    Actions:
    Event correlation:
    Discovery:
    Services:
Administrator:管理整个zabbix工作接口的工作特性
    General:通用配置
    Proxies:设置代理节点
    Authentication:认证机制
    User groups:管理用户组
    Users:管理用户
    Media types:管理通知方式(短信或者邮件)
    Scripts:管理脚本
    Queue:队列管理
 
在面板上可以看到,zabbix一开始是不会监控自己的(因为是使用yum安装的,如果使用编译安装可以加参数--enable-agent,就会默认安装agent了),这里就开启对本机的监控,通过agent的方式来进行监控。需要配置agent的配置文件:/etc/zabbix/zabbix_agentd.conf
对于里面的参数部分的解释如下:
Server:基于IP地址的授权机制,允许特定Server来此agent获取数据。
StartAgents:启用多少个agent进程
ServerActive:配合Sender,主动发送数据给Active Server。如果想启用这个需要自行定义监控机制,如果不定义则使用上面那个Server来进行被动监控。做Agent也做Server的主机不要去掉127.0.0.1,其他可以。
Hostname:自动发现的时候使用,一定要全局唯一。
# egrep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,172.16.0.50
ServerActive=127.0.0.1,172.16.0.50
Hostname=Node01
然后就可以启动zabbix_agent了:
# systemctl start zabbix-agent
可以看到10050和10051都处于监听状态:
# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1365/nginx: master  
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      2140/zabbix_agentd  
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      1622/zabbix_server  
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2174/php-fpm: maste         
tcp6       0      0 :::10050                :::*                    LISTEN      2140/zabbix_agentd  
tcp6       0      0 :::10051                :::*                    LISTEN      1622/zabbix_server  
tcp6       0      0 :::3306                 :::*                    LISTEN      1577/mysqld  
zabbix会用到的几个端口是80(httpd/nginx);9000(php);3306(mysql);10050(zabbix_server);10051(zabbix_agent),如果都起来了,就正常了。 
接下来通过http://localhost/zabbix.php可以打开初始化页面,之后完成基本配置就可以打开页面了。
 
启动zabbix agent:
yum安装zabbix-agent和zabbix-sender即可。
之后编辑配置文件:
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.0.50
ServerActive=172.16.0.50
Hostname=node02
之后就可以启动zabbix agent了:
# systemctl start zabbix_agent
    debug方式:
    # vim /etc/zabbix/zabbix_agentd.conf
    DebugLevel=4        //改成4
    # systemctl restart zabbix_agent
    日志会更加详细
 
手动方式添加agent主机:
打开zabbix首页,在configuration里面的hosts里面添加新增的agent
添加主机里面有几个子项
Host:主机信息
    Host name:必须保持唯一,一般使用IP地址,如果使用DNS名称的话,一定要和agent的配置文件中的hostname保持一致
    Visible name:一般使用DNS地址
    Groups:自己定义主机组,一个主机可以加入多个组
    Agent interfaces:一般使用IP地址和端口,默认10050
    SNMP interfaces:若agent启用SNMP,可以添加
    JMX interaces:与SNMP类似,一般是监控java的
    IPMI interfaces:与SNMP类似,一般是在windows上
    Description:描述
    Monitored by proxy:是否要代理,在配置完proxy就可以在这里选择了
    Enable:是否启用
Templates:template主要包含item,其他的就还有application、trigger、graph、action。可以使用各种模板,也可以自己定义items而不使用模板。使用link将模板套用至主机,unlink表示清除模板,unlike and clear表示清除模板和数据。
    监控项可以选择自带的模板,也可以自己设置监控项item。下面就对item进行一下学习:
    监控项(item):用于监控一个特定对象上的一个特定指标,并负载针对其收集相关的监控数据。每一个item都有相应的类型,所以在创建的时候需要针对不同的数据指定不同的类型,目前有zabbix agent(passive)(被动接收请求之后发送数据)、zabbix agent(active)(主动发送数据)、simple check、SNMPv1 agent、SNMPv2 agent、SNMPv3 agent、SNMP trap、zabbix internal、zabbix trapper、zabbix aggregate、external check、database monitor、IPMI agent、SSH agent、telnet agent、JMX agent、Calculated。每一个item都有一个专用的item key,要求在全局保持唯一,zabbix服务器在与被监控端通信时就使用相应的协议或机制去询问被监控端这个key值,被监控端则调用此key对应的监控脚本获取数据并返回给服务器端。zabbix有一些默认的key,用户也可以自定义key值。
    定义获取数据的方式,取值的数据类型,获取数据的间隔,历史数据的保存时长,趋势数据的保存时间,监控key的分组等。
        查看方法:
        # mysql -uzabbix -pzabbix
        mysql> use zabbix;
        mysql> select * from items\G
        获取到key值之后,如果agent也支持这个key,可以通过key值再来获取对应所监控的数据:
        # zabbix_get -s 172.16.0.50 -k "system.cpu.load"
        0.000000
    key的自定义可以使用"0-9a-zA-Z_-.",且可以支持接收参数,举例:system.cpu.load[<cpu>,<mode>]。
    含义参考:知识文档-Zabbix监控系统中内置的监控参数(Key)详解
        create item:
            name:监控项名称
            type:上面提到的类型
            key:key值,类型要和上面的type对应
            host interface:主机端口,IP:10050
            type of information:信息类型,整型、浮点等
            units:单位,bps(可以定义流量),对于次数,可以定义为空,比如intr中断次数
            update interval:采样时间间隔,频率越快,需要的空间越大
            custom intervals:自定义监控时间。interval:50s表示时间间隔50秒,period:1-7,00:00-24:00表示周一到周七的零点到二十四点。
            history storage period:历史数据存放天数,会影响数据库的存储空间
            trend storage period:历史趋势数据存放的天数
            show value:展示数据的模式,默认原始数据
                有些监控项所采集到的数据,比如流量、cpu中断次数等,肯定是一直增长的,现在的版本会采取默认用当前时刻减去前一时刻的方式记录这个数据。
            new application
            applications
            populates host inventory field:资产清单相关
            description:描述
            enable:是否启用
        监控项(item)可以在graph中展示出来,graph可以使用默认的,也可以进行创建。
        create graph:
            name:图形的名称
            width:宽度,适用于预览模式、饼图和分离型饼图
            height:高度
            graph type:图标类型(线条、区域、饼图、分离型饼图)
            show legend:展示线条对应的名称
            show working time:是否高亮显示工作时间的数据,工作时间白色背景,非工作时间是灰色背景
            show triggers:展示指标,饼图是无法显示的
            percentile line(left):百分比取值,左侧
            percentile line(right):百分比取值,右侧
            Y axis MIN value:Y坐标的最小值。如果是想看某个值以上的趋势,可以用这个
                calculated:计算出来的值作为最小值
                fixed:固定最小值
                item:该item最后一次采集的数值作为最小值
            Y axis MAX value:Y坐标的最大值。如果是想看某个值以下的趋势,可以用这个
            item:监控指标以及一些格式、参数的设置
    触发器(trigger):item仅用来收集数据的,而触发器可以为item采集来的数据定义阈值。zabbix server在收集到items的新数据时,就会对item的当前采样值进行判断,即与trigger的表达式进行比较,如果符合表达式,则会使状态变成PROBLEM状态。触发器表达式高度灵活,可以创建出非常复杂的测试条件。
    {<server>:<key>.<function>(<parameter>)}<operator><constant>
        server:主机名称
        key:主机上关系的相应监控项的key
        function:评估采集到的数据是否在合理范围内时所使用的函数,目前所支持的函数有avg(最近几次的平均值)、count(指定时间间隔内的数值统计)、change(最近获取到的值与前一次的差值,返回布尔值,1为变化,0位不变化)、date(返回当前日期)、dayofweek(返回星期数)、delta(返回指定时间/次数内最大值与最小值之差)、diff(比较最后一次采样和前一次采样是否不同)、iregexp(用忽略大小写的正则表达式进行模式匹配)、regexp(检查最后一次采样的数据是否能被指定的模式所匹配)、last(最近几次)、max(最近几次的最大值)、min(最近几次的最小值)、nodata(无数据)、now(返回自Unix元年到现在的秒数,时间戳)、prev(倒数第二个采样值)、str(从最后一次的采样中查找此处指定的字符串,返回布尔值,1表示有,0表示无)、strlen(最后一次采集的字符串长度)、sum(指定指定次数采样的数据之和)等
        parameter:函数参数;大多数数值函数可以接受秒数为其参数,前面加#则表示最近几次的数值。avg、count、last、min和max还支持第二个参数,用于完成时间限定,例如max(1h,7d)将返回一周之前的最大值。
        operator(操作符):
            比较函数,大于>、小于<、等于=、不等于#
            运算,加+、减-、乘*、除/
            逻辑运算,与&,或|
        constant:某个值
    举例:{node02:system.cpu.load[all,avg1].last(0)}>3
    触发器应该定义依赖关系,可以避免很多连环的告警,比如一台汇聚交换机故障,则下面的接入交换机都无法连接,如果不定义依赖关系,则会收到非常多告警,浪费资源。
    触发器等级,用来标识事件的严重性:
        not classified:未知
        information:信息
        warning:警告
        average:故障
        high:严重
        disaster:灾难
        create trigger:
            name:名称,可以使用宏
            serverity:安全级别
            expression:表达式。可以使用Expression constructor来创建表达式
            OK event generation:
            PROBLEM event generation mode:选择multiple的话,在每次产生故障的时候都会对应再次产生事件,适合一些如果故障没解决就一直告警的场景中
            OK event closes:故障解决就关闭事件
            tags:
            Allow manual close:支持手动关闭
            URL:可以在trigger中看到这个URL,可以在报警信息中添加
            Description:描述
            Enable:是否启用
        Dependencies:依赖的组件,比如监控Nginx服务,如果Nginx服务挂了,那么访问首页的返回值、响应时间等信息就都可以一并移除了,减少重复警报浪费的资源。
    触发器创建完成之后,再回到graph中就可以看到一条trigger的线。
    测试CPU中断可以使用hping,这是一个DDOS的模拟工具,可以一瞬间发很多个包出去。
        # yum install -y hping3
        # hping 172.16.0.50 --faster
    媒介(media):
    有了触发器之后,zabbix就会根据不同的触发器做出相应的告警,要想管理员收到告警的内容,则需要配置媒介。在administrator中的media type可以选择email、jabber或者sms。
    邮件(email)
        name:媒介名称
        type:类型
        SMTP server:邮件服务器。一般是公司内部邮件服务器名称或者三方邮件服务器名称。测试可以使用localhost
        SMTP server port:邮件服务器端口,一般是25
        SMTP helo:
        SMTP email:发件人邮箱
        connection security:安全性
        authentication:认证
        Enable:是否启用
    创建一个用户来关联邮件。在administrator中的user选择新建:
        create user:
            alias:别名
            name:用户名
            surname:显示名称
            groups:所属用户组
            password:密码
            password(once again):确认密码
            language:语言
            theme:
            auto-login:自动登入
            auto-logout:自动登出
            refresh:刷新时间
            rows per page:一页多少行
            URL:
        添加完用户,可以点上面的media,可以设置邮件发送的细节:
            type:具体的媒介
            send to:收件人
            when active:活跃时间
            use if severity:发送邮件的级别
            enable:是否启用
            permissions:设置权限。权限的设置是在用户组中进行设置的,用户只需要加入用户组,即可有相应的权限。
    动作(action)
    用户配置完成之后就该配置告警了,action中有send message和remote command,可以指定多步操作自行操作,比如先执行脚本,再发送警报等。在configuration里面选择actions。
    触发条件,一般是事件:
        Trigger events:OK ==> PROBLEM
        Discovery events:zabbix的network discovery工作时发现主机
            Services Up, Service Down, Host Discovered, Host lost, Host Up, Host Down, Service discovered, Service Lost
        Low level discovery
        Auto registration event:主动模式的agent注册时产生的事件
        Internal events:Item变成不再支持,或Trigger变成未知状态
    动作可以配置send message和command
    配置send message:
        1.定义好media
        2.定义好用户
        3.配置要发送的信息
    配置remote command:
        使用remote command的话可以解决一些小问题,比如不小心把服务器给kill掉了,或者因为内存不足把服务器给kill掉,等等情况,可以使用这个让zabbix自己对服务进行一些简单的操作(重启、启动)。但是要注意如下的几点:
        1.zabbix_agentd.conf中开启EnableRemoteCommands=1和LogRemoteCommand=1
        2.agent上visudo中的Defaults requiretty给注释掉
        3.给zabbix定义sudo规则,zabbix ALL=(ALL) ALL,生产环境建议自己定义命令
        4.Script:Alert Script:
            放置于特定的目录下,AlertScriptsPath=/usr/lib/zabbix/alertscripts,在zabbix_server.conf中进行配置。
            脚本中可以使用$1, $2, $3来调用action中的邮件收件人, Default Subject, Default Message
        5.不支持active模式的agent
        6.不支持代理模式
        7.命令长度不超过255个字节
        8.支持使用宏
        9.不关心命令是否执行成功,仅执行命令
        action:
            name:名称
            conditions:指定触发条件、与或非
            new condition:添加触发条件
            enable:是否启用
        operations:出现问题时采取的动作
            default operation step duration:处理的时间段,该时间内问题如果没有解决,则会进行告警升级,在operations中设置
            default subject:标题,可以支持宏
            default message:正文
            pause operations while in maintenance:维护期间暂停
            operations:告警升级的具体配置信息
                steps:阶段
                step duration:阶段的时间
                operation type:操作类型
                    send message:
                        send to user groups:发送给用户组
                        send to user:发送给用户
                        send only to:发送信息的方式
                        default message:上面定义的正文信息
                    remote command:
                        target list:目的列表
                        type:发送类型
                        execute on:server远程执行还是agent收到指示后运行
                        commands:需要执行的命令,需要使用sudo的方式书写命令
                    conditions:发送条件,如果不设置则沿用action里面的条件
        recovery operations:故障恢复时候发送邮件
            default subject:标题
            default message:正文
            operations:
        acknowledgement operations:
            default subject:标题
            default message:正文
            operations:
IPMI:windows用的
Macros:宏,可以理解为变量,一次定义,多次引用
    定义宏的地方,只对这一台主机生效
Host inventory:将主机加入资产清单,就会在inventory里面显示
Encryption:加密
 
Discovery方式添加agent:
如果每一台主机都是用手动方式添加的话,工作量会很大,这个时候如果配置discovery方式添加,就会方便很多。discovery可以自动扫描局域网中的被监控服务器,然后自动将被监控服务器添加进入特定的服务器组中,之后再套用特定的template,简单高效而且正确率高。
 
Auto_registrion方式添加agent:
agent主动加入监控
 
Low level discovery方式添加agent:
这种方式会支持主动发现,但是发现的主机不会直接套模板进行监控。
 
zabbix可视化:
zabbix的可视化包括四个,graph、screen、slide shows、map。
    graph:
    默认每个item都有自己的graph,只有需要将多个item定义在一个图形里面,才需要自定义graph。自定义图形的方式在上面有。
    screen:
    屏幕用于集中展示多个数据源的相关信息,就是一个图表,可以指定行数和列数来在每个格子中指定要展示的内容。
宏(macros):
宏是一种变量,书面化的解释是根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。zabbix有很多内置的宏,在官方文档manual中的macros中有定义。也可以自行定义宏。宏的名称只能使用大写字母、数字和下划线。
    两类:
        内置:{MACRO_NAME}
        自定义:{$MACRO_NAME}
    三个级别使用:
        Global, Template, Host(优先级Host最高,Global最低)
        宏可以使用item key和description、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制和SNMP协议中的相关信息中等。全局宏在Administration -> General -> Macros中定义,主机或者模板级别的宏在编辑相应Host或模板的属性即可。
    举例:
        定义:{$INBOUND_OK}=>100
        调用:{xxx.last(#1)}<{$INBOUND_OK},等同于{xxx.last(#1)}<100
    好处,修改变量就比修改规则容易多了。
模板(Template):
模板是一些列配置的集合,可以方便的部署在某监控对象上并且支持重复应用。包括items、triggers、graphs、applications、screens、web。web还支持嵌套,支持从其他的模板上面继承规则。在configuration中的template选项中可以进行定义。
User Parameters:
zabbix内置了许多item key,User Parameters实现用户自定义item key,实现特有数据指标监控。必须定义在agent端。重启之后,新的User Parameter生效。
    语法格式:UserParameter=<key>,<command>
    例子:
    UserParameter=Nginx.active[*], /usr/bin/curl -s “http://$1:$2/status” | awk '/^Active/ {print $NF}’
    需要注意的是,如果前面的key指明可以接收参数,则如果使用单个$表示接收到的参数,命令中如果再需要使用$调用,则需要使用多个$,以免被错误的调用。比如print $$3。
举例:监控内存:
# vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/            //可以看到在conf文件里面有定义了自定义脚本的位置
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf        //还有其他的方式
# vim /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
# systemctl restart zabbix-agent
这样在Hosts中的key选项中手动输入os.memory.used(后面的select可能没有),单位自己注意改一下(这里已经是MB了,所以填MB),然后点add就完成了。测试的话可以用zabbix_get命令来测试一下。
监控数据库中的select等使用次数:
UserParameter=Mysql.dml[*],/usr/local/mysql/bin/mysql -h$1 -u$2 -p$3 -e ‘SHOW GLOBAL STATUS’ | awk ‘/Com_$4\>/{print $$2}'
# zabbix_get -s X.X.X.X -p 10050 -k "Mysql.dml[X.X.X.X,root,password,select]"
在添加监控项也需要使用Mysql.dml[X.X.X.X,root,password,select],而不是直接写个key就完了。
zabbix自动发现(Discovery和Low Level Discovery):
基于http、icmp、ssh、ldap、tcp、snmp、telnet、zabbix_agent扫描指定网络内的主机,一旦被发现,接下来就由action来确定接下来的操作方式。可以实现自动添加主机、链接至模板、添加监控项、分组、定义触发器等功能。
    Discovery:
        Services Up, Service Down, Host Discovered, Host lost, Host Up, Host Down, Service discovered, Service Lost
    Actions:
        Sending notifications、Adding/Removing hosts、Enabling/Disabling hosts、Adding hosts to a group、Removing hosts from a group、Linking hosts to/Unlink from a template、Executing remote scripts
    网络发现:接口添加
        the services detected。以主机为默认单位,给对应服务创建接口。一台主机所创建的接口和收集到的数据,如果存在多个,则最先的那个会被认为是默认接口,后面的会被认为是额外接口,而不会被认定为不同的主机。但是不同的主机就算收集到了相同的数据,也会被认定是两台主机的默认接口,不会被认为是同一台。 
    Phase 1.Discovery:
    # vim /etc/zabbix/zabbix_agentd.conf
    Server=172.16.0.50
    ServerActive=172.16.0.50
    Hostnam=node03
    EnableRemoteCommands=1
    之后在configuration里面的Discovery中可以看到有一个create rule选项,来创建一个discovery规则。
    create rule:
        Name:规则名称
        Discovery by proxy:通过代理发现
        IP range:发现的IP范围
        Delay:扫描时间
        Check:基于发现的方式,常用ICMP ping
        Device uniqueness criteria:设备唯一的标准
        Enable:是否启用
    定义完成之后,在monitoring中的discovery中就可以看到(如果有符合条件的主机)被扫描的主机进来了。
    Phase 2.Action:
    event source要改成discovery
    action:基本配置和触发条件
        name:名称
        type of calculation:计算方式,包括与或非
        conditions:触发条件。
            一般会指定discovery rule和discovery status,rule中定义了IP地址,status选择up,这样就可以发现在范围内并且已经是up状态的被监控主机
        new condition:添加条件
            可以选择ip/host metadata/proxy。host metadata是一个唯一字符串,用来标识当前主机,用以主机的注册。
            # vim /etc/zabbix/zabbix_agentd.conf
            HostMetadata=string
        enable:是否启用
    operations:添加对应规则,比如添加主机组、链接模板
        default subject:
        default message:
        operations:操作
    Auto_registation:
    建议与discovery分开使用,不要两个同时使用。
    # vim /etc/zabbix/zabbix_agentd.conf
    Server=172.16.0.50
    ServerActive=172.16.0.50            //主要需要定义的东西
    ListenIP=172.16.0.101                //本机IP地址
    Hostnam=node05
    HostMetadata=string                //用来标识当前主机
    HostMetadataItem=item key        //一般使用system.uname
    Action:
    event source要改成auto_registation,其他步骤和discovery类似。
    LLD:Low Level Discovery
    LLD会自动发现特定变量的名称,zabbix会根据LLD返回json值来定义item,防止事先定义item出现因为不确定因素原因导致item无效的情况出现。
    在configuration中的template中,可以点到某个template中,之后进入discovery rule中来定义discovery rule:
    create discovery rule:
        Discovery rule:
            name:名称
            type:类型
            key:item的key
            update interval:更新周期
            custom intervals:执行发现的时间段
            keep lost resources priod:
            description:描述
            enable:是否启用
        Filters:设置过滤条件
    设置完过滤条件之后,就可以在hosts里面设置引用变量名了,比如filter中设置为{#IFNAME}之后,可以在hosts中的key中设置net.if.in[#IFNAME,bytes]。这里面的IFNAME就是通过LLD获取到的值。
Web监控:
可以使用zabbix来监控web站点的可用性。通过创建一个web方案(scenarios)来实现。方案包括一个或多个HTTP请求或"步骤",通过web监控可以获取整个web方案中所有步骤的平均下载速度、失败的步骤号以及失败的报错信息,还可以按需获取某个步骤的下载速度、回应时间以及回应状态码,还可以检测获取到HTML页面中是否包含预设的自负,还可以实现登陆和页面点击。监控级别根据需求的不同来区分。
创建web方案的前提需要创建一个适用的应用(application),可以在"Hosts"或"Template"中创建应用,如果在"Templates"上创建应用,则需要将此"Templates"链接至要监控其web的主机上方能使用此"Application"。
这里以Hosts中创建web监控为例,点击进入Hosts然后点web
    create web scenarios:
        Scenario:
            Name:名称
            Application:选择所属的application
            New Application:添加application
            Update interval:更新周期,单位是秒
            Attempts:
            Agent:代理(浏览器)
            Http proxy:HTTP代理
            Variables:用户自定义的宏
            Headers:
            Enable:是否启用
        Steps:创建步骤
            Name:名称
            URL:地址
            Query field:
            Post type:
            Post fields:
            Variables:
            Headers:
            Follow redirects:
            Retrieve only headers:
            Timeout:超时时间
            Required string:期望返回的字符串
            Required status codes:期望返回的代码
        Authentication:
            HTTP authentication:
            SSL verify peer:
            SSL verify host:
            SSL certificate file:
            SSL key file:
            SSL key password:
完成之后可以看到监控项已经出来了:
 
zabbix分布式监控:
zabbix在大型环境中提供两种解决方案(主要是在跨公网环境中):proxy和node
proxy用于本区域数据收集,并将数据发送给server。
node提供完整的zabbix server用以建立分布式监控中的层级。
Server-node-Client:
    Child的Database会在Master的Database中周期性读取配置并保存在自己的database中,这样就获取了item等信息了。
    解决host过多时Server面临的性能瓶颈的问题:使用多个instance;每个instance相对独立。
    支持热插拔,node和server的连接随时可以断开,但是不影响node正常运行。
    node定时给server发送configuration、history、event。
    server定时给node发送configuration
    所有配置变更只能在node节点操作,不能在server操作
    树状结构,node又可以是其他node的server
proxy:
    proxy不会向server同步configuration,只会接收
    proxy的数据库定时会将数据传送给server,proxy本地数据库只保存最近没有发送的数据
    proxy模式部署:
        # yum install -y zabbix-proxy
        # yum install -y mariadb mariadb-level mariadb-server
        # mysql
        mysql> create database zabbix_proxy character set 'utf8';
        mysql> grant all on zabbix_proxy.* to zabbix@'172.16.%.%' identified by 'zabbix';
        mysql> flush privileges;
        # rpm -ql zabbix-proxy-mysql
        /usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql.gz        //找到默认数据库
        # gzip -d /usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql.gz
        # mysql zabbix_proxy < /usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql        //几乎与zabbix-server是一样的
        # egrep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
        Server=172.16.0.50
        Hostname=proxy01
        DBHost=172.16.0.6
        DBName=zabbix_proxy
        DBUser=zabbix
        DBPassword=zabbix
        HeartbeatFrequency=60        //探测服务器活性的周期
        ConfigFrequency=600            //获取配置的周期
        DataSenderFrequency=10        //发送数据的周期
    在administrator中的proxies中可以创建proxy
    create proxy:
        Proxy:
            proxy name:proxy的名字
            proxy mode:proxy的模式,有主动和被动
            hosts:proxy所代理的主机
            description:描述
        Encryption:是否加密
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!