Zabbix:
功能:
1.监控硬件、软件、业务指标; 【此功能又可称为:采样】
2.告警;
3.将数据存储下来;
4.展示;
【有云道:我们决不允许任何未经监控的系统服务甚至是业务上线;监控系统是帮助我们了解系统运行状态的、指标非常重要的组件】
监控系统:
硬件:主机、路由器、交换机、UPS、I/O系统(专业的存储)……;
软件:操作系统,网络,以及各种各样的应用程序;
异常状态:DB down掉了、从服务器无法使用了或者所有的复制功能无法继续进行、服务器不可达了;
非常关键的事件:磁盘利用率快接近满值了(还有5%就满了)、主从复制结构中从服务器落后主服务器(即有大量的从服务器延迟导致);数据节点down;
CPU的100%利用率:
趋势数据(包括时间):通过图形方式(趋势曲线)进行展示
持续多长时间监控磁盘是否占满;内存是否占满;什么时候发生事件是峰值还是持续性;多次采样;多长时间发生一次,是否周期性发生;例如一天一次,或每周日晚上;发生是事件是否导致其它事件发生例如I/O出问题
采样:主机:系统指标、业务指标(QPS,TPS),告警
周期性地数据指标采样 –> 存储 –> 展示
报警:分析采样得到的数据是否依然在合理区间;
监控系统工作的两个关键点:1.首先要有一个【网络传感器】,它能够帮我们在关键事件上或关键组件上获取数据指标,然后报告给监控系统端(NMS)。
监控系统端称为NMS(网络监控系统),被监控端称为agent;可分为无agent和有agent;无agent方式包括:ssh,snmp,telnet;基于web监控可使用curl命令;agent一般都是专业开发的;
传感器【agent】在系统当中有个专门的称呼,它是个安装在被监控系统上的组件,这个组件能监控多少指标取决于监控的开发和组件自己的能力.
agent 与监控端之间可以基于专有协议进行通信,agent是按需开发的,所有功能比ssh做起来要简单很多,同时功能也要完善和强大很多。
监控通道:基于ssh协议(无agent时),SNMP:Simple Network Management Protocol(简单网络管理协议),基于telnet,基于agent进行监控。基于IPMI接口。
SNMP:
Simple Network Management Protocol(简单网络管理协议),管理和监控数据,但默认不支持存储数据。
SNMP是一个非常古老的协议,几乎市面上所有的网络组件(也包括操作系统)都原生自带了SNMP的agent接口;因此只要配置了SNMP的监控端,它就能够到所有支持snmp 的agent的主机节点上实现数据采集,这个agent就属于监控在每一个监控主机之上的一个进程,这个进程可以获取几乎所有能够被snmp纳入进来的监控指标,而几乎所有关心的硬软件指标,尤其是系统性指标,snmp都能够执行监控操作,也就意味着snmp可以采集本地主机上几乎所有你所关注的指标数据:比如像CPU利用率,网络带宽使用状态,网卡数据报文传输速率等等一切都可以采集;
snmp:最通用的监控系统;只要配置了snmp的监控端,就能监控所有设备;
v1 老版本:没有认证功能,通信过程没有加密;很多网络设备仅支持v1版本;
v2c 社区版本:有身份识别机制,基于预密钥系统,加密方式不成熟;
v3: 包括了安全认证,通信过程加密;
以LINUX 来说明,SNMP的监控端就是一个命令行工具,它可以基于snmp协议向被监控端的进程发出请求;
它的命令有:
snmpget:获取某个数据指标;
snmpgetnext:获取一个数据后会连续自动获取下一个数据;
snmpwalk:像散步一样踩;数据轮询读取;
snmptrap:捕捉;被监控端(agent)能够自动发送“关键型事件“ (比如再不进行处理就要挂了的、磁盘快满了等)给SNMP监控端;
MIB 库描述许多指标,用倒置的树状结构描述,每一个被监控对象都有一个全局唯一标识;
唯一标识称为:OID 监控对象ID;
snmp支持管理端发送写操作,在被管理端执行;但不会采样后,把数据存储下来,没有周期地数据指标采样,不会绘图;
rrd【round-robin database】:轮询数据库
IPMI:intel公司生产的专用接口;
也是监控工具:
cacti(利用snmp周期性的存取数据;绘图工具,rrd监控,但不能报警;绘制完后存取在rrd(轮询数据库)中);
nagios(只记录过去到目前为止的几个数据,实现关注的业务指标的数据定义合理区间,在合理区间则不问,不在则;报警功能异常强大。但无法存取数据,无法绘图)
ganglia:强大的数据整合功能,分布式展示;
被监控设备通用支持snmp监控,有些可安装agent监控,如果是类unix系统也可使用ssh接口进行监控,有些硬件还支持智慧平台管理接口IPMI(在主版上的跟网卡接
口相似,现代专用服务器都有这样的接口,不同公司生产的可能不太一样)
之前都是通过将cacti 和nagios 一并起来使用。
监控系统存储的数据:时间序列数据(根据时间的走势产生的),zabbix是存取在mysql或pdsql这样的开源系统中的kp;
存储数据的数据库:
关系型数据库
轮询数据库(rrd)
时间序列数据库(非关系型数据库,NoSQL中的一种)
zabbix (自行升级报警机制,强大的运维联动工具)
LTS(长期支持维护的版本):2.2, 3.0 【建立安装的版本】
Zabbix特性:
存储于数据库(默认为两种数据库):
mysql
pgsql支持告警升级:
script 【自定义脚本】
notification 【通知】graph 【图表】
map 【网络拓扑图】
screen 【将多个graph(图表)整合在一个屏幕上展示】
slide show 【支持使用幻灯片的形式展示】
自定义检测机制:UserParamenter 【用户参数】
自定义指定时间间隔 【每隔多长时间监控一次】
数据采样:snmp,ssh/telnet,agent,lpml,jmx【java的管理接口】
实时绘图方案:展示功能的一种表现
告警功能:
数据存储:
支持使用模板:好处在于,如果监控200个linux主机,里面有50个是webserver,但监控的指标应该都是相同的,可以做一个模板,每个主机进行套用,就可以使用模板机制完成快速监控和配置。
支持网络自动发现机制:如果网络中新增了200台主机,不需要手动添加这200台主机进行监控,而是添加进来之后能够自动纳入到zabbix的监控体系中去;zabbix通过扫描一个网段中的主机,如果发现了某个主机,就自动加进来进行监控,还可以自动把模板机制套上去来完成所有数据指标的监控。
支持API做自己展示的接口:
启动几个监控子进程取决于到底监控的指标有多少个。
分布式监控:
proxy:server值监控一部分指标,代理也收集数据,会在某一时刻同一发送给zabbix service。
sever <—-> proxy <—-> agent/ssh/ipmizabbix的组件:
Zabbix Server:负责接收agent发送的报告信息的核心组件(最关键的组成部分,使用C语言所研发,工作性能非常棒),所有配置、统计数据及操作数据均由其组织进行;Database Storage:专用于存储所有配置信息(使用mysql或pdsql),以及由zabbix收集的数据;Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;Proxy:可选组件,常用于分布监控环境中代理Server收集部分被监控端的监控数据并统一发往Server端;Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Porxy端;
zabbix宏观架构图1:
zabbix 的宏观架构图2:
zabbix程序的组件构成:
zabbix-server::服务端守护进程;zabbix-database:数据库;zabbix web GUI:web界面;zabbix-agent:agent端守护进程; 【做分布式监控才会用到】zabbix-proxy:代理服务器,可选组件;zabbix-get:命令行工具,手动测试向agent发起数据采集收发;zabbix-sender:命令行工具,运行于agent端,手动向server端发送数据;zabbix-java-geteway:JMX接口用到的组件,zabbix2.0引入,java网关类似于zabbix_agentd,监控java或jam虚拟机的相关程序;只能是单单向,由zabbix server从JMX来取数据;JMX: JVM
zabbix的核心术语:
host --> host group 【主机是要监控的网络设备;可能是服务器或者 路由器 或 交换机】 item:key[arg1, arg2], command 【监控项,key+采集到数据】 key:【定义采集命令的别名;配置时可查看官方文档】 trigger:【触发器,表达式;】 host: cpu.cs[#1] > 10000 event(状态变更):trigger events,discovery events;【事件有多种;】 action:condition,operation;【针对特定事件的处理动作】 alert:【报警】 media:【媒介;传递报警信息】 templation:【模板,逻辑或者抽象的组件;】 application:【应用,即同类别的多个item构成的组;】 监控项(item):【对于zabbix监控来说,我们真正每一个监控的数据指标,在zabbix中我们用 item 进行描述,而每个item都由一个“key”进行标识;】 hosts (host groups):items screens:屏幕 maps:拓扑图
zabbix server端的子进程poller通用的,基于agent实现采集;httppoller执行基于http协议监控数据采集;还有很多poller,例如ipmipoller、snmppoller、jmxpoller;housekeeper进程负责清理过期数据;例如每5分钟检查一次是否有过期数据;pinger进程探测主机是否在线;nodewatcher进程监控节点是否在线;alerter报警器,执行报警时可分级escalator;可实现自动发现discoverer;db_config_syncer与代理通信时发送数据配置同步;db_data_syncer与代理通信时发送数据同步;watchdog进程是用来监控每个子进程是否OK;
zabbix的进程:
阈(yu)值:一个目标应该存在的合理区间和非合理区间的界限。比如定义阈值为100,大于100则为非合理区间,小于等于100则为合理区间。
zabbix的安装和使用
Database: mysql, pgsql 【依赖关系】
选用:mariadb
zabbix安装:
依赖关系:
要求部署apache、php;
其中php要提供的模块:
gb 为php gd的扩展,必须支持--with-png-dir, --with-jpeg-dir, --with-freetype-dir;bcmath 为php-bcmath模块,--enable-bcmath;ctype 为php-ctype模块,--enable-ctype;libXML 为php-xml或php5-dom模块;xmlreader 为php-xmlreader模块;xmlwriter 为php-xmlwriter模块;session 为php-session模块;sockets 为php-net-socket模块,--enable-sockets;mbstring 为多字节字符串模块,php-mbstring模块,--enable-mbstring;gettext 为php-gettext模块,--with-gettext;ibm_db2 为如果zabbix后端数据库是IBM DB2数据库所提供的模块;mysql 为如果zabbix后端数据库是MYSQL数据库所提供的模块;oci8 为如果zabbix后端数据库是Oracle数据库所提供的模块;pgsql 为如果zabbix后端数据库是PostgreSQL数据库所提供的模块;sqlite3 为如果zabbix后端数据库是SQLite数据库所提供的模块;zabbix服务器依赖软件:OpenIPMI 为支持IPMI所依赖到的软件;libssh2 为支持SSH所依赖到的软件;fping 为支持ICMP所依赖到的软件;libcurl 为支持web监控所依赖到的软件;libiksemel 为支持Jabber即时通信协议所依赖到的软件;net-snmp 为支持SNMP所依赖到的软件;
安装方式:
Source code(源代码):不建议使用;
预编译好的二进制程序包:
rpm:
epel
zabbix repository 【直接指向zabbix的官方源即可】
deb 【Debian软件包格式的文件扩展名】
教室yum源baseurl=ftp://172.16.0.1/pub/Sources/7.x86_64/zabbix/x86_64/ 官方yum源: [epel]name=zabbix epelbaseurl=http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/gpgcheck=0
2.2,2.4,3.0 【3.0中server.service 由server-mysql 包提供;】
安装zabbix 【此处以3.0为例】
[root@localhost ~]# vim /etc/yum.repos.d/zabbix.repo------------------------------------------------------------------------------------[zabbix]name=zabbix.repobaseurl=ftp://172.18.0.1/pub/Sources/7.x86_64/zabbix/x86_64/gpgcheck=0 [root@localhost ~]# yum -y install zabbix-server-mysql 【此处仅为演示是否这个包就是server包】[root@localhost yum.repos.d]# rpm -q zabbix-server-mysqlzabbix-server-mysql-3.0.2-1.el7.x86_64 [root@localhost ~]# yum install mariadb-server[root@localhost ~]# vim /etc/my.cnf-------------------------------------------------------------------------------------[mysqld_safe]...skip_name_relsolve=on 【跳过名称解析】innodb_file_per_table=on 【启动innodb】 [root@localhost ~]# systemctl start mariadb.service[root@localhost ~]# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:808 *:* LISTEN 0 50 *:3306 *:* [root@localhost ~]# mysqlMariaDB [(none)]> create database zabbix charset 'utf8'; 【创建一个zabbix 数据库,并把它的字符集设为'utf8'】MariaDB [(none)]> gtant all on zabbix.* to zbxuser@'127.0.0.1' identified by 'zbxpass'; 【创建一个用户名为zbxuser,密码为zbxpass的用户能够通过本机远程访问zabbix 数据库】MariaDB [(none)]> gtant all on zabbix.* to zbxuser@'172.18.%.%' identified by 'zbxpass'; 【创键17.18网段的所有主机均可远程访问】MariaDB [(none)]> select host,user,password from mysql.user; 【查看当前数据库中用户账号及密码】 [root@localhost ~]# yum install zabbix-server-mysql zabbix-get zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender 【安装所有要用到的程序包】 [root@localhost ~]# ls /usr/lib/systemd/system | grep zabbix 【查找/usr/lib/systemd/system 目录下关于zabbix的文件】zabbix-agent.servicezabbix-server.service [root@localhost ~]# vim /usr/lib/systemd/system/zabbix-server.service 【查看这个文件】...[Service]Environment="CONFFILE=/etc/zabbix/zabbix_server.conf" 【可以看到服务是由/etc/zabbix/zabbix_server.conf 这个文件提供的】EnvironmentFile=-/etc/sysconfig/zabbix-server [root@localhost ~]# rpm -ql zabbix-server-mysql/usr/share/doc/zabbix-server-mysql-3.0.2/README/usr/share/doc/zabbix-server-mysql-3.0.2/create.sql.gz 【此sql脚本 用于初始化zabbix server数据库】 [root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.2/[root@localhost zabbix-server-mysql-3.0.2]# lsAUTHORS ChangeLog COPYING create.sql.gz NEWS README [root@localhost zabbix-server-mysql-3.0.2]# gzip -d create.sql.gz 【展开解压压缩包】[root@localhost zabbix-server-mysql-3.0.2]# lsAUTHORS ChangeLog COPYING create.sql NEWS README [root@localhost zabbix-server-mysql-3.0.2]# ll -h-rw-r--r-- 1 root root 3.0M 4月 20 22:36 create.sql [root@localhost zabbix-server-mysql-3.0.2]# mysql -h127.0.0.1 -uzbxuser -p zabbix < create.sql 【以 zbxuser 用户身份导入数据库 zabbix 指明给 create sql】Enter password: 【密码:zbxpass】 [root@localhost zabbix]# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak [root@localhost zabbix]# vim /etc/zabbix/zabbix_server.conf-----------------------------------------------------------------------------DBHost=127.0.0.1DBName=zabbixDBUser=zbxuserDBPassword=zbxpassDBSocket=/var/lib/mysql/mysql.sock [root@localhost ~]# systemctl start zabbix-server.service 【启动zabbix服务】 #启动 web GUI[root@localhost zabbix]# rpm -q php-mysql 【确保此包安装上】php-mysql-5.4.16-36.el7_1.x86_64 [root@localhost zabbix]# vim /etc/httpd/conf.d/zabbix.conf ---------------------------------------------------------------------------------<Directory "/usr/share/zabbix/conf"> ... php_value date.timezone Asia/Shanghai 【更改此处时区定为 亚洲/上海 】 </IfModule></Directory> [root@localhost zabbix]# systemctl start httpd.service 【启动httpd 服务】 访问http://172.18.77.84/zabbix/setup.php 首次安装zabbix 使用;
安装服务端:
# yum install zabbix-server-mysql zabbix-get
安装web GUI:
# yum install zabbix-web zabbix-web-mysql
安装agent端:
# yum install zabbix-agent zabbix-sender
zabbix server数据库初始化:
2.x:三个sql脚本;
3.x: 一个sql脚本;
create.sqlmysql -h127.0.0.1 -uzbxuser -p zabbix < create.sql
启动zabbix-server进程:
/usr/lib/systemd/system/zabbix-server.service
配置文件:/etc/zabbix/zabbix_server.conf
指令有四类:
############ GENERAL PARAMETERS ################# 【通用指令】 ############ ADVANCED PARAMETERS ################ 【高级指令;用于定义子进程数量、超时时长以及缓存大小】 ####### LOADABLE MODULES ####### 【加载的模块】 ####### TLS-RELATED PARAMETERS ####### 【跟TLS 相关的参数】
通用参数:
ListenPort=10051 【监听的端口】 SourceIP= 【指定那个zabbix_serverIP 为源ip】 LogType=file 【日志将使用自我独立格式进行】 LogFile=/var/log/zabbix/zabbix_server.log 【定义日志文件路径】 LogFileSize=0 【0 表示不滚动,但是这样是不合理的;如果此处设为 1024 则表示1G之后开始滚动】 PidFile=/var/run/zabbix/zabbix_server.pid 【服务端PID文件的文件路径】 ----------------------上面为无需更改选项-------------------------------------- 下面为手动更改选项--------------- DBHost=localhost 【数据库服务器地址】 DBName=zabbix 【数据库名称】 DBUser=zbxuser 【数据库用户;千万不能设为管理员账号】 DBPassword=zbxpass 【数据库用户密码;真正生产使用需要使用复杂密码】 DBSocket=/var/lib/mysql/mysql.sock 【指明DBSocket 的位置(做本地通信的);此处为默认rpm包安装所在位置;生产使用时如果database 和 zabbix 不在同一主机上,这个就没有影响】
启动服务:systemctl start zabbix-server.service
注意:CentOS 7.0和7.1需要升级trousers程序包版本到0.3.13-1 以上.; 【否则无法启动 zabbix-server服务】
配置zabbix-web
配置php的时区指定:
(1) php.ini 【编辑此文件】
(2) /etc/httpd/conf.d/zabbix.conf 【rpm安装的可以编辑此文件,它是zabbix安装时主动提供的片段化的配置文件,有个专门的指令用来定义只为zabbix应用程序所开启的配置而不至于全局生效】
访问URL:http://server/zabbix
安装后配置文件:/etc/zabbix/web/zabbix.conf.php
登录:
用户名:admin/zabbix——密码
添加一台被监控主机:
host group 【首先定义好主机组】–> host 【添加被监控主机】–> appliction【建立应用】 –> item【阈值】 –> graph (simple, customed)【简单,自定义的】 –> triggers【定义触发器】 –> action 【完成报警操作】
回顾:
监控系统:采集、存储(历史数据:采用某个时间点获取到的数据;不会保持太长时间,最多90天;和趋势数据:对于过去的数据基于某种平度求平均值,一般是基于每天来做的;可以保持1年、2年、5年之久)、可视化、报警(发送通知)
采样:ssh/telnet, IPMI, agent, snmp, …
存储:
历史数据、趋势数据
存储于何处:
(1)rrd
(2)sql:MySQL, PGSQL,Oracle, SQLite, DB2
(3)时间序列数据库
(4)NoSQL展示:应用程序(web,比如运行再php上)
告警:通过邮件、短信、微信等方式发送报警信息
zabbix的术语:
主机、主机组; 监控项:key, command 应用(监控项组):application Graph: 屏幕(graph组):screen Trigger:表达式 Action: Operations remote command send notification escalation:报警升级 Maps ……
程序组成部分:
zabbix-server, zabbix-agent, zabbix-get, zabbix-sender, zabbix-database(MySQL), zabbix-web 【zabbix前端接口】
zabbix-proxy(分布式监控会用到)
安装配置监控系统:
zabbix-database: 【可独立主机实现】
CentOS 6:mysql-server
CentOS 7:mariadb-serverzabbix-server:【独立的主机、组件】
/etc/zabbix/zabbix-server.conf 【指明连接哪个数据库、服务器等】zabbix-web:
依赖于:httpd.php(extensions:扩展)
安装被监控的系统:
zabbix监控接口:
(1)ssh:ssh service 【ssh服务】
(2)telnet: telnet service 【配置telnet服务】
(3)IPMI:有这样的硬件接口
(4)SNMP:snmp agent 【通用的接口机制】
(5)agent:OS, 【安装agent,启动agent进程才可以实现监控操作】
zabbix(2)
agent端配置:
···
# yum install zabbix-agent zabbix-sender/etc/zabbix/zabbix_agentd.conf
···
zabbix agent:
############ GENERAL PARAMETERS ########## EnableRemoteCommands=0 【是否允许执行远程命令;0 为禁用,设为1则启用】 ##### Passive checks related(被动检测相关的配置:agent等待server过来请求数据) 【被动监控仅需配置此处】 Server=127.0.0.1 【授权执行数据采集监控操作的zabbix server主机的地址】 【以逗号分隔授权给哪些zabbix-server或zabbix-proxy过来采集数据的服务器地址列表;】 ListenPort=10050 ListenIP=0.0.0.0 【即监听所有的IP地址】 StartAgents=3 【启动agent进程数:此处为3】 【真正启动多少取决于并发允许有多少个过来对当前主机上需要监控item 采集数据的线程有多少个,比如有50个线程,则agent需要启动进程数也要50个】 ##### Active checks related(主动检测相关的配置:agent主动向server发送监控数据) *ServerActive=IP[:Port] 【以逗号分隔的、由当前agent主动发送监控数据过去的server端;可以指明端口】【主动监控仅需配置处 1】 ServerActive=127.0.0.1 【发送监控数据至哪些地址;地址列表,逗号分隔的IP[:PORT];】【主动监控仅需配置处 2】 Hostname=Zabbix server 【在zabbix主机上的主机名,用于报告给zabbix server,因此,需惟一;】 HostnameItem=system.hostname 【使用其他方式检测出来的相关信息给服务器端进行发送,指明一个Item(key)来获取本机的主机名然后发送给服务端】 HostMetadata= 【指明一个源数据】 RefreshActiveChecks=120 【刷新时间间隔;此处为120秒刷新一次】 BufferSend=5 【发送时使用多少个缓冲】 BufferSize=100 【发送时使用多大缓冲】 #systemctl start zabbix-agent.service
例如:配置zabbix被监控端
使用代理方式:]# yum -y install zabbix-agent zabbix-sender]# cd /etc/zabbix/]# cp /etc/zabbix/zabbix_agentd.conf{,.bak} 配置被监控agent端只基于被动模式监控,所以只需配置server地址即可;]# vim /etc/zabbix/zabbix_agentd.confServer=172.18.11.113 服务端ip,为授权项;可写多个ip地址授权列表,用逗号分隔; ]# systemctl start zabbix-agent.service]# systemctl status zabbix-agent.service]# ss -tnl 确保10050端口监听;]# iptables -vnL 确保防火墙没有阻断10050端口; ]# vmstat 【查看cpu状态】]# vmstat 1 【持续查看cpu状态1秒看一次;】
监控接口 –> Host (设定好相关服务)
host group –> host –> application –> item –> trigger –> action (condition, operation)
快速添加主机:
(1)主机发现:host discover
(2)发现事件:
lld: low level discover
快速监控主机:
、 link
主机:
监控主机的接口(只有4种):【不要基于多种接口进行监控】
Agent interfaces 【建议首选】
SNMP interfaces
JMX interfaces
IPMI interfaces
在主机上定义item的方式
(1)zabbix内建:预定义;内建key有n种分类
type:agent【agent端是被动的】,agent(active:主动的),snmp v1,ssh, ……(2)用户自定义:在客户端进行定义,在服务端进行添加;
item:key+parameters
key(2种):
3.0官方文档:https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_agent
采集到的信息的种类:
numeric:数值,无符号,浮点数;charactor:字符串数据;log 日志数据;text 文本数据;
数据的类型:
boolean:布尔型;octal:八进制数据;decimal:十进制数据;hexadecimal:十六进制数据;
store value:
AS is:数据不做任何处理;采样的是什么就记录什么;Delta(Simple change):本次采样数据减去前一次采样数据;Delta(speed per second):本次采样数据减去前一次采样数据,而后除以采样间隔时长;
trigger:触发器
逻辑表达式;通过逻辑表达式评估通过item获取到的数据是否位于合理区间;item采集到的数据会直接交由trigger评估;
状态:OK(正常状态–>较老的版本中,其为FALSE), PROBLEM(非正常状态–>较老的版本中,其为TRUE)
OK –> PROBLEM: event 【false】
PROBLEM –> OK: event 【true】通常会用到函数:
nodata()【未采集到的数据】,now()【获取当前时间】, ...
{node2.mageedu.com:system.cpu.switches.last(#3)}>100 【此主机中 CPU 检测 最近3次中有1次】
媒介:定义告警方式的传输信息的通道;
(1)Email:邮件;
tom@mageedu.com
obama@mageedu.com(2)jabber:即时通信通用框架;基于msn、sq、Yahoo Messenger、google的GTalk的等通信软件;
(3)SMS:短信(北美使用);
(4)script:自定义脚本;必须放置在指定路径下,可调用短信网关、微信网关;自定义脚本文件存放路径:AlertScriptsPath=/usr/lib/zabbix/alertscripts
(5)Ez Texting(USA,Canada):商业;
Meida Type类型:
默认3种:
安全连接:发邮件时是否使用安全的连接;
starttls:使用smtp协议时,自动触发ssl;
ssl/tls:需要额外配置ssl,明确指明使用smtp协议时才会调用ssl;
如果使用的是互联网上的邮件服务器,基于认证的方式,填入注册的邮箱、密码即可;
例如:
]# ab -n 2000 -c 100 http://172.18.11.11/index.html
在被监控端测试,以便触发cpu上下文切换超过100阈值;
一次完整的(简单)监控配置:
host group –> host –> [application] –> item(必须属于application) –>trigger(Events) –> (Media Type,User Group,User) –> action (conditions,operation(send message,remote script))依赖关系:
表达式格式:
<server>:<key>.<function>(<paramter>)<operator><constant> key[args] min(3m)>100
events:
事件的种类:
event source: trigger, discovery, auto registration, internal内部事件:某item从normal转换为unsupported、lld发现规则从normal转换为unsupported,某trigger从normal转换为unsupported等等 ;触发器事件:发现事件:Service UP, Service Down, Host Up, Host Down, Service Discovered, Service List, Host Discovered, Host Lost自动注册事件:active模式agent主动与server通信,zabbix server使用agent的ip地址与端口来添加一个被监控主机;
例如:监听建立 TCP 是否能连接到指定端口
net.tcp.port[<ip>,port] 检查是否能建立 TCP 连接到指定端口。返回 0 - 不能连接;1 - 可以连接// net.tcp.port[172.18.77.84,80]
注意:定义完成后要重启 httpd 服务才可生效
告警:
send message(发送信息):
Media Types:传递消息的通道;
script:用来定义信息通道,完成信息传递的脚本;
(1)脚本放置路径:在服务器端/etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
(2)zabbix会向脚本传递三个参数:
$1:经由此信道发送的信息的接收目标;可以是邮箱地址,电话号码; $2:信息的主题,subject; $3:传递信息的内容;
Users:利用指定信道接收消息;
Users Groups:用户的逻辑容器;remote command(执行远程命令):
功能:
重启服务:
通过IPMI接口重启服务器;
任何自定义脚本可完成的功能:清理磁盘空间,虚拟机实例迁移等等;
remote command中的脚本是远程执行的脚本,而sent message中media type里的脚本是用来发信息的脚本;
在被管理主机上zabbix_agentd进程是以zabbix用户身份运行的,所以要执行远程命令时,会用到管理权限,所以zabbix基于sudo的方式执行命令;
前提:
在agent需要完成的配置:
(1)zabbix用户有所需要管理权限(基于sudo授权);
编辑/etc/suudoers ]# visudo 1) Defaults requiretty,修改为 # Defaults requiretty,表示不需要控制终端就可以运行sudo 命令; 2) Defaults requiretty,修改为 # Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端;
(2)agent进程要允许执行远程命令;/etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
可执行的命令的类型(5种方式):
IPMI ssh:需要提供账号、密码,一般不使用; telnet Custom Script:自定义脚本 sudo /usr/bin/systemctl restart httpd.service Global:全局
告警配置:
在被管理端:
第一步:开启zabbix用户的sudo管理权限:]# visudo-------------------------------------------------------------## Same thing without a password# %wheel ALL=(ALL) NOPASSWD: ALLzabbix ALL=(ALL) NOPASSWD: ALL 【手动添加】 表示zabbix用户拥有所有权限,无需密码就可执行命令; 其中显示:#includedir /etc/sudoers.d表示也可自己创建一个配置文件,在/etc/sudoers.d/目录下: #Defaults requiretty 把此项注释掉,否则远程执行命令失败; 第二步:开启zabbix server执行远程命令]# cd /etc/zabbix/]# vim /etc/zabbix/zabbix_agentd.conf---------------------------------------------------------------------------EnableRemoteCommands=1 允许远程命令在本机执行LogRemoteCommands=1 启用远程命名执行的记录日志【可选可不选】 ]# systemctl restart zabbix-agent.service]# usermod -s /bin/bash zabbix]# mkdir /var/lib/zabbix
告警升级:
(1)remote command
(2)send message
在zabbix server端编辑发送邮件的脚本:
例如:]# vim /usr/lib/zabbix/alertscripts/sendmail.sh#!/bin/bash# contact=$1subject=$2body=$3 echo "$body" | mail -s "$subject" "$contact" ]# chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh ]# /usr/lib/zabbix/alertscripts/sendmail.sh root@localhost "test" "test body"手动测试脚本 ]# mail 在web页面设置:]# vim /etc/zabbix/zabbix_server.confDebugLevel=5 开启调试级别
转载于:https://blog.51cto.com/wqiang/1782961