zoukankan      html  css  js  c++  java
  • 学习zabbix(三)

    前言:

    学习zabbix之前,不得不了解的是SNMP协议

    SNMP:简单网络管理协议(Simple Network Protocol)

    Snmp由两部分组成,监控端和被监控端

    监控模式:

    主动模式:NMSagent采集数据,监控端到被监控端采集数据

    被动模式:agentNMS报告数据,被监控端到监控端报告数据

    这便意味着监控端和被监控端工作在不同套接字上

    一旦被监控端发出特殊指令时,监控端会发送指令修改被监控端状态


    SNMP组件:

    MIBmanagement  information  base(管理信息库)

    监控端能够向被监控发送请求采集数据,被监控通过MIB

    MIB定义监控到到被监控的双方采集规范

    SMIMIB表示机制

    SNMP:协议本身,实现网络管理

     

    NMS可发起的操作:

    Get:获取数据

    GetNext:获取更多参数

    Set:设定

    Trap:陷阱操作

     

    SNMP基于UDP工作

    NMS监听端口:161

    Agent监听端口:162

     

    SNMP是没有数据存储的定义,通常完成数据采集后人为的判断数据是否存在问题!

     

    这里不得不提到cactinagios

    Cacti类似于zabbox本身能够通过脚本,对每一个监控端通过snmp协议发起数据采集请求。数据采集完成后会存储在cacti的数据库当中,cacti是由php开发的,它能够使用php强大的功能完成数据展示,这便意味着他能够从数据库中提取出数据,即时绘制出数据走势图。Cacti也可以让用户定义一个关注指标的阈值而后,一旦数据超出合理范围也能完成报警操作!但是,他的报警能力较弱!

    Cacti本身可以完成强大的数据采集展示,但是他的报警功能薄弱。比如:cacti监控一台nginx服务,当nginx出现故障时,一般情况,会重启nginx服务,当仍然不能正常工作时,监控会发起软状态和硬状态的状态探测切换,当第一次采集时发现异常,监控不会立即判断为故障,当采集超过几次后,还是异常,则为硬状态,为了避免误判它会多次采样。而cacti本身不具备报警功能,需要第三方插件实现,并且报警的功能不能非常及时,尤其是对状态转换的服务类应用,报警能力略显薄弱

     

    Nagios:强大的报警机制

    当关注的指标超过阈值后,从软状态转换硬状态后立即执行报警操作,支持多种多样报警,如:短信网关发短信,邮件发邮件,MSN窗口发信息,电子铃,闪光灯等等!由此可见Nagios报警是非常灵活的。

    Nagios的各组件依赖关系!

    但是nagios不太适合大型环境众多指标同时监控,主机如果有100台,它的工作还是客观的,如果一旦达到数百台,nagios效率低下,它不能完成分布式工作

    在早些,cactinagios同时工作是很常见的!而Zabblx便可以实现cactinagios的功能

     

    其他著名开源监控工具:zabbixzennosopennmscactinagiosicinga,ganglia

     

    监控功能的实现:agentsshSNMP

    SNMP协议版本在v1中是一款简单协议,在v1中没有认证功能,v2cNMS-à agent v1v2是基于UDP来实现,机制也相同!而v3v2,v1不同的是,v3实现认证加密和解密功能,但是在应用中v1使用是最多的。

     

    MIB:所有的可以被监控被管理的对象的集合,定义对象的一系列属性,每一个agetn端都有自己的MIB库,mib库中定义了很多指标来实现接口的数据交互

     

    MIB视图:MIB片段。SNMP是支持读写操作,对Mib库操作进行读写操作都可实现。我们可以限定MIB库的读操作任何人都可以实现,写操作再定义团体名。像这种能把mib库中的子集,通过MIB某一个团体相关联起来并定义其所能执行操作的机制就叫做MIB视图,这里可能需要查看下MIB树状结构!

     

    在众多开源软件监控工具中zabbix是专用的agent的监控工具

    监控的主机由:linux,windows,freebsd…..

    网络设备:snmp,ssh(并非所有)

     

    当了解了这些基础后,在开始看zabbix概述

    通常我们在监控时需要监控哪些?

    1,软件/设备

    设备:软件,路由器,交换机,i/o系统

    软件:操作系统本身(OS),网络,应用程序

    2,偶发性故障

    Down机,服务不可以,主机不可达

    3,严重事件

    主机性能数据

    4,趋势图

    时间序列数据

    5

      

    补充内容:

    cacti数据存储使用的是特殊数据库(rrd ),而zabbix支持mysql,pgssql(关系型数据库)

    RRDround   robin  database,环装数据库,所以他不会持久保存数据,一旦环走到尽头,便覆盖之前的数据从头开始。cacti一旦数据初始化完成后是不会自动增长的,当然,如果定义n个数据指标,产生n个环装数据,那也是不小的。而zabbix是插一条是一条,但是zabbix也是可以定义的,可以使用守护进程去清理数据。当然,也可以永久保存,

     CactiRRD是一个开源组件,cacti使用snmp收集数据,收集完成使用rrd保存数据,而rrd自己就有绘图能力。所有cacti无非就是将rrd中所关注的数据绘成图,在用php页面展示出来而已。由此可以cacti是一个很强大的集成工具。

      

    Zabbix分布式

    Zabbix完全开源,企业级监控,支持目前主流操作系统,Zabbix可监控10万设备,20万个指标(在对mysql切片优化后),可监控database,可监控web monitoring,web响应代码,响应时间等,可定义监控指标,可监控日志,文件内容等等!

    中心zabbix不做任何操作,让每一个代理收集监控各项指标,假设zabbix6000条指标,每个代理监控2000个指标,每个代理将监控数据保存在代理监控主机数据库。而后中心zabbix定期从代理取数据,当取完数据后,便可以删除。代理zabbix只需保存定期时间的数据,定期传输即可。主zabbix压力必定减少!

     报警支持,短信,邮件,执行命令等!

    Zabbix架构

    Zabbix组件:

    Zabbix-server:是c语言研发

    监控端OSzabbix-agent,同样c研发

    Zabbix-databasemysql,pgsql(postgreSQL),oracledb2sqlite

    Zabbix-web GUI:展示工具,设置工具

    Zabbix-proxy:分布式专用组件,只应用于较大场景

     #############################################################################################

     

     

    Zabbix进程描述:

    Poller:此进程可能会被启动多个,应对更多请求

    Httppoller:监控web页面专用poller

    Discoverer:发现进程 占用资源较大

    Alerter:警报工作

    Housekeeper:指明数据保存时间,清理数据

    Watchdog:监控主机进程是否关闭,并激活

    Escalator:报警生成器

    Timer:时间,计时器

    Nodewatchel:监控节点

     

    Pingerping操作监控节点是否在线的独特机制

    Db_config_syncer:同步配置,分布式场景

    Db_data_syncer: 同步时间,分布式场景

      

    安装和部署:

    在安装zabbix之前,需要部署database,在部署lap平台

    Hardware Examples官方说明:

    20台机器:PII 350MHZ+256MB+sqlite

    500台:AMD Athion3200+2GB+mysql innodb

    小于1000台:Intel Core 6300 +4GB+RAUD 10 Mysql innodb or postgressql

    小于10000台:xeon 2xcpu+8GB +Fast RAID 10 Mysql innodb or postgressql

     Zabbix产生的数据主要由四部分组成:

    1,  配置数据

    2,  历史数据:50bytes

    3,  历史趋势数据 :128bytes

    4,  事件数据:130bytes

    Zabbix支持众多数据库,一般而言预留多少存储数据,每一次的数据收集有 50字节,历史趋势数据128字节,事件数据130字节,假设5分钟收集一次,保存时间,相乘计算出存储数据的预留空间

     

    1,安装mysql

    下载mariadb-5.5.44.tar.gz

    [root@[node108] ~]# yum groupinstall "Development Tools" "Server Platform Development" –y

    [root@[node108] ~]#yum   -y  install   cmake

    [root@[node108] ~]# groupadd -r -g 306 mysql

    [root@[node108] ~]# useradd -r -g 306 -u 306 mysql

    [root@[node108] ~]# cd mariadb-5.5.44

    [root@[node108] ~]# tar xf mariadb-5.5.44.tar.gz

    [root@[node108] ~]# cd mariadb-5.5.44

    [root@[node108] ~]# cmake  

    -DCMAKE_INSTALL_PREFIX=/usr/local/Nmariadb-5.5.44

    -DMYSQL_DATADIR=/mydata/data

    -DSYSCONFDIR=/etc

    -DWITH_INNOBASE_STORAGE_ENGINE=1

    -DWITH_ARCHIVE_STORAGE_ENGINE=1

    -DWITH_BLACKHOLE_STORAGE_ENGINE=1

    -DWITH_READLINE=1

    -DWITH_SSL=system

    -DWITH_ZLIB=system

    -DWITH_LIBWRAP=0

    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock

    -DDEFAULT_CHARSET=utf8

    -DDEFAULT_COLLATION=utf8_general_ci

    [root@[node108] ~]# make

    [root@[node108] ~]# make install

    [root@[node108] ~]#mkdir  /mydata

    [root@[node108] mariadb-5.5.44]# cd /usr/local/ Nmariadb-5.5.44/

    [root@[node108] Nmariadb-5.5.44]# scripts/mysql_install_db --user=mysql --datadir=/mydata

    [root@[node108] Nmariadb-5.5.44]# cp support-files/my-large.cnf /etc/mysql/my.cnf

    [root@[node108] Nmariadb-5.5.44]# vim /etc/mysql/my.cnf

    [mysqld]里面添加如下

    datadir = /mydata/data   安装目录指定

    innodb_file_per_table = NO

    skip_name_resolve = NO     跳过名称解析的

    [root@[node108] Nmariadb-5.5.44]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

    [root@[node108] Nmariadb-5.5.44]# chmod +x /etc/rc.d/init.d/mysqld

    [root@[node108] Nmariadb-5.5.44]# chkconfig --add mysqld

    [root@[node108] Nmariadb-5.5.44]# chkconfig mysqld on        

    [root@[node108] Nmariadb-5.5.44]# service mysqld start

    Starting MySQL.......                                      [  OK  ]

    [root@[node108] Nmariadb-5.5.44]# ss -tlp |grep :mysql

    LISTEN     0      50                      *:mysql                    *:*        users:(("mysqld",43871,14))

    [root@[node108] Nmariadb-5.5.44]#

    root用户添加密码,并且删除用户

    [root@localhost mysql]# /usr/local/mysql/bin/mysql_secure_installation

    [root@[node108] profile.d]# vim /etc/profile.d/mysqld.sh

    export PATH=/usr/local/Nmariadb-5.5.44/bin/:$PATH

    [root@[node108] profile.d]# . /etc/profile.d/mysqld.sh

    [root@[node108] profile.d]# mysql

    Welcome to the MariaDB monitor.  Commands end with ; or g.

    Your MariaDB connection id is 3

    Server version: 5.5.44-MariaDB-log Source distribution

     

    Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

     

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

     

    创建数据库zabbix

    MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8;

    Query OK, 1 row affected (0.00 sec)

    创建zbuser用户,授权此用用户可以通过172.16.x.x访问zabbix库,密码zbuser

    请注意:这里由于是作用在一台主机,所有授权是localhost,如果不是同一个主机授权的可能是主机名

     

    MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbuser'@'172.16.%.%' IDENTIFIED BY 'zbuser';

    Query OK, 0 rows affected (0.01 sec)

     

    MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbuser'@'localhost' IDENTIFIED BY 'zbuser';

    Query OK, 0 rows affected (0.00 sec)

     

    MariaDB [(none)]> FLUSH PRIVILEGES;

    Query OK, 0 rows affected (0.00 sec)

     

    MariaDB [(none)]> q

    Bye

    [root@[node108] ~]#

    使用本机测试下授权

    [root@[node108] ~]# mysql -uzbuser -h172.16.249.22 -p

    Enter password:

    Welcome to the MariaDB monitor.  Commands end with ; or g.

    Your MariaDB connection id is 5

    Server version: 5.5.44-MariaDB-log Source distribution

     

    Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

     

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

     

    MariaDB [(none)]>q

    Bye

     

    2,下载zabbix安装

    指定官方yum源,www.zabbix.com

    Wget  http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

    下载zabbix-release-2.4-1.e16.noarch.rpm包,就会自动创建本地yum

    如果不装把链接也到repo中即可

     

    编译安装serveragent,并支持将数据放入mysql数据中,可使用类似如下配置命令:

    ./configure  --enable-server  ---enable-agent  --with-mysql   --enable-ipv6   --with-net-snmp   --with-libcurl   --with-ssh2

    如果仅安装server,并支持将数据库放入mysql数据库中,可使用类似如下配置命令:

    ./configure  --enable-server  --with-mysql    --with-net-snmp     --with-libcurl

    如果仅安装proxy,并支持将数据放入mysql数据库中,可使用类似如下配置命令:

    ./configure   --profix=/usr    --enable-proxy   --with-net-snmp   --with-mysql     --with-ssh2

    如果仅安装agent,可使用类似如下配置命令:

    ./configure  --enable-agent

    而后编译安装zabbix即可:

    #make

    #make install

     

     

     

    服务端安装:

    [root@[node108] zabbix-2.4.5]yum install zabbix-server-2.4.5-1.el6.x86_64.rpm zabbix-server-mysql-2.4.5-1.el6.x86_64.rpm  zabbix-get-2.4.5-1.el6.x86_64.rpm zabbix-2.4.5-1.el6.x86_64.rpm zabbix-web-2.4.5-1.el6.noarch.rpm zabbix-web-mysql-2.4.5-1.el6.noarch.rpm zabbix-agent-2.4.5-1.el6.x86_64.rpm zabbix-sender-2.4.5-1.el6.x86_64.rpm

     

     

    /etc/httpd/conf.d目录下由zabbix.conf文件,所以每次配置完成后必须重载httpd

    启动zabbix之前需要导入数据到mysql

    [root@[node108] zabbix]# cd  /usr/share/doc/zabbix-server-mysql-2.4.5/ create/

    [root@[node108] create]#ls

    data.sql  images.sql  schema.sql

    导入顺序从右到左

    [root@localhost create]# mysql zabbix -uroot < schema.sql

    [root@localhost create]# mysql zabbix -uroot < images.sql

    [root@localhost create]# mysql zabbix -uroot < data.sql

     

     

    配置文件:

    LogFileSize=0  日志滚动选项,0为不滚动

    默认为Debuglevel=3级别

    DBHost=localhost 指定数据库

    DBUser=zbuser        用户

    DBPassword=zbuser         密码

    DBSocket=/tmp/mysql.sock sock位置

    # StartPollers=5  进程启动5

    # StartDiscoverers=1启动发现

    # StartTimers=1 计时器进程

    # MaxHousekeeperDelete=500最多删除个数

    # StartDBSyncers=4报警

    # StartDBSyncers=4同步进程

    # HistoryCacheSize=8M历史数据缓存

    # TrendCacheSize=4M历史文本缓存

    AlertScriptsPath=/usr/lib/zabbix/alertscripts 报警脚本存放路径

    ExternalScripts=/usr/lib/zabbix/externalscripts外部脚本存放路径

    # SSHKeyLocation= ssh监控

    其他是proxy

    [root@localhost zabbix]# service zabbix-server start

    Starting Zabbix server:                                    [  OK  ]

    [root@localhost zabbix]# ss -tnl |grep :10051

    LISTEN     0      128                      :::10051                   :::*    

    LISTEN     0      128                       *:10051                    *:*    

    [root@localhost zabbix]#ss  -tnlp可以看到zabbix启动了很多进程

    在浏览器中输入ip地址/zabbix即可看到安装界面



    在下一步之前需要修改时区

    [root@localhost zabbix]# vim /etc/php.ini

    date.timezone = Asia/Shanghai

    Reloading httpd:

    [root@localhost zabbix]# service httpd restart

    Stopping httpd:                                            [  OK  ]

    Starting httpd:                                             [  OK  ]

    [root@localhost zabbix]#



    如果这里报错如下

    Error connecting to database: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

    su mysql用户下

    [root@localhost mysql]# su mysql

    bash-4.1$ ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

     

    而后下一步



    默认管理员账户密码:admin   zabbix

    zabbix监控自己,包已经安装过了

    [root@localhost mysql]# vim /etc/zabbix/zabbix_agentd.conf

    授权IP地址

    Server=127.0.0.1,172.16.249.22

    主动发送server   ip(如果监控的是自己,127.0.0.1是不可以去掉的)

    ServerActive=127.0.0.1,172.16.249.22

    自动联系,推送数据,这里的hostname必须全局唯一

    Hostname=Zabbix server

    [root@localhost mysql]# service zabbix-agent start

    Starting Zabbix agent:                                     [  OK  ]

    [root@localhost mysql]#

     

     

     

    添加一台主机监控

    安装以下包

    [root@PC1 zabbix-2.4.5]# yum install zabbix-2.4.5-1.el6.x86_64.rpm zabbix-agent-2.4.5-1.el6.x86_64.rpm zabbix-sender-2.4.5-1.el6.x86_64.rpm

    修改配置文件

    [root@PC1 zabbix-2.4.5]# cp /etc/zabbix/zabbix_agentd.conf{,.bak}

    [root@PC1 zabbix-2.4.5]# vim /etc/zabbix/zabbix_agentd.conf

    ServerActive=172.16.249.22  指向zabbix监控主机

    Hostname=PC1                           设置主机名

    Server=172.16.249.22              指向zabbix监控主机

    [root@PC1 zabbix-2.4.5]# service zabbix-agent start

    Starting Zabbix agent:                                     [  OK  ]

    [root@PC1 zabbix-2.4.5]#

     

    PS:如果这里有iptables,这里需要放行zabbix

    web_gui界面添加主机

    Templates:模板

    Macros:主机宏,一次修改多次有效的哟

    Host inventory:资产清单

      ###############################################################################################

    zabbbx-agent
    安装agent

    yum -y install zabbix-agent zabbix
    vim /etc/zabbix/zabbix_agentd.conf 
    Server=10.0.0.120
    

    添加UserParameter断

    vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=mysql_alive, mysqladmin ping|grep -c alive
    

    可使用zabbix_get -s 10.0.0.53 -k mysql_alive查看
    web页面创建主机组

    添加主机到主机组

    创建mysqlitems

    添加触发器

    graphs出图

    预览

    ##############################################################################################################3

    [root@zabbix ~]# /etc/init.d/postfix start
    [root@zabbix ~]# vim /etc/mail.rc 
    #######set mail
    set from=usertzc@163.com smtp=smtp.163.com
    set smtp-auth-user=usertzc smtp-auth-password=password smtp-auth=login
    [root@zabbix ~]# mail -s linuxea 734943463@qq.com < /etc/rc.local 
    

    测试脚本

    [root@zabbix alertscripts]# vim /usr/lib/zabbix/alertscripts/mail.sh
    #!/bin/sh
    MAIL_TITLE=$2
    MAIL_CON=$3
    echo "$MAIL_CON" | /bin/mail -s "$MAIL_TITLE" $1
    

    创建用户,管理---用户---创建用户


    媒介

    而后在动作中可执行命令和发送邮件,选择邮件即可(演示效果)

    模拟一次mysql挂掉

    ###################################################################################################33

    1.在client的httpd.conf中添加如下

    sudo vim /alidata/server/httpd/conf/httpd.conf
    <Location /server-status>
        SetHandler server-status
        Allow from 127.0.0.1
        Order deny,allow
        Deny from all
    </Location>
    ExtendedStatus On
    

    如果你有rewrite规则,则需要在.htaccess中加上一条,如下:

    RewriteCond %{REQUEST_URI} !server-status需要写在index.php之前
    sudo vim /alidata/www/jds.jince.com/.htaccess
    # ThinkPHP Rewrite规则
    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_URI} !server-status
       RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    

    #禁止显示目录列表
    Options -Indexes
    2,重加载apache配置
    Check uptime并重启apache

    sudo /etc/init.d/httpd configtest 无错误后
    sudo /etc/init.d/httpd graceful
    

    可以使用curl 127.0.0.1/server-status测试
    3,在zabbix-agent上创建目录和脚本

    sudo mkdir /etc/zabbix/scripts
    sudo vim /etc/zabbix/scripts/check_apache.sh
    

    check_apache.sh放入client的/etc/zabbix/scripts

      1 #! /bin/bash
      2 #
      3 # Name: zapache
      4 #
      5 # Checks Apache activity.
      6 #
      7 # Author: Alejandro Michavila
      8 # Modified for Scoreboard Values: Murat Koc, murat@profelis.com.tr
      9 # Modified for using also as external script: Murat Koc, murat@profelis.com.tr
     10 # Modified for outputting usage or ZBX_NOTSUPPORTED: Alejandro Michavila
     11 # Modified to do cacheing for performance, dmitry.frolov@gmail.com
     12 #
     13 # Version: 1.5
     14 #
     15  
     16 zapachever="1.5"
     17 rval=0
     18 value=""
     19 cache_seconds="30"
     20 [ "$TMPDIR" ] || TMPDIR=/tmp
     21 function usage()
     22 {
     23     echo "zapache version: $zapachever"
     24     echo "usage:"
     25     echo "  $0 [<url>] TotalAccesses                 - Check total accesses."
     26     echo "  $0 [<url>] TotalKBytes                   - Check total KBytes."
     27     echo "  $0 [<url>] CPULoad                       - Check CPU load."
     28     echo "  $0 [<url>] Uptime                        - Check uptime."
     29     echo "  $0 [<url>] ReqPerSec                     - Check requests per second."
     30     echo "  $0 [<url>] BytesPerSec                   - Check Bytes per second."
     31     echo "  $0 [<url>] BytesPerReq                   - Check Bytes per request."
     32     echo "  $0 [<url>] BusyWorkers                   - Check busy workers."
     33     echo "  $0 [<url>] IdleWorkers                   - Check idle workers."
     34     echo "  $0 [<url>] version                       - Version of this script."
     35     echo "  $0 [<url>] ping                          - Check if Apache is up."
     36     echo "  $0 [<url>] WaitingForConnection          - Check Waiting for Connection processess."
     37     echo "  $0 [<url>] StartingUp                    - Check Starting Up processess."
     38     echo "  $0 [<url>] ReadingRequest                - Check Reading Request processess."
     39     echo "  $0 [<url>] SendingReply                  - Check Sending Reply processess."
     40     echo "  $0 [<url>] KeepAlive                     - Check KeepAlive Processess."
     41     echo "  $0 [<url>] DNSLookup                     - Check DNSLookup Processess."
     42     echo "  $0 [<url>] ClosingConnection             - Check Closing Connection Processess."
     43     echo "  $0 [<url>] Logging                       - Check Logging Processess."
     44     echo "  $0 [<url>] GracefullyFinishing           - Check Gracefully Finishing Processess."
     45     echo "  $0 [<url>] IdleCleanupOfWorker           - Check Idle Cleanup of Worker Processess."
     46     echo "  $0 [<url>] OpenSlotWithNoCurrentProcess  - Check Open Slots with No Current Process."
     47 }
     48 
     49 ########
     50 # Main #
     51 ########
     52 
     53 if [[ $# ==  1 ]];then
     54     #Agent Mode
     55     STATUS_URL="http://localhost/server-status?auto"
     56     CASE_VALUE="$1"
     57 elif [[ $# == 2 ]];then
     58     #External Script Mode
     59     STATUS_URL="$1"
     60     case "$STATUS_URL" in
     61         http://*|https://*) ;;
     62         *) STATUS_URL="http://$STATUS_URL/server-status?auto";;
     63     esac
     64     CASE_VALUE="$2"
     65 else
     66     #No Parameter
     67     usage
     68     exit 0
     69 fi
     70 
     71 case "$CASE_VALUE" in
     72 'version')
     73     echo "$zapachever"
     74     exit 0;;
     75 esac
     76 
     77 cache_prefix="zapache-${STATUS_URL//[^a-zA-Z0-9_-]/_}"
     78 cache="$TMPDIR/$cache_prefix.cache"
     79 cache_timestamp_check="$TMPDIR/$cache_prefix.ts"
     80 # This assumes touch from coreutils
     81 touch -d "@$((`date +%s` - ($cache_seconds - 1)))" "$cache_timestamp_check"
     82 
     83 if [ "$cache" -ot "$cache_timestamp_check" ]; then
     84     curl="`which curl`"
     85     if [ "$curl" ]; then
     86         fetch_url_cmd="$curl --insecure --silent --location"
     87     else
     88         wget="`which wget`"
     89         if [ "$wget" ]; then
     90             fetch_url_cmd="$wget --no-check-certificate --quiet -O -"
     91         else
     92             echo "ZBX_NOTSUPPORTED"
     93             exit 1
     94         fi
     95     fi
     96 
     97     $fetch_url_cmd "$STATUS_URL" > "$cache"
     98     rval=$?
     99     if [ $rval != 0 ]; then
    100         echo "ZBX_NOTSUPPORTED"
    101         exit 1
    102     fi
    103 fi
    104 
    105 case "$CASE_VALUE" in
    106 'ping')
    107     if [ ! -s "$cache" -o "$cache" -ot "$cache_timestamp_check" ]; then
    108         echo "0"
    109     else
    110         echo "1"
    111     fi
    112     exit 0;;
    113 esac
    114 
    115 if ! [ -s "$cache" ]; then
    116     echo "ZBX_NOTSUPPORTED"
    117     exit 1
    118 fi
    119  
    120 case "$CASE_VALUE" in
    121 'TotalAccesses')
    122     value="`awk '/^Total Accesses:/ {print $3}' < "$cache"`"
    123     rval=$?;;
    124 'TotalKBytes')
    125     value="`awk '/^Total kBytes:/ {print $3}' < "$cache"`"
    126     rval=$?;;
    127 'CPULoad')
    128     value="`awk '/^CPULoad:/ {print $2}' < "$cache"`"
    129     rval=$?;;
    130 'Uptime')
    131     value="`awk '/^Uptime:/ {print $2}' < "$cache"`"
    132     rval=$?;;
    133 'ReqPerSec')
    134     value="`awk '/^ReqPerSec:/ {print $2}' < "$cache"`"
    135     rval=$?;;
    136 'BytesPerSec')
    137     value="`awk '/^BytesPerSec:/ {print $2}' < "$cache"`"
    138     rval=$?;;
    139 'BytesPerReq')
    140     value="`awk '/^BytesPerReq:/ {print $2}' < "$cache"`"
    141     rval=$?;;
    142 'BusyWorkers')
    143     value="`awk '/^BusyWorkers:/ {print $2}' < "$cache"`"
    144     rval=$?;;
    145 'IdleWorkers')
    146     value="`awk '/^IdleWorkers:/ {print $2}' < "$cache"`"
    147     rval=$?;;
    148 'WaitingForConnection')
    149     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "_" }; { print NF-1 }'`"
    150     rval=$?;;
    151 'StartingUp')
    152     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "S" }; { print NF-1 }'`"
    153     rval=$?;;
    154 'ReadingRequest')
    155     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "R" }; { print NF-1 }'`"
    156     rval=$?;;
    157 'SendingReply')
    158     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "W" }; { print NF-1 }'`"
    159     rval=$?;;
    160 'KeepAlive')
    161     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "K" }; { print NF-1 }'`"
    162     rval=$?;;
    163 'DNSLookup')
    164     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "D" }; { print NF-1 }'`"
    165     rval=$?;;
    166 'ClosingConnection')
    167     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "C" }; { print NF-1 }'`"
    168     rval=$?;;
    169 'Logging')
    170     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "L" }; { print NF-1 }'`"
    171     rval=$?;;
    172 'GracefullyFinishing')
    173     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "G" }; { print NF-1 }'`"
    174     rval=$?;;
    175 'IdleCleanupOfWorker')
    176     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "I" }; { print NF-1 }'`"
    177     rval=$?;;
    178 'OpenSlotWithNoCurrentProcess')
    179     value="`awk '/^Scoreboard:/ {print $2}' < "$cache" | awk 'BEGIN { FS = "." }; { print NF-1 }'`"
    180     rval=$?;;
    181 *)
    182     usage
    183     exit 1;;
    184 esac
    185 
    186 if [ "$rval" -eq 0 -a -z "$value" ]; then
    187     rval=1
    188 fi
    189  
    190 if [ "$rval" -ne 0 ]; then
    191     echo "ZBX_NOTSUPPORTED"
    192 fi
    193  
    194 echo "$value"
    195 exit $rval
    196  
    197 #
    198 # end zapache
    check_apache.sh

    给脚本执行权限

    sudo chmod +x /etc/zabbix/scripts/check_apache.sh
    

    4.将userparameter_apache.conf放入client的/etc/zabbix/zabbix_agentd.d,内容如下:

    sudo vim /etc/zabbix/zabbix_agentd.d/userparameter_apache.conf
    UserParameter=zapache[*],/bin/bash /etc/zabbix/scripts/check_apache.sh $1
    

    5.重启agentd

    /etc/init.d/zabbix-agent restart
    $ sudo /etc/init.d/zabbix-agent restart
    

    测试

    sudo sh /etc/zabbix/scripts/check_apache.sh CPULoad
    2.06619
    

    修改权限

    sudo  chown zabbix.zabbix /tmp/zapache-http___localhost_server-status_auto.*
    

    文件如下:

    -rw-r--r-- 1 zabbix zabbix       440 Mar 17 14:29 zapache-http___localhost_server-status_auto.cache
    -rw-r--r-- 1 zabbix zabbix         0 Mar 17 14:29 zapache-http___localhost_server-status_auto.ts
    

    6.在zabbix server 中创建Template App Apache service模板,添加items, 关联需要监控的apache主机即可


    apache服务监控可参考如下:

  • 相关阅读:
    MFC CListCtrl 使用介绍
    头文件预编译 .
    WM_CREATE和WM_INITDIALOG
    一步一步学List Control控件的用法(第三步)设置风格 .
    VC定时器的用法:SetTimer和Ontimer .
    GetWindowRect与GetClientRect 的区别 .
    Prebuild Command line(Copy) . vc2008预生成事件和生成后事件的用法
    MFC浅析(7) CWnd类虚函数的调用时机、缺省实现 .
    MFC中VALUE和CONTROL的区别(EDIT控件)
    MFC应用程序中处理消息的顺序
  • 原文地址:https://www.cnblogs.com/wuhg/p/10238664.html
Copyright © 2011-2022 走看看