添加 Host 主机(被监控端)
创建主机群组
添加host主机
选择模块:
在弹出的模块里选择一个自己需要的模块:
查看主机状态(绿色为连通)
配置 Zabbix 监控nginx 服务
zabbix默认自带了很多有用的监控模板,通常对主机运行状态使用默认的模板就可以了,有时候我们需要根据实际情况自定义一些监控信息。下面就介绍一下zabbix监控nginx服务的配置过程。整个配置过程大致如下:
1,确定监控内容
2,编写agent端的监控脚本
3,配置zabbix_agentd.conf文件,定义监控脚本key
4,zabbix服务端使用zabbix_get 测试获取数据
5,登录zabbix web配置台;
1)确定监控内容(被监控端)
nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等。
在nginx的配置文件中,添加status配置
#在虚拟主机 server {} 中加入上面配置,也可以单独定义一个专门用于监控的虚拟主机。
#deny all , 拒绝除 allow 中的主机之外所有主机访问此URL ,实现过程中如果遇到403 ,有可能是你把自己测试的机器拒绝了
[root@server01 ~]# vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.30.11; #server的ip,一般是内网地址
deny all;
}
[root@server01 ~]# nginx -s reload
在zabbix_server上测试访问
[root@zabbix_server ~]# curl http://192.168.30.12/status
Active connections: 2
server accepts handled requests
4 4 4
Reading: 0 Writing: 1 Waiting: 1
nginx Status 详细说明:
在访问效率很高,请求很快被处理完毕的情况下,Waiting 数比较多是正常的。如果 reading + writing 数较多,则说明并发访问量很大,正在处理过程中。
2)监控脚本编写,此脚本需要配置在被监控端
编写脚本,放于/usr/local/zabbix/scripts目录下,定义监控脚本key
通过脚本获取status页面信息的关键值,zabbix server通过这些关键值才能生成数据图像,获取status的关键值脚本如下:
[root@server01 ~]# mkdir /usr/local/zabbix/scripts
[root@server01 ~]# vim /usr/local/zabbix/scripts/ngx_status.sh
#! /bin/bash
# Description:zabbix监控nginx状态
# Note:此脚本需要配置在被监控端
HOST="127.0.0.1"
PORT="80"
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行function
$1
脚本写完先在本地测试一下
[root@server01 ~]# sh /usr/local/zabbix/scripts/ngx_status.sh active
1
[root@server01 ~]# sh /usr/local/zabbix/scripts/ngx_status.sh accepts
16
赋予脚本执行权限:
[root@server01 ~]# chmod +x /usr/local/zabbix/scripts/ngx_status.sh
3)修改zabbix-agentd.conf
使用脚本监控需要将zabbix-agentd.conf文件中的UnsafeUserParameters=1 开启。
[root@server01 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
UnsafeUserParameters=1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ #启用引用此目录文件
添加zabbix监控项配置文件(当中指定了监控项key的文件)
[root@server01 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx_status.conf
UserParameter=nginx.status[*],/usr/local/zabbix/scripts/ngx_status.sh $1
#[*]代表key接受任意个参数**,这些参数就是在web端要明确写出来的参数,也是后面命令或脚本中接受的参数,用$1,$2来表示第几个参数。如果command中的命令本身带有$1等信息(如awk命令),需要写为$$1
配置好后重启zabbix-agent
[root@server01 ~]# systemctl restart zabbix_agentd
4)zabbix服务端使用zabbix_get 测试获取数据
[root@zabbix_server ~]# zabbix_get -s 192.168.30.12 -p 10050 -k nginx.status[ping]
1
[root@zabbix_server ~]# zabbix_get -s 192.168.30.12 -p 10050 -k nginx.status[active]
1
[root@zabbix_server ~]# zabbix_get -s 192.168.30.12 -p 10050 -k nginx.status[accepts]
21
5)WEB界面配置
服务端测试正常后就可以在web界面配置监控了,zabbix配置都是通过界面配置,要熟练配置监控,要了解zabbix的每个组件的功能及各个组件之间的关系,否则看着一堆菜单选项会无从下手。
zabbix的配置流程大致如下:
创建主机组 -》添加主机 -》 创建监控模板 -》 创建应用集 -》创建监控项 -》 创建图像—》创建触发器 -》 创建事件 -》创建处理动作 -》 创建用户组与用户 -》创建媒介-》创建告警方式
创建监控模板开始,通过配置监控模板的方式,让所有相同的监控需求的主机都统一调用这个监控模板,这样就不用一个一个地添加监控项了。
创建模板
创建模板:Configuration–>Templates–>Greate template,创建模板名称:Template App NGINX,单击Add即可
给模板依次添加相应Item、Trigger、Graphs,如下图所示
返回模板页已经看到创建的模板已经生成,这时创建的模板是空模板,要在这个模板中创建应用集,监控项等,点击下图中的应用集就可以直接创建。
创建应用集
应用集可以理解为是给整个模板中的一部分监控项分类,一个模板中可以创建不同类别的监控项,创建应用集只是起一个名字
创建监控项
从上图中的应用集进入后就可以在应用集中创建监控项了,见下图
创建监控项要注意命名方式,能够见名知意,最关键的是键值 ,这里的键值一定要和agent端的配置文件中定义的键值一致。
在监控脚本中,一共定义了8个监控项,所以这里的监控项页要创建8个,重复上面的步奏,创建脚本中相应的监控项。
创建图像
通过监控项创建图像,在选择要显示图像的监控项时,可以选择多个监控项,这样就可以在一个图像中显示多个数据的线图。
关联模板(将刚才创建的监控模板应用到server01主机上)
关联模板:Configuration–>Hosts–>server01–Templates,选择模板,点击Updtae即可。
最后看看效果图
配置 zabbix 监控 MySQL
和监控nginx一样,寻找合适的脚本,不过,脚本并不是那么容易就可以找得到的! 要么自己手动去写,要么自己找到的拿来修改,都是需要花费代价的!
zabbix3.0 server已自带mysql的模板了,只需配置好agent客户端,然后在web端给主机增加模板就行了。Zabbix_agent客户端操作:
数据库用户授权
mysql> grant all on *.* to zabbix@‘localhost’ identified by “123456”;
mysql> flush privileges;
cp模版mysql自带模板到zabbix目录下
[root@server01 ~]# cp /root/zabbix-4.2.6/conf/zabbix_agentd/userparameter_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/
建立数据库和 zabbix 的连接信息
在zabbix_agent服务目录下创建.my.cnf 连接文件
[root@server01 ~]# vim /usr/local/zabbix/etc/.my.cnf
#Zabbix Agent
[mysql]
host=localhost
user=zabbix
password=123456
socket=/usr/local/mysql/mysql.sock
[mysqladmin]
host=localhost
user=zabbix
password=123456
socket=/usr/local/mysql/mysql.sock
然后查看 userparameter_mysql.conf 文件,看到类似 HOME=/var/lib/zabbix 的路径设置,把路径全都替换为 /usr/local/zabbix/etc/,也就是上面的.my.cnf文件所在的目录路径。
[root@server01 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
将HOME=/var/lib/zabbix 全部改成 HOME=/usr/local/zabbix/etc/
一共是3处要替换(把原来的改成这样)
重启zabbix_agentd
[root@server01 ~]# systemctl restart zabbix_agentd
测试
接着在zabbix_server服务端进行命令行测试
[root@zabbix_server ~]# zabbix_get -s 192.168.30.12 -p 10050 -k “mysql.status[Uptime]”
sh: mysql: command not found
解决方法:
在userparameter_mysql.conf中关于mysql命令前面添加绝对路径,然后再重启zabbix_agentd服务。(将原来的换成这样)
[root@server01 ~]# systemctl restart zabbix_agentd
[root@server01 ~]# /etc/init.d/mysqld restart
[root@zabbix_server ~]# zabbix_get -s 192.168.30.12 -p 10050 -k “mysql.status[Uptime]”
29304
如果出现类似这一串key的数字,就说明配置ok,服务端能监控到客户端的mysql数据了!
成功啦,之后在监控界面增加主机对应的MySQL模板就ok了。
模板应用主机:
登录zabbix监控界面,在“配置”-“模板”里可以看到自带的mysql监控模板
在相应主机监控配置里添加mysql的监控模版(zabbix自带的)即可。
下面是mysql监控项的效果图:
【1】监控mysql的带宽:在zabbix前端可以实时查看mysql发送接收的字节数。其中bytes received表示从所有客户端接收到的字节数,bytes sent表示发送给所有客户端的字节数。
【2】监控mysql的操作状态:在zabbix前端可以实时查看各种SQL语句每秒钟的操作次数。
每秒多少个语句插入进来relect这行当中
Zabbix邮件报警配置:
Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常。
在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。
邮件服务可以使用系统自带的邮件服务来发送邮件或者使用其他邮件服务调用第三方邮件来发送警告邮件
首先安装mailx组件并配置好能够通过第三方邮箱发送邮件
安装mailx
[root@zabbix_server ~]# yum -y install mailx
编辑mailx的配置文件
[root@zabbix_server ~]#vim /etc/mail.rc
在最末尾添加如下信息
set from=test_mailit@163.com #用谁发
set smtp=smtp.163.com #用的什么邮箱
set smtp-auth-user=test_mailit@163.com #发给谁
set smtp-auth-password=nihao123 #你的密码 注意:此为163邮箱设置的客户端授权码,授权码是用于登录第三方邮件客户端的专用密码。
set smtp-auth=login
不管你使用的是163/126邮箱还是qq邮箱,你都必须开通pop3服务,而且163/126/qq邮箱还要求使用第三方客户端发送邮件时必须使用授权码验证。
测试邮件
[root@zabbix_server ~]# ping www.baidu.com #测试是否能连上网!
[root@zabbix_server ~]# echo “zabbix test mail” |mailx -s “zabbix” XXXX@qq.com
在zabbix服务端写脚本发送邮件:
编写脚本
[root@zabbix_server ~]# cd /usr/local/zabbix/share/zabbix/alertscripts/
[root@zabbix_server alertscripts]# vim sendmail.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mailx -s "${subject}" $1 >>/tmp/sendmail.log 2>&1
授权:
[root@zabbix_server alertscripts]# touch /tmp/sendmail.log
[root@zabbix_server alertscripts]# chmod 777 /tmp/sendmail.log
[root@zabbix_server alertscripts]# chown zabbix:zabbix sendmail.sh
[root@zabbix_server alertscripts]# chmod +x sendmail.sh
修改主配置文件,让服务读取到这个脚本:
[root@zabbix_server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
添加一行:
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
测试脚本发送邮件
/usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh 136xxx@126.com “测试邮件标题” “测试邮件内容”
页面添加报警媒介
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
很多人安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。
这是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。
在2.x版本不存在这个问题,默认会传3个参数。
指定报警用户
创建触发器
设置动作
新建动作:Action-Email
操作
说明:
默认操作步骤持续时间:重新发送报警的时间
操作细节:重复发几次,1-0次就是按照默认的时间重复发送
步骤持续时间:重发的时间,0为使用默认的时间
发送到用户群组:发送给哪个组(组里的用户都可以收到,前提是用户配置了media type的参数)
发送到用户:发送给那个用户
仅送到;使用那个media type来发送(这里可以自己设置发送内容)
这里可以配置升级报警:就是1-3次报警发给谁,4-6报警发给谁,间隔多长时间,就是在添加几个,用户或者组不一样,发送的media type也可以不一样。
恢复操作
测试,关闭 zabbix 客户端服务 zabbix_agentd
设置完之后关闭zabbix_agent服务,就会给你的邮箱发送一个消息,说明设置成功
[root@server01 ~]# /etc/init.d/zabbix_agentd stop
延迟比较大,大概要5分钟左右
可以在日志看送达状态:
然后你把agent服务打开,还会给你发一封邮件,已经修好的邮件!
设置nginx自动修复
上面建过监控项了,所以这里就不要创建监控项了
创建触发器
创建动作
关闭nginx服务,会给你发送一封nginx服务坏了的邮件。然后它自动会帮你修复,再给你发一封邮件告诉你nginx服务已修好!
设置mysql自动修复
创建监控项(在你创的模板当中创建)
创建触发器
(选择你刚才创建的监控项),如果这个结果等于0这个触发器就会被触发
动作(如果mysql等于0就会触发mysql的动作)
设置自动修复
运行mysql用户的是zabbix,他没有这个权限,所以要给zabbix权限
关闭mysql服务,会给你发送一封mysql服务坏了的邮件。然后它自动会帮你修复,再给你发一封邮件告诉你修好了!
关掉mysql
mysqll自动修复
配置 zabbix 自动发现并监控
随着监控主机不断增多,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,自动发现便是这个功能,当然前提条件是所有服务器都已经安装了agent或者snmp,zabbix server扫描配置好的ip段,自动添加host,自动给host link模板,自动加到主机组里,自动创建项目(item)、自动创建图像等等。自动发现功能让我们能更快速的部署zabbix、简化zabbix管理、并且在经常变动的环境里面也不需要花太多的精力,毕竟自动发现也能随时变化。
下面我们来看看自动发现如何使用
自己再手动装一个zabbix_agent服务,除了这不一样,剩下都一样
创建自动发现
先配置server端的发现规则:配置自动发现
配置好了,到“监测自动发现”里面去看看
添加关联动作
创建动作将自动发现的主机自动链接模板。
创建动作auto_linux
我创建了三个规则必须同时满足才能触发动作里操作
A 主机IP 地址段必须是192.168.30.12到192.168.30.20
B 添加的类型必须是,以agent客户端来传输数据的
C 刚才我添加system.uname 这个key是获取 OS信息的,里面必须包含了Linux才能触发,意思就是这个动作里的操作只是给linux主机用的
操作
前面三个条件都满足了,就执行下面这四个操作
先发送有主机上线信息给Admin用户(如果定义好了媒介能发送Email),在添加主机,给主机规组,连接模板(开启服务)
查看
等待一会,就可以发现自动探测监控了
在“报表–动作日志”里查看,这里有个自动发现成功的日志,说明上线已经成功了。
这里可以看到192.168.30.12的ip主机已经在主机配置里面了
自动发现主机的邮件也收到了:
补充:
Zabbix Agent的工作模式对比:
被动模式流程,被动模式一定要记得设置Server = ServerIP
被动模式工作流程:
Server 打开一个TCP连接
Server发送一个key 到zabbix agent,key的名字为agent.ping
Agent接受这个请求,然后响应< HEADER >< DATALEN >
Server对接受到的数据进行处理
TCP连接关闭
主动模式流程,主动模式一定要记得设置ServerActive=ServerIP
Agent向Server建立一个TCP连接
Agent请求需要检测的数据列表
Server响应Agent,发送一个Items列表
Agent允许响应
TCP连接完成本次会话关闭
Agent开始周期性地收集数据