一、zabbix的构架信息
1.1 zabbix-server
zabbix 的server 端,负责接受zabbix-agent的监控数据,并且提供各种zabbix 的监控功能
1.2 database
用户存储zabbix-agent,或者代理层的数据,本文只使用mysql
1.3 zabbix-web
zabbix 的web端,用户监控的展示和一些监控的配置
1.4 zabbix-java-gateway
用户监控jave 的jvm 的详细信息,zabbix 自身无法监控jvm的监控指标。需要通过网关来实现
1.5 zabbix-agent
zabbix 的代理端,收集主机上的监控数据,并发送zabbix 的服务端
1.6 zabbix_proxy
用于zabbix-agent 发送数据,最终发送zabbix-server,可以减轻zabbix-server的负载压力
二、安装zabbix各个组件
2.1 为zabbix 组件容器创建专用网络
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2.2 安装mysql8创建zabbix数据存储
docker run --name zabbix-mysql -it -v /zabbixx/mysql/conf/:/etc/mysql/my.cnf -v /zabbixx/mysql/data:/var/lib/mysql -v /zabbixx/mysql/logs:/var/log/mysql -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixB@Ba1" -e MYSQL_ROOT_PASSWORD="bobo1@Aa" -e TZ="Asia/Shanghai" -e ZBX_DBTLSCONNECT="required" --network=zabbix-net --ip=172.20.200.1 -p 3306:3306 --restart=always --privileged=true -d mysql:8.0.31 --character-set-server=utf8 --collation-server=utf8_bin
2.3 安装zabbix-java-gateway用户监控jvm(没有java监控,可以不用安装)
docker run --name zabbix-java-gateway -t -e TZ="Asia/Shanghai" --network=zabbix-net --ip=172.20.200.2 --restart=always --privileged=true -d zabbix/zabbix-java-gateway
2.4 安装zabbix-server 组件并连接上面安装的mysql
docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixB@Ba1" -e MYSQL_ROOT_PASSWORD="bobo1@Aa" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" -e TZ="Asia/Shanghai" --network=zabbix-net --ip=172.20.200.3 -p 10051:10051 --restart=always --privileged=true -d zabbix/zabbix-server-mysql
2.5 安装zabbix-web 组件并链接mysql 和zabbix-server
docker run --name zabbix-web-nginx-mysql -t -e ZBX_SERVER_HOST="zabbix-server-mysql" -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixB@Ba1" -e MYSQL_ROOT_PASSWORD="bobo1@Aa" -e TZ="Asia/Shanghai" -e PHP_TZ="Asia/shanghai" --network=zabbix-net --ip=172.20.240.4 -p 10000:8080 --restart=always --privileged=true -d zabbix/zabbix-web-nginx-mysql
2.6 安装zabbix-proxy 组件链接zabbix-server
docker run --name zabbix-proxy -t -e DB_SERVER_HOST="172.20.*.*" -e ZBX_SERVER_HOST="172.20.*.*" -e MYSQL_USER="zabbix" -e MYSQL_DATABASE="zabbix" -e MYSQL_PASSWORD="zBeG@Aa1" -e ZBX_HOSTNAME="zabbix-proxy-guanzhong" -e ZBX_TIMEOUT=30 -e ZBX_CACHESIZE=5000M -v /etc/localtime:/etc/localtime -p 10051:10051 -d zabbix/zabbix-proxy-mysql:latest
zabbix-proxy 文件具体内容
Server=172.20.*.*
ServerPort=10051
Hostname=zabbix-proxy-guanzhong
LogType=console
DBHost=172.20.*.*
DBName=zabbix
DBUser=zabbix
DBPassword=zBeG@Aa1
DBPort=3306
CacheSize=5000M
Timeout=30
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
SSHKeyLocation=/var/lib/zabbix/ssh_keys
User=zabbix
SSLCertLocation=/var/lib/zabbix/ssl/certs/
SSLKeyLocation=/var/lib/zabbix/ssl/keys/
SSLCALocation=/var/lib/zabbix/ssl/ssl_ca/
LoadModulePath=/var/lib/zabbix/modules/
StartPollers=200
三、zabbix-web浏览器浏览以及简单配置
3.1 在电脑浏览器输入http://ip/10000/zabbix,打开zabbix 首页,收入用户名Admin和密码zabbix,具体见下图
3.2 修改zabbix-web中文展示见下图
3.3 配置zabbix-proxy 接入zabbix-server,具体见下图。
四、zabbix配置发送邮件
4.1 配置zabbix告警媒介
修改下图的脚本参数,见下图
4,2 配置zabbix 告警动作
4.2.1 配置zabbix告警操作
<主题> 框输入
故障{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}
4.2.2 配置zabbix动作恢复操作
<主题> 框输入
恢复{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}
4.3 配置zabbix报警媒介
填写下面类型和收件人等等具体见下图
4.4 书写zabbix发送邮件自定义报警脚本
cd /usr/lib/zabbix/alertscripts
touch sendEmail.sh
#!/bin/bash
FILE=/usr/lib/zabbix/alertscripts/history.txt
subjectFILE=/usr/lib/zabbix/alertscripts/subject.txt
toFILE=/usr/lib/zabbix/alertscripts/to.txt
FILE_bak=/usr/lib/zabbix/alertscripts/bak.txt
echo "$1" >>$toFILE
echo "$2" >$subjectFILE
echo "$3" >$FILE
cd /usr/lib/zabbix/alertscripts
python3 sendEmail.py
echo " " >to.txt
touch sendEmail.py
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_msg(result,to):
msg_from="A1515802****@163.com"
pwd="JOXJFLCNKPGNMR**"
content="<h2>"+"zabbix告警情况:"+"<br />"+result[1]+"<br />"+result[2]+"<br />"+result[3]+"<br />"+result[4]+"<br />"+result[5]+"<br />"+result[6]+"<br />"+result[7]+"</h2>"
msg=MIMEText(content,"html","utf-8")
with open('subject.txt','r') as f:
subject=f.read()
f.close()
subject=Header(subject,"utf-8")
msg["Subject"]=subject
msg["From"]=msg_from
msg["To"]=to
msg["Accept-Language"]="zh-CN"
msg["Accept-Charset"]="ISO-8859-1,utf-8"
try:
ss=smtplib.SMTP_SSL("smtp.163.com",465)
ss.login(msg_from,pwd)
ss.sendmail(msg_from,to,msg.as_string())
ss.quit()
print ('send suessfully')
return True
except smtplib.SMTPException as e:
print (e)
return False
line_dict_uniq=dict()
with open('to.txt','r') as fd:
for line in fd.readlines():
to = line.split(' ')[0]
if to not in line_dict_uniq.values():
line_dict_uniq[to] = line
f=open('history.txt','r')
result=f.readlines()
print(result)
print(to)
send_msg(result,to)
else:
continue