邮件告警
- 使用阿里云邮件推送
- 登陆阿里云,进入云通信 - 邮件推送页面(没有开通业务可以免费开通,每天可发送200封邮件)
-
添加发信域名(左边栏)- 新建域名 - 填写域名
-
点击配置 - 需要在你的域名里添加提示的记录
-
进入你的域名的管理页面进行相应配置
主机记录为空,填写@
- 配置完成后,点击验证,验证完成后,定义发信地址(左边栏)- 新建发信地址
-
选择验证成功的域名,新建帐号,发信类型先择触发邮件
-
设置SMTP密码 - 此密码将用于发件的脚本里
页面下方有提示的SMTP服务地址和端口号
- zabbix服务器上新建脚本和测试脚本
[root@draft ~]# vi mail.py #新建文件;内容如下:
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_user = 'admin@***.cn' #设置成你的发信地址;
mail_pass = 'qJq69vroCgsflhh' #设置成你的SMTP密码;
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+">"
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP("smtpdm.aliyun.com", 25) #设置SMTP服务地址;
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])
[root@draft ~]# chmod 755 mail.py #修改权限;
[root@draft ~]# ./mail.py ***@163.com "测试邮件" "`cat /etc/my.cnf`" #测试发件脚本;填写收件地址;
- 正确放置脚脚本
- 脚本需要放置在/usr/lib/zabbix/alertscripts下
[root@draft ~]# mv ./mail.py /usr/lib/zabbix/alertscripts/
[root@draft ~]# ls !$
ls /usr/lib/zabbix/alertscripts/
mail.py
- 由/etc/zabbix/zabbix_server.conf文件里配置的路径
AlertScriptsPath=/usr/lib/zabbix/alertscripts
- zabbix web界面配置
-
进入Administration - Media types - Create media type
默认的配置没有使用
-
填写Name - Type - Script name(脚本的名字) - Script parameters - Update(保存)
-
进入Administration - Users(配置用户)(在原有Admin的基础上配置)
使用发邮件功能的是管理员,而且管理员才有权限监察所有机器
-
点击Media - Add
Type - 选择上面添加的Media;
Send to - 填写收告警邮件的邮箱;
其他不变,当然也可以调整生效的时间和发送邮件的事件级别;
Add
Permissions页里看到这个User的权限,发送警告邮件需要Read-write权限;
- 点击Configuration - Actions,配置Actions
把默认的Actions关闭
Create action
填写Name
点击Operations(这里设置是发现问题的时候,发送邮件)
下面的Operations - 点击New
添加Send to Users (也可以选择发送给组)
点击Select
选择Send only to (上面添加的Media)
Conditions - 点击New - 点击Add
再点击Add
点击Recovery operations - 点击New - Add User - 设置Send only to - Add (跟Operations设置差不多)
这里设置是问题恢复会发送邮件;
最后点击Add, Actions建立完成
- 测试邮件告警
-
点击Configuration - Hosts - 选择监控中的主机 - 点击Triggers
-
Create Trigger
定义名字
Expression - Add - Insert - Add
添加一个必然会报警的项目,这里是设置网卡进流量小于10M就报警;
-
等待系统报警,检测间隔大概是一分钟
出现了一条报警,Actions已成功
-
把Trigger调整,问题恢复,会再次发送邮件
zabbix 监控nginx
- agent虚拟主机配置
[root@draft ~]# vi /etc/nginx/conf.d/default.conf #将以下语句放在虚拟主机配置文件的最后面;正在使用default.conf;
location /nginx_status
{
stub_status on; #主要语句;
access_log off;
allow 127.0.0.1;
deny all;
}
[root@draft ~]# service nginx start #启动服务;
Redirecting to /bin/systemctl start nginx.service
[root@draft ~]# nginx -s reload #重新加载;
[root@draft ~]# curl -x127.0.0.1:80 127.0.0.1/nginx_status #检查虚拟主机配置,以下为运行结果;
Active connections: 2
server accepts handled requests
2 2 7 #服务器接受,处理和总请求数;
Reading: 0 Writing: 1 Waiting: 1 #说明如下;
- 返回信息含义
字段 | 含义 |
---|---|
Active Connections | 当前活动连接数,其中也包括了等待状态的连接 |
accepts | 接收到的连接数 |
handled | 已经处理完的连接数,该数字一般和accepts一致,如果不一致那么说明Nginx出错了 |
requests | 总共处理的请求数,一个连接可以有多个请求,所以该值比accpets要大 |
Reading | 正在读取请求头信息的连接数 |
Writing | 正在发送响应报文的连接数 |
Waiting | 处于闲置状态,等待客户端发送请求的连接数 |
- agent编写监控脚本
[root@draft ~]# vi /usr/local/sbin/ngx_status.sh #写入以下内容;
#!/bin/bash
url="http://127.0.0.1/nginx_status" #定义两个变量,放便使用;
curl=/usr/bin/curl
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
$curl $url 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
$curl $url 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
$curl $url 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
$curl $url 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $3}'
}
$1
[root@draft ~]# chmod 755 !$
chmod 755 /usr/local/sbin/ngx_status.sh
[root@draft ~]# ll !$
ll /usr/local/sbin/ngx_status.sh
-rwxr-xr-x. 1 root root 735 11月 16 16:09 /usr/local/sbin/ngx_status.sh
- 脚本的使用情况
[root@draft sbin]# ngx_status.sh ping #这个值是使用pidof命令查出nginx的进程号,再统计行数;存在就是1, 进程都显示在一行里;也可用pgrep命令实现;
1
[root@draft sbin]# ngx_status.sh active #脚本运行情况,脚本可以把指定参数的值打印出来(对应于curl 127.0.0.1/nginx_status)里的各个值;
20
[root@draft sbin]# ngx_status.sh reading
0
[root@draft sbin]# ngx_status.sh writing
1
[root@draft sbin]# ngx_status.sh waiting
22
[root@draft sbin]# ngx_status.sh accepts
238
[root@draft sbin]# ngx_status.sh handled
242
[root@draft sbin]# ngx_status.sh requests
1593
- 将脚本指定给zabbix agent使用
[root@second mysql]# vi /etc/zabbix/zabbix_agentd.conf # 增加
UserParameter=nginx.status[*],/usr/local/sbin/ngx_status.sh $1
[root@second mysql]# systemctl restart zabbix-agent
- 服务端上测试脚本
[root@draft sbin]zabbix_get -s 192.168.87.150 -k 'nginx.status[accepts]'
2
- 配置zabbix-server web界面使用脚本监控zabbix-agent的nginx
使用导入xml的办法在web界面设置nginx的监控项
Configuration - Templates - Create Template
选取xml文件 - Import
xml文件请自行下载
https://pan.baidu.com/s/1T4_IrRixmcsEA91GhVhjkw
Templates列表里增加了nginx的监控项目
Configuration - Hosts - 选取agent - Templates - Select nginx的监控项 - Add - Update
完成了agent链接监控项目,即可看监控的结果
监控结果