Zabbix简介
基于Web界面的分布式系统监控的企业级开源软件。可以监控各种系统与设备,网络参数,保证服务器设备安全运营;提供灵活的通知机制。
Zabbix的特点和功能
1.特点
1)安装与配置简单
2)可视化web管理界面
3)免费开源
4)支持中文
5)自动发现
6)分布式监控
7)实时绘图
8)email通知
2.主要功能
CPU负荷、内存使用、磁盘使用、网络状况、端口监视、日志监控
zabbix进程:zabbix_agentd、zabbix_sender、zabbix_get、zabbix_server、zabbix_proxy(和zabbix_jave_gateway)
1.zabbix_agentd:客户端守护进程,收集客户端数据,如cpu负载、内存、磁盘等使用状况。
2.zabbix_sender:zabbix工具,用于客户端发送数据给server或proxy.通常用于耗时比较长的检查。为防止zabbix超时,可以在脚本执行完成后通过sender主动提交数据。
3.zabbix_get:zabbix工具,用于server或proxy获取客户端数据。(通常用于排错,如果server收不到客户端数据,可以使用zabbix_get获取数据来做故障排查)
4.zabbix_server:服务端守护进程。其他守护进程最后数据都要提交给zabbix_server
5.zabbix_proxy:zabbix代理守护进程,类似中转站。
6.zabbix_java_gateway:Java网关,类似agentd,但只能用于Java.
所以zabbix监控有两种模式:
server_agentd模式:简单,监控主机少。
server-proxy-agentd模式:监控主机多,减轻server压力。
一/zabbix安装
yum源配置
rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.9-1.el7.x86_64.rpm
安装相关软件
yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb zabbix-agent -y
修改PHP时区配置
vim /etc/httpd/conf.d/zabbix.conf
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai #修改成Asia/Shanghai
</IfModule>
</Directory>
启动数据库
systemctl start mariadb #启动数据库
systemctl enable mariadb #设置数据库开机自启
创建zabbix所用的数据库及用户
mysql
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@'localhost' identified by '123456';
exit
cd /usr/share/doc/zabbix-server-mysql-3.0.36 zcat create.sql.gz |mysql -uzabbix -p123456 zabbix #导入数据库
修改zabbix配置
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost #数据库所在主机
DBName=zabbix #数据库名
DBUser=zabbix #数据库用户
DBPassword=123456 #数据库密码
启动zabbix及http
systemctl start zabbix-server
systemctl enable zabbix-server
systemctl start httpd
systemctl enable httpd
systemctl start zabbix-agent
systemctl enable zabbix-agent
web界面安装server
客户端安装zabbix-agent
yum install zabbix-agent -y
修改一下参数
vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.190 #IP为服务器IP
ServerActive=10.0.0.190 #IP为服务器IP
Hostname=10.0.0.190 #IP为服务器IP
启动zabbix客户端
systemctl start zabbix-agent
systemctl enable zabbix-agent
客户端自动发现与自动注册功能
修改IP发现范围
添加自动发现动作
添加自动注册功能
可以查看到已经发现两台客户端
在添加了两台被监控的主机
二/nginx监控
下载nginx的监控模板
在配置-模板-导入,添加模板
给主机与模板链接
在zabbix客户端编写nginx监控脚本
cat /etc/zabbix/zabbix_agentd.d/nginx_lzx.sh
#!/bin/bash
HOST="10.0.0.101"
PORT="80"
#检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
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 writing {
/usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing'| awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting'| awk '{print $6}'
}
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
$1
修改客户端zabbix配置文件,重启服务器
vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_lzx.sh $1
systemctl restart zabbix-agent
查看nginx的监控是否开启
curl -L http://10.0.0.101/nginx_status
Active connections: 1
server accepts handled requests
288 288 288
Reading: 0 Writing: 1 Waiting: 0
在服务端安装zabbix测试工具
yum install zabbix-get.x86_64
zabbix_get -s 10.0.0.101 -p 10050 -k "nginx.status[reading]"
0 #服务器可以获取到客户端的监控数据
在服务端可以看到监控参数
三/zabbix邮件告警
编写脚本
cat /usr/lib/zabbix/alertscripts/zabbix_sendmail.py
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com' # 邮箱smtp配置
mail_user = 'xxxxxxxxxxx' # 邮箱账号
mail_pass = 'xxxxxxxxxxx' # 邮箱密码
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__":
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
修改脚本路径
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
给脚本执行权限,测试脚本,如果发送失败,可能是网络不通,或者163邮箱的imtp/pop3没开
chmod +x zabbix-mail.py
chown -R zabbix.zabbix zabbix-mail.py
python zabbix-mail.py xxxxxxxxxx@qq.com test test
查看当前被监控的主机
将nginx监控项里的监控时间间隔改为1
在admin用户中添加报警媒介,邮件报警
zabbix服务器报警媒介类型
增加三个参数
{ALERT.SENDTO} 收件人地址
{ALERT.SUBJECT} 主题
{ALERT.MESSAGE} 详细内容
配置报警动作,创建新的触发动作
配置操作
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复操作
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
你的浏览器目前处于缩放状态,页面可能会出现错位现象,建议100%大小显示。