1 监控MySQL
1.1 监控脚本
cat /scripts/check_mysql.sh
脚本内容为:
#!/bin/bash
MySQL_USER="root"
MySQL_PWD="123123"
MySQL_HOST="127.0.0.1"
MySQL_PORT="3306"
MySQL_CONN="/usr/local/mysql/bin/mysqladmin -u${MySQL_USER} -h${MySQL_HOST} -P${MySQL_PORT} -p${MySQL_PWD}"
if [ $# -ne "1" ];then
echo "arg error!"
fi
case $1 in
Uptime)
result=`${MySQL_CONN} status | cut -f2 -d":" | cut -f1 -d "T"`
echo $result
;;
Com_update)
result=`${MySQL_CONN} extended-status | grep -w "Com_update" | cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`${MySQL_CONN} status | cut -f5 -d":" | cut -f1 -d"O"`
echo $result
;;
Com_select)
result=`${MySQL_CONN} extended-status | grep -w "Com_select" | cut -d "|" -f3`
echo $result
;;
Com_rollback)
result=`${MySQL_CONN} extended-status | grep -w "Com_rollback" | cut -d"|" -f3`
echo $result
;;
Questions)
result=`${MySQL_CONN} status | cut -f4 -d":" | cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`${MySQL_CONN} extended-status | grep -w "Com_insert" | cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`${MySQL_CONN} extended-status | grep -w "Com_delete" | cut -d"|" -f3`
echo $result
;;
Com_commit)
result=`${MySQL_CONN} extended-status | grep -w "Com_commit" | cut -d"|" -f3`
echo $result
;;
Bytes_sent)
result=`${MySQL_CONN} extended-status | grep -w "Bytes_sent" | cut -d"|" -f3`
echo $result
;;
Bytes_received)
result=`${MySQL_CONN} extended-status | grep -w "Bytes_received" | cut -d"|" -f3`
echo $result
;;
Com_begin)
result=`${MySQL_CONN} extended-status | grep -w "Com_begin" | cut -d"|" -f3`
echo $result
;;
*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
1.2 客户端键值配置
修改键值文件
#配置脚本权限
cd /scripts/
chmod +x check_mysql.sh
chown zabbix.zabbix check_mysql.sh
#修改键值
cd /etc/zabbix/zabbix_agent.d/
#删除旧的mysql键值模板,创建新键值
rm -rf userparameter_mysql.conf
vim mysql_status.conf
#内容为
UserParameter=mysql.status[*],/scripts/check_mysql.sh $1
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p123123 ping | grep -c alive
UserParameter=mysql.version,/usr/local/bin/mysql -V
#重启zabbix-agent服务
/etc/init.d/zabbix-agent restart
测试键值
在服务端,测试
zabbix_get -s agent-IP -p agent-port -k "mysql.status[*]"
1.3 在zabbix的web前台引入模板
引入模板,链接到指定主机即可实现监控
2 监控Apache
2.1 构建Apache初始环境
#避免冲突,删除系统已有的httpd服务
rpm -qa httpd
#编译Apache,启动脚本
tat xf httpd-2.2.17.tar.gz -C /usr/src/
cd /usr/src/httpd-2.2.17/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi && make && make install
echo $?
cd /usr/local/httpd/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
chmod +x /etc/init.d/httpd
#修改主页,域名
cd htdocs/
echo "`hostname -I` I am apache" > index.html
cd /usr/local/httpd/conf
#修改配置文件
vim httpd.conf
#将97行改为
SeverName www.http.com:80
#在配置文件最后加入代码端,开启apache状态页
ExtendedStatus On
<location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 192.168.200.191
Allow from 127.0.0.1
</location>
#本地映射,启动apache
echo "127.0.0.1 www.http.com" >> /etc/hosts
/etc/init.d/httpd start
2.2 创建键值
键值监控脚本
可从网上下载,也可以使用已有文件(已有)
wget https://github.com/lorf/zapache/archive/master.zip
下载后,解压,然后从里面获取监控脚本
#创建脚本存放目录
mkdir /etc/zabbix/scripts/zapache
cd zapache-master/
cp zapache /etc/zabbix/scripts/zapache
chmod 755 /etc/zabbix/scripts/zapache
chown zabbix /etc/zabbix/scripts/zapache
cp userparameter_zapache.conf.sample /etc/zabbix/zabbix_agentd.d/userparameter_zapache.conf
#修改最后一行为,域名刚刚自定义的
UserParameter=zapache[*],/etc/zabbix/scripts/zapache www.http.com \$1
#重启zabbix-agent客户端
/etc/init.d/zabbix-agent restart
测试键值
在客户端
可以查看能使用的键值有哪些
/etc/zabbix/scripts/zapache
在服务端
zabbix_get -s agent-ip -p 10050 -k "zapache[***]"
2.3 web端添加模板
客户端zapache-master目录下有两个模板,有active的是agent主动模式
zapache-template-active.xml
zapache-template.xml
可以将这两个模板拷贝到windows,导入web端
3 监控Nginx
3.1 开启nginx状态页
nginx配置文件中加入status模块,IP是nginx服务器本机IP
location = /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.200.182;
deny all;
}
3.2 客户端配置键值
监控脚本为
cat /scripts/nginx_status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
#Functions to return nginx stats
function active(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Active" | awk '{print $NF}'
}
function reading(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Reading" | awk '{print $2}'
}
function waiting(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Waiting" | awk '{print $6}'
}
function writing(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Writing" | awk '{print $4}'
}
function accepts(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $1}'
}
function handled(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $2}'
}
function requests(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $3}'
}
function ping(){
/sbin/pidof nginx | wc -l
}
# Run the requested function
$1
给脚本可执行权限
chmod +x /scripts/nginx_status.sh
chown zabbix /scripts/nginx_status.sh
自定义键值
vim /etc/zabbix/zabbix_agentd.d/nginx.conf
#内容为
UserParameter=nginx.active,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep "Active" | awk '{print $NF}'
UserParameter=nginx.status[*],/etc/zabbix/scripts/nginx_status.sh $1
#启动agent客户端
/etc/init.d/zabbix-agent start
3.3 测试键值
服务端
zabbix_get -s agent-ip -p 10050 -k "nginx.status[***]"
3.4 在web端导入nginx监控模板
4 监控Tomcat
zabbix监控tomcat,需要zabbix_server开启java poller,zabbix_java开启javaGateway,端口10052,Tomcat JMX开启12345端口,提供性能数据
流程为
java poller<–>javaGateway:10052<–>Tomcat:12345
4.1 配置客户端
配置Tomcat JMX
在tomcat服务器上,编辑catalina.sh,加入如下配置
若做过tomcat优化,需要注意两者的不同,不要重复
#在249行加入
CATALINA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.200.109 -Dcom.sun.management.jmxremote.port=12345"
其中-Djava.rmi.server.hostname=192.168.200.109,是tomcat服务器IP
然后重启tomcat,检查12345端口是否成功开启
4.2 服务端配置
在zabbix服务端,配置java环境
要使得zabbix能够监控tomcat,编译的时候需要加入java支持,支持JMX监控,有需要的话,需要重新编译,而编译之前,需要保证java环境配置OK
4.2.1 安装JDK
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_60/ /usr/local/jdk
sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile
java -version
4.2.2 重新编译zabbix服务端
#关闭zabbix服务端
/etc/init.d/zabbix_server stop
#加入参数--enable-java重新编译
cd /usr/src/zabbix-3.2.4/
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2
make && make install
cd /usr/local/zabbix/sbin/
#编译此处成功会多一个目录zabbix_java,此目录下有
settings.sh #java gateway配置脚本
shutdown.sh #停止java gateway服务
startup.sh #启动java gateway服务
#启动java gateway 服务
/usr/local/zabbix/sbin/zabbix_java/startup.sh
netstat -antup | grep 10052
4.2.3 修改zabbix server 配置
默认的情况下,zabbix server未启用javaPollers,需要修改zabbix_server.conf的如下配置
cd /usr/local/zabbix/etc/
vim zabbix_server.conf
#修改215,223,231行的内容
JavaGateway=127.0.0.1 #JavaGateway的地址
JavaGatewayPort=10052 #监听端口
StartJavaPollers=5 #poller进程数
#重新启动zabbix_server服务
/etc/init.d/zabbix_server start
4.3 web端添加Tomcat主机,导入模板
和之前不同,java程序监控方式是JMX,故主机的监控,需要增加一个JMX接口
主机名为tomcat服务器IP,监控IP为tomcat服务器主机,端口为12345
zabbix自带tomcat模板,但存在兼容性问题,可以自己下载,或者用已有模板
5 监控PHP-FPM
5.1 开启PHP-FPM状态功能
cd /usr/local/php/etc/
vim php-fpm.conf +360
#将360行取消注释,如下
pm.status_path = /status
#重启php-fpm
netstat -antup | grep php-fpm
kill pid
/usr/local/php/sbin/php-fpm
5.2 nginx配置php-fpm状态页面
vim /usr/local/nginx/
vim nginx.conf
#加入location配置
location = /status {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
#重启nginx
nginx -s reload
5.3 浏览器访问PHP状态页进行测试
在浏览器中输入IP/status访问状态页
php-fpm的状态页有很多中表达方式,可以带其他参数,比如json,xml,html
例:curl IP/status?xml
5.4 客户端键值配置
此处我们使用xml表达方式
cd /etc/zabbix/zabbix_agentd.d/
vim userparameter_php-fpm.conf
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>" | awk -F "[>|<]" '{print $$3}'
##这里需要注意在脚本里如果写成$3的话,脚本会认识是一个变量,因此我们需要用$$3
#重启agent客户端
/etc/init.d/zabbix-agent restart
5.5 服务端测试键值
zabbix_get -s agent-ip -p 10050 -k “php-fpm.status[*]”
5.6 web导入模板连接到主机即可使用
6 web监控
Zabbix的Web监测功能,没有任何依赖,不需要agent端,全部依赖于Server的主动监测
添加web监控
web监控是根据主机来配置,以server端来举例
在配置–主机–server端–web监测–新增
- 场景:
自定义名称,应用集,客户端自动选择(选择zabbix就ok) - 步骤:
添加–自定义名称,URL为需要检测的网站,以http://IP:80/URI的格式,要求的状态码可以写200,然后添加–更新 - 可以从web监控(监控中–web监控)查看刚刚添加的web监控信息,当回复码是200,提示正常,否,则报错