Zabbix:

功能:

  • 1.监控硬件、软件、业务指标; 【此功能又可称为:采样】

  • 2.告警;

  • 3.将数据存储下来;

  • 4.展示;

【有云道:我们决不允许任何未经监控的系统服务甚至是业务上线;监控系统是帮助我们了解系统运行状态的、指标非常重要的组件】

  • 监控系统:

    • 硬件:主机、路由器、交换机、UPS、I/O系统(专业的存储)……;

    • 软件:操作系统,网络,以及各种各样的应用程序;

    • 异常状态:DB down掉了、从服务器无法使用了或者所有的复制功能无法继续进行、服务器不可达了;

    • 非常关键的事件:磁盘利用率快接近满值了(还有5%就满了)、主从复制结构中从服务器落后主服务器(即有大量的从服务器延迟导致);数据节点down;

    • CPU的100%利用率:

    • 趋势数据(包括时间):通过图形方式(趋势曲线)进行展示

      持续多长时间监控磁盘是否占满;内存是否占满;什么时候发生事件是峰值还是持续性;多次采样;多长时间发生一次,是否周期性发生;例如一天一次,或每周日晚上;发生是事件是否导致其它事件发生例如I/O出问题
  • 采样:主机:系统指标、业务指标(QPS,TPS),告警

  • 周期性地数据指标采样 –> 存储 –> 展示

  • 报警:分析采样得到的数据是否依然在合理区间;

spacer.gif

  • 监控系统工作的两个关键点: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/ipmi

  • zabbix的组件:

    Zabbix Server:负责接收agent发送的报告信息的核心组件(最关键的组成部分,使用C语言所研发,工作性能非常棒),所有配置、统计数据及操作数据均由其组织进行;Database Storage:专用于存储所有配置信息(使用mysql或pdsql),以及由zabbix收集的数据;Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;Proxy:可选组件,常用于分布监控环境中代理Server收集部分被监控端的监控数据并统一发往Server端;Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Porxy端;
  • zabbix宏观架构图1: 
    spacer.gif

spacer.gif

  • zabbix 的宏观架构图2: 
    spacer.gif

spacer.gif

  • 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:拓扑图

spacer.gif

spacer.gif

spacer.gif 
spacer.gif

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 使用;

图像14.png

安装服务端: 
# 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.sql 
    mysql -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-server

  • zabbix-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()【获取当前时间】, ...

spacer.gif

{node2.mageedu.com:system.cpu.switches.last(#3)}>100 【此主机中 CPU 检测 最近3次中有1次】 
spacer.gif

  • 媒介:定义告警方式的传输信息的通道;

    • (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 是否能连接到指定端口

spacer.gif

spacer.gif 
spacer.gif

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:全局

告警配置:

spacer.gif 
spacer.gif 
spacer.gif 
spacer.gif 
在被管理端:

第一步:开启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 开启调试级别

spacer.gif 
spacer.gif