安装一些依赖包,不同情况缺的包不同

yum install mysql-devel curl curl-devel net-snmp net-snmp-devel perl-DBI php-gd php-xml php-bcmath

下载源码文件,我下载的是2.4的版本zabbix

wget http://iweb.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.3/zabbix-2.4.3.tar.gz

tar zxvf zabbix-2.4.3.tar.gz

cd zabbix-2.4.3

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --with-net-snmp --with-libcurl

make && make install

创建zabbix数据库及其相关账号

create database zabbix default charset = utf8;

grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';

flush privileges;

\q

然后导入原始数据库

cd /home/zabbix-2.4.3/database/mysql
mysql -uroot -p zabbix<schema.sql
mysql -uroot -p zabbix<images.sql
mysql -uroot -p zabbix<data.sql

添加zabbix服务端口号

cat >>/etc/services <<EOF
zabbix-agent 10050/tcp #Zabbix Agent
zabbix-agent 10050/tcp #Zabbix Agent
zabbix-agent 10050/tcp #Zabbix Agent
zabbix-server 10051/udp #Zabbix server
EOF

拷贝启动脚本

cp /home/zabbix-2.4.3/misc/init.d/fedora/core5/zabbix_* /etc/init.d/
chmod +x /etc/init.d/zabbix_*
修改启动命令脚本
vim /etc/init.d/zabbix_server
ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server"
vim /etc/init.d/zabbix_agentd
ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd"

修改连接数据库的用户名和密码

vi /usr/local/zabbix/etc/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
复制网站程序
cp frontends/php/ /var/www/html/ -r
然后在浏览器里打开这个zabbix。
useradd zabbix -M -s /sbin/nologin
service zabbix_server start
service zabbix_agentd start

 配置zabbix

 
configuration(配置)-->Hosts(主机)-->Create host(创建主机)

选择模板

查看主机列表(绿色的Z表示成功的监控了这台客户端,如果是红色Z表示失败,此时将鼠标移动到红色Z上,会有具体的提示)

查看监控数据

最新数据:第一台主机添加完成之后,我们便可以查到最新的数据,例如cpu、内存、硬盘等情况

图表数据
模板Template OS Linux一共包含图表,查看方法如下图

监控MySQL性能
在/usr/local/zabbix创建一个文件夹scripts,并且创建一个脚本文件chk_mysql.sh,在该文件里写入以下code,将此文件给权限chmod +x chk_mysql.sh,chown zabbix:zabbix chk_mysql.sh
#!/bin/bash
# -------------------------------------------------------------------------------
# FileName: check_mysql.sh
# Description:
# Notes: ~
# ------------------------------------------------------------------------------- # 用户名
MYSQL_USER='zabbix' # 密码
MYSQL_PWD='zabbix' # 主机地址/IP
MYSQL_HOST='127.0.0.1' # 端口
MYSQL_PORT='3306' # 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" # 参数是否正确
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_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac

修改zabbix_agentd.conf

增加自定义key,在最后一行增加如下:

# 获取mysql版本
UserParameter=mysql.version,mysql -V
# 获取mysql性能指标,这个是上面定义好的脚本
UserParameter=mysql.status[*],/usr/local/zabbix/scripts/chk_mysql.sh $1
# 获取mysql运行状态
UserParameter=mysql.ping,mysqladmin -uzabbix -pzabbix -P3306 -h127.0.0.1 ping | grep -c alive
# killall zabbix-agentd # /usr/local/zabbix/bin/zabbix_agentd 或# service zabbix_agentd restart

  模板是zabbix系统提供的,进入zabbix web后台,configuration-->hosts-->点击你的主机name-->选择template选项卡,选择模板"Template App MySQL",最后点击update即可

去监控图查看mysql显示 【no data】,然后去日志查看错误状态
tail /var/log/zabbix/zabbix_agentd.log 
1266:20140523:063554.157 no active checks on server [127.0.0.1:10051]: host [zabbix.linuxidc.com] not found
cat /etc/zabbix/zabbix_agentd.conf | grep Hostname
### Option: Hostname
# Value is acquired from HostnameItem if undefined.
# Hostname=
Hostname=Zabbix server
### Option: HostnameItem
# Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
# HostnameItem=system.hostname
# Aliases can be used in HostMetadataItem but not in HostnameItem parameters. 在zabbix web页面Monitoring->Configuration->Hosts 页面更改Host name和zabbix_agentd.conf里面的Hostname一样。 然后重启,发现mysql有数据显示了

在主界面发现还有一个错误Lack of free swap space on Zabbix server

swap好像没有被监控

这种情况下,如果开启Zabbix监控,Zabbix将会报告系统缺少交换分区空间(“Lack of free swap space”)。这完全可以理解,因为按照正常的逻辑,一台物理服务器不可能不设置交换分区。显然,这样的设计没有考虑到云主机用户,但需要适当调整监控文件配置即可解决问题。

选择Configuration->Templates(模板),在模板界面中选择Template OS Linux右侧的Triggers(触发器),在触发器页面中打开Lack of free swap space on {HOST.NAME}项目,在新打开的触发器编辑页面中修改Expression(表达式)的内容,由原先的

{Template OS Linux:system.swap.size[,pfree].last(0)}<50

修改为

{Template OS Linux:system.swap.size[,pfree].last(0)}<50 and {Template OS Linux:system.swap.size[,free].last(0)}<>0

此处修改增加了“ and {Template OS Linux:system.swap.size[,free].last(0)}<>0”判断系统有交换空间,当系统无交换空间即{Template OS Linux:system.swap.size[,free].last(0)}的值为0时将不会时表达式不成立就不会触发错误提示。保存之后在下一个更新周期内Zabbix之前报告的“Lack of free swap space”问题就会被自动标记为Resolved(已解决)。

Zabbix监控nginx性能

nginx status信息

curl http://127.0.0.1/nginx_status
Active connections: 2
server accepts handled requests
183 183 2471
Reading: 0 Writing: 1 Waiting: 1

  编写客户端脚本nginx_status.sh

#!/bin/bash

source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
nginxstatus=http://127.0.0.1/nginx_status # Functions to return nginx stats
function checkavailable {
code=$(curl -o /dev/null -s -w %{http_code} ${nginxstatus})
if [ "${code}" == "200" ]
then
return 1
else
echo 0
fi
}
function active {
checkavailable|| curl -s "${nginxstatus}" | grep 'Active' | awk '{print $3}'
}
function reading {
checkavailable|| curl -s "${nginxstatus}" | grep 'Reading' | awk '{print $2}'
}
function writing {
checkavailable|| curl -s "${nginxstatus}" | grep 'Writing' | awk '{print $4}'
}
function waiting {
checkavailable|| curl -s "${nginxstatus}" | grep 'Waiting' | awk '{print $6}'
}
function accepts {
checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $1}'
}
function handled {
checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $2}'
}
function requests {
checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $3}'
} case "$1" in
active)
active
;;
reading)
reading
;;
writing)
writing
;;
waiting)
waiting
;;
accepts)
accepts
;;
handled)
handled
;;
requests)
requests
;;
*)
echo "Usage: $0 {active |reading |writing |waiting |accepts |handled |requests }"
esac

  将自定义的UserParameter加入配置文件,然后重启agentd

UserParameter=nginx.accepts,/usr/local/zabbix/scripts/nginx_status.sh accepts
UserParameter=nginx.handled,/usr/local/zabbix/scripts/nginx_status.sh handled
UserParameter=nginx.requests,/usr/local/zabbix/scripts/nginx_status.sh requests
UserParameter=nginx.connections.active,/usr/local/zabbix/scripts/nginx_status.sh active
UserParameter=nginx.connections.reading,/usr/local/zabbix/scripts/nginx_status.sh reading
UserParameter=nginx.connections.writing,/usr/local/zabbix/scripts/nginx_status.sh writing
UserParameter=nginx.connections.waiting,/usr/local/zabbix/scripts/nginx_status.sh waiting


  导入Template App NGINX模板

https://github.com/itnihao/zabbix-templates-Prod/blob/master/templates/zbx_templates_App_Nginx.xml

 监控php-fpm

添加用户参数,添加在zabbix_agentd.conf最后面即可!!!

UserParameter=phpfpm.status.pool,/usr/local/zabbix/scripts/check_phpfpm.sh pool
UserParameter=phpfpm.status.process.manager,/usr/local/zabbix/scripts/check_phpfpm.sh process_manager
UserParameter=phpfpm.status.start.since,/usr/local/zabbix/scripts/check_phpfpm.sh start_since
UserParameter=phpfpm.status.accepted.conn,/usr/local/zabbix/scripts/check_phpfpm.sh accepted_conn
UserParameter=phpfpm.status.listen.queue,/usr/local/zabbix/scripts/check_phpfpm.sh listen_queue
UserParameter=phpfpm.status.max.listen.queue,/usr/local/zabbix/scripts/check_phpfpm.sh max_listen_queue
UserParameter=phpfpm.status.listen.queue.len,/usr/local/zabbix/scripts/check_phpfpm.sh listen_queue_len
UserParameter=phpfpm.status.idle.processes,/usr/local/zabbix/scripts/check_phpfpm.sh idle_processes
UserParameter=phpfpm.status.active.processes,/usr/local/zabbix/scripts/check_phpfpm.sh active_processes
UserParameter=phpfpm.status.total.processes,/usr/local/zabbix/scripts/check_phpfpm.sh total_processes
UserParameter=phpfpm.status.max.active.processes,/usr/local/zabbix/scripts/check_phpfpm.sh max_active_processes
UserParameter=phpfpm.status.max.children.reached,/usr/local/zabbix/scripts/check_phpfpm.sh max_children_reached

然后编写脚本check_phpfpm.sh,给权限,改属主

#!/bin/bash

source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1 LOG_FILE=/var/log/zabbix/phpfpmstatus.log
curl http://127.0.0.1/fpm_status.php >${LOG_FILE} 2>&1 pool(){
awk '/pool/ {print $NF}' ${LOG_FILE}
}
process_manager() {
awk '/process manager/ {print $NF}' ${LOG_FILE}
} start_since(){
awk '/^start since:/ {print $NF}' ${LOG_FILE}
}
accepted_conn(){
awk '/^accepted conn:/ {print $NF}' ${LOG_FILE}
}
listen_queue(){
awk '/^listen queue:/ {print $NF}' ${LOG_FILE}
}
max_listen_queue(){
awk '/^max listen queue:/ {print $NF}' ${LOG_FILE}
}
listen_queue_len(){
awk '/^listen queue len:/ {print $NF}' ${LOG_FILE}
}
idle_processes(){
awk '/^idle processes:/ {print $NF}' ${LOG_FILE}
}
active_processes(){
awk '/^active processes:/ {print $NF}' ${LOG_FILE}
}
total_processes(){
awk '/^total processes:/ {print $NF}' ${LOG_FILE}
}
max_active_processes(){
awk '/^max active processes:/ {print $NF}' ${LOG_FILE}
}
max_children_reached(){
awk '/^max children reached:/ {print $NF}' ${LOG_FILE}
} case "$1" in
pool)
pool
;;
process_manager)
process_manager
;;
start_since)
start_since
;;
accepted_conn)
accepted_conn
;;
listen_queue)
listen_queue
;;
max_listen_queue)
max_listen_queue
;;
listen_queue_len)
listen_queue_len
;;
idle_processes)
idle_processes
;;
active_processes)
active_processes
;;
total_processes)
total_processes
;;
max_active_processes)
max_active_processes
;;
max_children_reached)
max_children_reached
;;
*)
echo "Usage: $0 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
esac

导入模板文件

https://github.com/itnihao/zabbix/blob/master/templates/zbx_templates_App_PHP_FPM.xml

发现错误,监控图显示php-fpm并没有数据显示




最新文章

  1. [2013-08-01]window.open
  2. 1.ARM的基础知识
  3. Call requires API level 21(Current min is 16)
  4. iOS获取状态栏和导航栏尺寸(宽度和高度)
  5. POJ 2021 Relative Relatives(map+树的遍历)
  6. Computational Geometry Template_Polygon
  7. spring 下载地址(拷贝)
  8. SAM维护的在线LCS
  9. 浅谈kafka streams
  10. 为Vue.js添加友好日志
  11. Spring Boot web简介及原理 day04
  12. FPGA驱动步进电机
  13. Linux系统CPU相关信息查询
  14. python unittest addCleanup中也加失败截图功能
  15. CSS 3D transforms
  16. David McCullough, Jr.为韦斯利高中毕业生演讲〈你并不特别〉
  17. Ubuntu 软件包管理工具 dpkg, APT 的一些命令(转载)
  18. MySQL中使用BIT属性
  19. Sun公司的产品AnswerBook存在多种漏洞
  20. 华为5573+联通4G上网SIM+ROS hap ac-RB962UiGS-5HacT2HnT 上网

热门文章

  1. javascript第一课练习
  2. NSThread 、NSRunLoop 和 Dispatch Queue
  3. UIAutomator 学习版
  4. kibana 统计每天注册数
  5. 查看当前发行版可以使用的shell
  6. javabeans的运用
  7. Shortest Word Distance 解答
  8. 修改UISearchBar背景色
  9. C函数的实现(strcpy,atoi,atof,itoa,reverse)
  10. 同一个页面多个CALayer重绘的办法