前言:

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

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

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

监控模式:

主动模式:NMS向agent采集数据,监控端到被监控端采集数据

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

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

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

SNMP组件:

MIB:management  information 
base(管理信息库)

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

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

SMI:MIB表示机制

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

NMS可发起的操作:

Get:获取数据

GetNext:获取更多参数

Set:设定

Trap:陷阱操作

SNMP基于UDP工作

NMS监听端口:161

Agent监听端口:162

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

这里不得不提到cacti和nagios

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

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

Nagios:强大的报警机制

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

Nagios的各组件依赖关系!

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

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

其他著名开源监控工具:zabbix,zennos,opennms,cacti,nagios(icinga),ganglia

监控功能的实现:agent,ssh,SNMP

SNMP协议版本在v1中是一款简单协议,在v1中没有认证功能,v2c:NMS-à agent ,v1和v2是基于UDP来实现,机制也相同!而v3和v2,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(关系型数据库)

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

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

Zabbix分布式

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

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

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

Zabbix架构

Zabbix组件:

Zabbix-server:是c语言研发

监控端OS:zabbix-agent,同样c研发

Zabbix-database:mysql,pgsql(postgreSQL),oracle,db2,sqlite

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

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

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

Zabbix进程描述:

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

Httppoller:监控web页面专用poller

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

Alerter:警报工作

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

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

Escalator:报警生成器

Timer:时间,计时器

Nodewatchel:监控节点

Pinger:ping操作监控节点是否在线的独特机制

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中即可

编译安装server和agent,并支持将数据放入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

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

添加UserParameter断

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

可使用zabbix_get -s 10.0.0.53 -k mysql_alive查看

web页面创建主机组

添加主机到主机组

创建mysqlitems

添加触发器

graphs出图



预览

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

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

测试脚本

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

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



媒介



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

模拟一次mysql挂掉

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

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

  1. sudo vim /alidata/server/httpd/conf/httpd.conf
  2. <Location /server-status>
  3. SetHandler server-status
  4. Allow from 127.0.0.1
  5. Order deny,allow
  6. Deny from all
  7. </Location>
  8. ExtendedStatus On

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

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

#禁止显示目录列表

Options -Indexes

2,重加载apache配置

Check uptime并重启apache

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

可以使用curl 127.0.0.1/server-status测试

3,在zabbix-agent上创建目录和脚本

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

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

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

check_apache.sh

给脚本执行权限

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

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

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

5.重启agentd

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

测试

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

修改权限

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

文件如下:

  1. -rw-r--r-- 1 zabbix zabbix 440 Mar 17 14:29 zapache-http___localhost_server-status_auto.cache
  2. -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服务监控可参考如下:



学习zabbix(三)的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. 从零开始学习jQuery (三) 管理jQuery包装集

    本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...

  3. 前端学习 第三弹: JavaScript语言的特性与发展

    前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...

  4. Android Animation学习(三) ApiDemos解析:XML动画文件的使用

    Android Animation学习(三) ApiDemos解析:XML动画文件的使用 可以用XML文件来定义Animation. 文件必须有一个唯一的根节点: <set>, <o ...

  5. 三、Android学习第三天——Activity的布局初步介绍(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下 ...

  6. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB

    JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  7. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  8. Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  9. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

随机推荐

  1. 案例二:shell脚本获取当前日期和时间及磁盘使情况

    习题分析 本题有两个核心知识点: 1. 如何自动表示当天的日期 2. 磁盘使用情况 打印日期的命令为 date,示例命令如下: # date 2017 年 12 月 20 日 星期三 16:26:55 ...

  2. 『无为则无心』Python日志 — 69、补充:logging.basicConfig()函数说明

    目录 1.basicConfig()函数说明 2.应用 1.basicConfig()函数说明 此函数,通过创建一个带有默认Formatter(格式器)的StreamHandler(处理器),并将其添 ...

  3. (三)目标检测算法之SPPNet

    今天准备再更新一篇博客,加油呀~~~ 系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-C ...

  4. FoveaBox:细节差别,另一种DenseBox+FPN的Anchor-free方案 | IEEE TIP 2020

    作为与FCOS和FSAF同期的Anchor-free论文,FoveaBox在整体结构上也是基于DenseBox加FPN的策略,主要差别在于FoveaBox只使用目标中心区域进行预测且回归预测的是归一化 ...

  5. JAVA String、StringBuilder、和StringBuffer的区别,及如何使用

    目录 String类 一.String类的理解和创建对象 二.String类创建的方式 两种创建String对象的区别 测试题 三.String常用方法 四.StringBuffer类 1.Strin ...

  6. Spring Cloud Gateway actuator组建对外暴露RCE问题漏洞分析

    Spring Cloud gateway是什么? Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关.网关作为流量的,在微服务系统中有着非常作 ...

  7. 动态线程池(DynamicTp)之动态调整Tomcat、Jetty、Undertow线程池参数篇

    大家好,这篇文章我们来介绍下动态线程池框架(DynamicTp)的adapter模块,上篇文章也大概介绍过了,该模块主要是用来适配一些第三方组件的线程池管理,让第三方组件内置的线程池也能享受到动态参数 ...

  8. Lua中如何实现类似gdb的断点调试--05优化断点信息数据结构

    在上一篇04优化钩子事件处理中,我们在钩子函数中引入了call和return事件的处理,对性能进行了优化. 细心的同学可能已经发现了,我们的hook函数中call事件和line都需要对整个断点表进行遍 ...

  9. linux su、sudo、sudo su、sudo -i的用法和区别

    sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认一次时长15分钟. su : 切换到某某用户模式,提 ...

  10. Ubuntu 16.04.3 Server 版安装过程图文详解

    Ubuntu 16.04.3 Server 版安装过程图文详解 首先,我们会进入系统安装的第一个界面,开始系统的安装操作.每一步的操作,左下角都会提示操作方式! 1.选择系统语言-English2.选 ...