zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态
zabbix监控对象区分
- 使用SNMP监控交换
- 使用IPMI监控服务器硬件
- 使用Agent监控服务器
- 使用JMX监控JAVA
SNMP监控流程
- 交换机上开启snmp
- 在zabbix上添加监控(设置SNMP interfaces)
- 关联监控模版、
IPMI
建议使用自定义item监控服务器硬件,在本地执行ipmitool命令来获取数据
可以在本地执行ipmitool命令获取数据(命令需要安装)连接远程控制卡监控
JMX(使用Zabbix Java Gateway代理)
用来获取java数据,实现监控tomcat
安装zabbix-agent客户端 略
Zabbix监控MySQL数据库操作
需要部署一个MySQL服务和一个zabbix-agentd客户端 #部署过程略,不会看前边博文
编写监控脚本
在nginx服务器(192.168.0.221)上安装一个MySQL下面是监控mysql状态的一个shell脚本,内容如下:
mkdir -p /server/scripts #创建文件
vim /server/scripts/check_mysql.sh #创建脚本
#!/bin/bash
MySQL_USER="root"
MySQL_PWD=""
MySQL_HOST="127.0.0.1"
MySQL_PORT=""
MySQL_CONN="/usr/local/mysql/bin/mysqladmin -u${MySQL_USER} -h${MySQL_HOST} -P${MySQL_PORT} -p${MySQL_PWD}"
if [ $# -ne "" ];then
echo "arg error!"
fi
case $ 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_querles)
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"`
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_querles|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
在zabbix-agent端创建自定义键值配置文件
#创建mysql.status的键值
chmod +x /server/scripts/check_mysql.sh
chown zabbix.zabbix /server/scripts/check_mysql.sh vim /etc/zabbix/zabbix_agentd.d/mysql_status.conf
UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $
#删除旧键值模版
rm -rf /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
#创建mysql.ping和mysql.version的键值
vim /etc/zabbix/zabbix_agentd.d/mysql_status.conf
UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p123456 ping | grep -c alive #监控数据库可否能ping通
UserParameter=mysql.version,/usr/local/bin/mysql -V #监控数据库的版本(防止手欠升级的)#重启zabbix-agentd服务
/etc/init.d/zabbix-agent restart
在zabbix-server端测试键值
zabbix_get -s 192.168.50.168 -p -k "mysql.status[Uptime]" zabbix_get -s 192.168.50.168 -p -k "mysql.status[Com_commit]" zabbix_get -s 192.168.50.168 -p -k "mysql.status[Bytes_sent]" zabbix_get -s 192.168.50.168 -p -k "mysql.status[Bytes_received]" zabbix_get -s 192.168.50.168 -p -k "mysql.ping" zabbix_get -s 192.168.50.168 -p -k "mysql.version"
/usr/local/bin/mysql Ver 14.14 Distrib 5.5., for linux2. (x86_64) using readline 5.1
在zabbix-server端Web前台引入zabbix监控MySQL的模版
zabbix自带监控MySQL的模版,我们只需要将模版引入到主机即可 配置-->主机-->选择主机-->模板,然后将MySQL模版连接到此主机即
zabbix监控mha高可用
监控mha原理在于监控进程是否有mha进程,因为一旦主库宕机,mha进程会自动结束
自定义键值+监控命令
vim /etc/zabbix/zabbix_agentd.d/mha.conf
UserParameter=mha,/usr/bin/ps -ef |grep "masterha_manager" |grep -v "grep"|wc -l
键值mha 查看后台进程过滤出 过滤出mha进程 统计个数
/etc/init.d/zabbix-agent restart #重启服务
#server端键值测试
zabbix_get -s 192.168.50.168 -p -k 'mha'
1 #一个高可用进程存活
在zabbix页面设置监控mha

设置报警器

如果mha不等于1报警(既后台没有mha进程)
zabbix监控主从复制
监控主从复制的原理在于监控主从复制状态页,我们用show slave status;查看主从复制状态页,会发现如果主从状态正常,状态页显示两个Yes,所以我们监控状态页的两个Yes即可
自定义键值+监控命令
vim /etc/zabbix/zabbix_agentd.d/zc.conf
UserParameter=zcfz,/usr/local/mysql/bin/mysql -uhehe -e "show slave status\G" | grep Yes|wc -l
定义键值主从复制 这里用一个低权限的为设密码的用户 查看状态页 过滤出两个yes
/etc/init.d/zabbix-agent restart #重启服务
#server端键值测试
zabbix_get -s 192.168.50.168 -p -k 'zcfz'
#两个yes
在zabbix页面设置监控主从复制


如果过滤出的yes不是两个则报警
Zabbix监控Nginx
开启nginx状态页
#在nginx的配置文件中,添加status配置
location = /nginx-status {
stub_status on;
access_log off;
allow 192.168.50.173;
allow 192.168.50.172; #设置权限只允许内网查看
deny all;
}
访问设置好的nginx-status链接
#在zabbix-server上通过如下方式获取nginx状态页面信息:
curl 192.168.50.173/nginx-status
Active connections:
server accepts handled requests Reading: Writing: Waiting:
nginx status详细说明如下:
Active connections:对后端发起的活动连接数;
accepts:nginx总共处理了多少个连接;
handled:nginx成功创建了几次握手;
requests:nginx总共处理了多少请求。
Reading:nginx读取客户端的header数;
Writing:nginx返回给客户端的header数;
Waiting:nginx请求处理完成,正在等待下一请求指令的连接
编写nginx状态监控脚本
vim /server/nginx_status.sh
#!/bin/bash
# Set Variables
HOST="192.168.50.173"
PORT=""
#Functions to return nginx stats
function active(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | grep "Active" | awk '{print $NF}'
}
function reading(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | grep "Reading" | awk '{print $2}'
}
function writing(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | grep "Writing" | awk '{print $4}'
}
function accepts(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | awk 'NR==3' | awk '{print $1}'
}
function handled(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | awk 'NR==3' | awk '{print $2}'
}
function requests(){
/usr/bin/curl "http://$HOST:$PORT/nginx-status" >/dev/null | awk 'NR==3' | awk '{print $3}'
}
function ping(){
/sbin/pidof nginx | wc -l
}
# Run the requested function
$
给脚本可执行权限并且授权
chmod +x /server/nginx_status.sh
chowm zabbix:zabbix /server/nginx_status.sh
在zabbix-agent端配置nginx键值配置文件
vim /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.active,/usr/bin/curl -s "http://192.168.50.173:80/nginx-status" | grep "Active" | awk '{print $NF}' #监控活动连接数
UserParameter=nginx.status[*],/server/nginx_status.sh $
#监控状态
vim /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.active,/usr/bin/curl -s "http://192.168.50.173:80/nginx-status" | grep "Active" | awk '{print $NF}' #监控活动连接数
UserParameter=nginx.status[*],/server/nginx_status.sh $ #监控状态
/etc/init.d/zabbix-agent restart #重启服务
在zabbix-server端测试键值
zabbix_get -s 192.168.50.173 -k "nginx.status[reading]" -p zabbix_get -s 192.168.50.173 -k "nginx.status[active]" -p zabbix_get -s 192.168.50.173 -k "nginx.status[ping]" -p
接下来在Web端导入nginx监控模版 创建监控nginx主机 略
Zabbix监控PHP-FPM
启用php-fpm状态功能
修改php-fpm配置文件,确保如下配置是打开状态:
vim /usr/local/php/etc/php-fpm.conf
pm.status_path = /status #第360行去掉注释开启状态功能#重启php-fpm服务/usr/local/php/sbin/php-fpm
pkill php-fpm
nginx配置php-fpm状态页面
vim /usr/local/nginx/conf/nginx.conf
location = /status {
include fastcgi_params;
fastcgi_pass 127.0.0.1:;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
} #加入此项location规则
#重启动nginx服务nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/usr/local/nginx/sbin/nginx -s reload
状态页浏览器访问测试

#具体含义说明如下
[root@Zabbix_Server nginx]# curl 127.0.0.1/status
pool: www #fpm进程池名称,大多数为www
process manager: dynamic #进程管理方式(static,dynamic or nodemand.dynamic)
start time: /Jan/::: - #启动日期
start since: #运行时长
accepted conn: #当前FPM进程池接受的请求数
listen queue: #请求等待队列,如果值不是0,那么要增加FPM的进程数
max listen queue: #请求等待队列最高的数量
listen queue len: #socket等待队列长度
idle processes: #空闲进程数量
active processes: #活跃进程数量
total processes: #总进程数量
max active processes: #最大的活跃进程数量(FPM启动开始算)
max children reached: #达到最大子进程的次数,如果值不为0,那么需要调高最大进程数
slow requests: #当启用了php-fpm的slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的MySQL查询会触发这个值
修改Zabbix agent配置
vim /etc/zabbix/zabbix_agentd.d/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
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
进行键值配置文件测试
zabbix_get -s 192.168.50.173 -p -k "php-fpm.status[process-manager]"
dynamic
Zabbix图形界面导入我们的监控模版
Zabbix的Web监测功能
Zabbix的Web监测功能,没有任何依赖,不需要agent端,全部依赖于Server的主动监测




Zabbix监控Tomcat
zabbix监控tomcat,需要zabbix_server开启java poller,zabbix_java开启javaGateway,端口10052,Tomcat JMX开启12345端口,提供性能数据。
配置Tomcat JMX
vim /usr/local/tomcat/bin/catalina.sh
在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.50.166
-Dcom.sun.management.jmxremote.port="
#此处注意空格,配置完最好重启,特别容易报错tomcat起不来
这里需要注意,必须增加-Djava.rmi.server.hostname选项,并且后面的IP就是tomcat服务器的IP

重启Tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -antup | grep java
tcp6 ::: :::* LISTEN /java
tcp6 127.0.0.1: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 192.168.50.166: 192.168.50.172: ESTABLISHED /java
编译zabbix,加入java支持
zabbix server服务器上需要安装JDK,并需要设置JAVA_HOME,以让系统能够识别到jdk的路径
#解压jdk
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1..0_60/ /usr/local/jdk
#配置java环境变量
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
在zabbix server服务器上,编译安装zabbix-server,需要加上--enable-java,以支持jmx监控,如果之前的zabbix server没加此选项,那么需要重新编译安装,编译参数如下:
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2
重新编译zabbix-server服务器端
#重新编译zabbix-server服务器端
/etc/init.d/zabbix_server stop
cd /usr/src/zabbix-3.2./ ./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/
ll
总用量
-rwxr-xr-x root root 8月 : zabbix_agentd
drwxr-xr-x root root 8月 : zabbix_java #多了一个目录
-rwxr-xr-x root root 8月 : zabbix_proxy
-rwxr-xr-x root root 8月 : zabbix_server
cd zabbix_java/
ll
total
drwxr-xr-x root root Jan : bin
drwxr-xr-x root root Jan : lib
-rw-r--r-- root root Jan : settings.sh #java gateway配置脚本 java gateway服务的配置脚本settings.sh不需要修改任何配置
-rwxr-xr-x root root Jan : shutdown.sh #停止java gateway服务
-rwxr-xr-x root root Jan : startup.sh #启动java gateway服务
启动java Gateway服务
/usr/local/zabbix/sbin/zabbix_java/startup.sh
netstat -antup | grep
tcp ::: :::* LISTEN /java
修改zabbix server 配置
默认的情况下,zabbix server未启用javaPollers,需要修改zabbix_server.conf的如下配置
vim /usr/local/zabbix/etc/zabbix_server.conf
JavaGateway=192.168.50.172 #JavaGateway的地址(本机地址)
JavaGatewayPort=
StartJavaPollers=
#重启服务
/etc/init.d/zabbix_server restart
#查看已经打开的java poller进程
ps -ef | grep "java poller" | grep -v grep
zabbix : ? :: /usr/local/sbin/zabbix_server: java poller # [got values in 0.000005 sec, idle sec]
zabbix : ? :: /usr/local/sbin/zabbix_server: java poller # [got values in 0.000003 sec, idle sec]
zabbix : ? :: /usr/local/sbin/zabbix_server: java poller # [got values in 0.000003 sec, idle sec]
zabbix : ? :: /usr/local/sbin/zabbix_server: java poller # [got values in 0.000003 sec, idle sec]
zabbix : ? :: /usr/local/sbin/zabbix_server: java poller # [got values in 0.000011 sec, idle sec]
Zabbix图形界面配置
新建主机选择JMX接口

然后添加主机最后导入摸板
Zabbix监控redis-cluster集群
利用查看状态监控 redis-cli -p 7001 cluster nodes 原理和mha类似 有空再做
zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态的更多相关文章
- 分布式数据存储 - MySQL主从复制高可用方案
前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...
- 使用MHA实现MySQL主从复制高可用
一.MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Fac ...
- Zabbix 监控 Nginx(四)
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...
- Zabbix 监控 Nginx 状态
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...
- 使用zabbix监控nginx
在zabbix agentd客户端上,查看nginx是否加载了--with-http_stub_status_module.因为zabbix监控nginx是根据 nginx的Stub Status模块 ...
- zabbix监控nginx连接状态(转)
zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...
- 使用zabbix监控nginx的活动连接数
使用zabbix监控nginx的活动连接数 1.方法简述 zabbix可以自定义很多监控,只要是能通过命令获取到相关的值,就可以在zabbix的监控中增加该对象进行监控,在zabbix中,该对象称之为 ...
- Zabbix监控nginx性能的另外一种方式
Zabbix监控nginx性能的另外一种方式 nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有用,为了后续的zabbix监控,我们需要先启用nginx ...
- Zabbix应用四:Zabbix监控Nginx
利用Zabbix监控Nginx 一.准备nginx监控模版: 1.1.下载nginx监控模版: 点此下载 1.2.导入模版: Zabbix管理页面,选择'配置'->'模版'->'导入': ...
随机推荐
- Spring cloud实战——服务提供者
目录讲解: 一.服务提供者与服务消费者的概念 二.编写一个服务提供者的测试类(code) 1.1. 使用微服务构建的是分布式系统,微服务之间通过网络进行通信.我们使用微服务提供者与服务消费者来描述微服 ...
- Oracle中函数关键字简介
常用的语法:select--from--where--group by--having--order by 1.分组子句group by +con 按什么分组 2.having子句 对上面分组的数据 ...
- 利用Pycharm部署同步更新Django项目文件
利用Pycharm部署同步更新Django项目文件 这里使用同步更新的前提是你已经在服务器上上传了你的Django项目文件. 在"工具(Tools)"菜单中找到"部署(D ...
- nginx 设置静态下载界面
首先,官方设置链接:https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/ 下面贴一个配置文件: cha ...
- docker HealthCheck健康检查
需求 最近遇到的问题:线上跑的一个 Node 镜像是在运行的,状态为 up ,但是访问报 502 ,重启镜像无效,重新拉了个镜像运行才恢复正常.于是想研究下如何从应用层面去检查容器的状态 为什么 do ...
- linux usb驱动记录(一)
一.linux 下的usb驱动框架 在linux系统中,usb驱动可以从两个角度去观察,一个是主机侧,一个是设备侧.linux usb 驱动的总体框架如下图所示: 从主机侧看usb驱动可分为四层: ...
- 关于pycharm database查看db.sqlites文件提示:Driver class 'org.sqlite.JDBC' not found
系统重新安装后,启动pycharm存在各种问题,其中一个问题就是在Pycharm中的database里面不能查看sqlite数据库了: 经过一番查找终于找到了问题: 首先问题 是提示这样一个报错: 解 ...
- C. Vasily the Bear and Sequence Codeforces 336C(枚举,思维)
C. Vasily the Bear and Sequence time limit per test 1 second memory limit per test 256 megabytes inp ...
- Python3+Appium学习笔记01-环境配置(上)
公司可能也有关于对app自动化的一些想法,让我去研究下.当然以移动互联网的热度.对于app自动化测试技术听闻已久.也一直想要去学习.正好.这次可以在工作时间中学习.emmm.希望自己能坚持把这个系列更 ...
- ubuntu下log4cxx安装使用
需要安装log4cxx,安装的过程中可是充满了坎坷...最大的问题是在make log4cxx时,总是报undefined XML什么什么的错误,查了一下也没解决了,然后把apr-utils删了重新装 ...