前言:

学习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

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服务监控可参考如下:



学习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. 可视化里程碑:可拖拽使用的可视化BI工具

    在数据量越来越大的今天,如何利用好数据,更好的为人类社会服务,成为人们所关心的话题,而其中数据可视化作为最后一个环节,也是人们最为直观的感受,自然而然备受重视.同质化的应用越来越多,应用开发者也开始在 ...

  2. 【C#基础概念】vs2019 代码段

    打开记事本,输入下面代码,然后把文件后缀改为.snippet .然后通过vs2019 工具>代码段管理导入. <?xml version="1.0" encoding= ...

  3. Nested Class(嵌套类)

    在类.结构或接口中定义的类型称为嵌套类型. 例如 public class Container { class Nested { Nested() { } } } 不论外部类型是类.接口还是构造,嵌套 ...

  4. idea Transparent-native-to-ascii 是否需要勾选?

    目录 首先看一下官方对该选项的解释: 第一段是说标准的Java api是用ISO 8859-1编码.properties文件的,所以如果你在properties文件中可以使用转义序列表示没在这个编码中 ...

  5. Qt:QFileInfo

    0.说明 QFileInfo提供了独立于系统的文件信息. QFileInfo提供的信息包括文件名.路径.访问权限.文件大小.修改时间等.此外,它也可以用于获取有关Qt 资源的信息(resource). ...

  6. ubuntu 下的ftp安装及root身份远程配置

    第一步:在 Ubuntu 中安装 VSFTPD 服务器 //安装 VSFTPD 二进制包 $ sudo apt-get update $ sudo apt-get install vsftpd //使 ...

  7. php使用kafka代码

    生产者 producer.php文件 <?php /** * Created by PhpStorm. * User: shiyibo * Date: 2019/2/24 * Time: 12: ...

  8. JS-购物车

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 0x02 TeamViewer日志溯源

    1.环境部署 1.安装ubuntu_x64的deb安装包 2.打开TeamViewer 2.日志目录 1.通过图形应用找到日志文件 2.通过命令定位日志文件 find / -name "Te ...

  10. 如何用Google Drive下载超大型文件

    本文将对「如何下载Google Drive中的超大型文件?」这一问题展开探索和解决. 太长不读:直接看这里 情景与问题 在AI.系统安全等研究领域,一项研究成果的产生需要大量的数据样本进行训练和分析, ...