zabbix数据库分离
流程
数据库授权
备份zabbix
将备份的数据库文件导入到新的数据库中
修改zabbix-server配置文件
操作
zabbix应该处在在网环境中,而数据库应该处在内网环境中,如果在旧的数据库服务器上进行备份,若是全库备份则无需在新数据库上创建库,单库备份,需要在新的数据库上创建数据库
结构
zabbix-server : 192.168.1.10(外网) 192.168.2.10(内网)
mysql:192.168.1.11(外网) 192.168.2.11(内网)
web02:192.168.1.12(外网)192.168.2.12(内网)
在192.168.1.12上创建数据库mysql5.7,二进制包安装mysql5.7
卸载掉之前的版本
确保不会出现mariadb
yum -y remove mariadb-libs.x86_64
解包
tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/src
创建软连接(便于版本更换和回滚)
ln -s /usr/src/mysql-5.7.22-linux-glibc2.12-x86_64/ /usr/local/mysql
创建mysql用户
useradd -M -s /sbin/nologin mysql
配置环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
修改配置文件
vim /etc/my.cnf
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
# socket=/var/lib/mysql/mysql.sock
[mysqld]
#设置3306端口
port = 3306
# socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
初始化数据库
mysqld --user=mysql --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
保留密码
修改权限
chown -R mysql:mysql /usr/local/mysql
创建启动连接
cd /usr/local/mysql/
cp -a support-files/mysql.server /etc/init.d/mysqld
修改密码流程
跳过验证密码
启动数据库
service mysqld start --skip-grant-tables
修改连接数据库的root密码
update mysql.user set authentication_string=password('123') where user='root' and host='localhost';
重启
下次登陆需要先修改密码
通过验证密码直接修改
service mysqld start
mysql -uroot -p'系统密码'
set password=password('复杂点的密码');
mysql -uroot -p"密码"
创建库
create database zabbix character set utf8 collate utf8_bin;
授权
grant all privileges on zabbix.* to zabbix@'%' identified by 'CHENCHENxihuanLJH';
导库
server端
mysqldump -uroot zabbix > `date +%F`-zabbix.sql
直接远程将数据库发到指定主机IP,不需要scp
cat 2020-10-16-zabbix.sql | mysql -uzabbix -p'CHENCHENxihuanLJH' -h 192.168.1.12 zabbix
修改zabbix server的数据库连接信息
vim /etc/zabbix/zabbix_server.conf
书库主机IP
数据库名
登录数据库用户名
登录数据库使用的密码(这里和管理员密码统一了)
修改zabbix web(httpd)连接数据库信息
vim /etc/zabbix/web/zabbix.conf.php
重启
systemctl restart zabbix-server httpd
自定义监控项
简介
我们可以自己添加自己需要的监控项
练习一:添加tps监控项
查看取值
tps:每秒事务处理量
查看方式
下载sysstat
取sda磁盘tps值
iostat | awk '/^sda/{print $2}'
在目录中新增监控项
vim /etc/zabbix/zabbix_agentd.d/iostat.conf
格式:UserParameter=<key>,<shell command> (键值对)
UserParameter=iotps,iostat | awk '/^sda/{print $2}'
重启agent
systemctl restart zabbix-agent.service
add:当然也可以选择直接在主配置文件中修改,这里制定了include目录
先进性客户端服务端测试
客户端测试设置的监控项是否正常
zabbix_agentd -p | grep iotps
在zabbixserver端获取zabbixagent端自定义的监控是否正常
yum -y install zabbix-get
格式:
zabbix_get -s IP_addr -k KEY
zabbixweb前端页面进行关联展示
点击配置-主机-对应主机-监控项-创建监控项-名称-键值(监控项目名称)信息类型-单位
点击检测中-最新数据-等待数据
键值和键名一样即可
点击添加
寻找方式
1:监测,最新数据
如果管理的服务器结构足够复杂,可以通过选择主机群组和主机配合名称查询
2:配置,主机,监控项
练习二:添加11项TCP监听状态(也可以进行克隆添加进行配置)
11中监听状态参考
使用man netstat即可查询
vim tcp_state.txt
CLOSING
LISTEN
SYN_SENT
SYN_RECV
ESTABLISHED
FIN_WAIT1
CLOSE_WAIT
FIN_WAIT2
LAST_ACK
TIME_WAIT
CLOSE
加入到配置文件
for i in `cat tcp_state.txt` ;do echo "UserParameter=${i},netstat -ant|grep -c $i" >>/etc/zabbix/zabbix_agentd.d/tcp_stat.conf; done
此时不能用-p选项,查看进程需要root权限
cat /etc/zabbix/zabbix_agentd.d/tcp_stat.conf
重启服务
systemctl restart zabbix-agent.service
生产环境中使用:zabbix_server -R config_cache_reload
服务端找几个监听状态测试一下
下载zabbix_get工具
yum -y install zabbix-get
zabbix_get -s 192.168.1.11 -k ESTABLISHED
添加监控项
创建一个TCP应用集
创建监控项
配置
浏览器上按F12,再点击添加进行批量添加,出现一个item.php
拷贝post上去的URL和数据
复制数据
命令行批量提交
vim tcp_state.txt
因为页面已经添加了ESTABLISH,所以删除ESTABLISH
for i in `cat tcp_state.txt`;do curl -X POST -d "复制的数据" http://192.168.1.10/zabbix/items.php;done
复制的数据需要修改变量
执行
出现报错,因为没有登录权限,需要使用curl模拟登陆
退出登录,登陆之前先按F12,找index.php页面点击并查找提交的数据
内容为
name=Admin&password=zabbix&autologin=1&enter=Sign+in
模拟登陆
curl -L -X POST -d "name=Admin&password=zabbix&autologin=1&enter=Sign+in" -b cookie -c cookie http://192.168.1.10/zabbix/index.php
-L 选项可以显示出跳转信息 之前保存的界面url也用上
生成cookie文件
取后16位替换sid
awk '/zbx/{print $NF}' cookice |cut -b 17-32
再次上传
for i in `cat tcp_state.txt`;do curl -X POST -b cookie -c cookie -d "复制的数据" http://192.168.1.10/zabbix/items.php;done
复制的数据中应该有name、key和sid三处修改
修改成功
去web界面配置
看似复杂,但是其实就两步,第一步产生登录的cookie,第二步抓取参数(登录url、name、key、SID)并上传数据
如果没有出现参数可以使用 zabbix_server -R config_cache_reload 刷新
zabbix默认单位是KB如果自定义的值的单位是字节或者是MB,一定要使用乘除法在定义时就统一单位,换算成字节
宏
概念
宏(Macros)的作用是便于在模板,Item、Trigger中对数据进行变量引用。宏的名称为{$名称},宏名称定义可以使用A-Z、0-9、_。例如:net.tcp.service[ssh,{$SSH_PORT}],其中{$SSH_PORT}就是一个宏,可以在不同主机上配置不同的值。其实宏的概念有点类似于shell脚本中的变量,主要便于使用。
查看
常见的宏变量
主机相关
{HOST.NAME} 主机名称
{HOST.IP} 主机IP
{HOST.METADATA} 设备元数据(自动注册的时候会发这种宏的通知给你)
时间相关
{DATE} 当前时间
{EVENT.DATE} {EVENT.TIME} 告警时间
触发器相关
{TRIGGER.SEVERITY} 触发器告警等级
{TRIGGER.NAME} 触发器名
{TRIGGER.KEY1} 触发器告警项目
{TRIGGER.STATUS} 触发器状态
监控项相关
{ITEM.NAME}:{ITEM.VALUE} 监控项名
动作(Action)相关
{ACTION.ID} Action(动作)的数字标识
{ACTION.NAME} Action(动作)名
自动发现相关
{DISCOVERY.DEVICE.IPADDRESS} 被发现的设备地址
{DISCOVERY.DEVICE.STATUS} 被发现设备的状态: 可能是Up 或 Down
事件(EVENT)相关
{EVENT.ACK.STATUS} 事件的确认状态
{EVENT.AGE} 触发动作的事件持续时间
{EVENT.ID} 触发动作的事件数字标识
{EVENT.STATUS} 触发动作的事件状态
报警脚本相关
{ALERT.MESSAGE} 报警脚本具体内容
{ALERT.SENDTO} 报警时的收件人
{ALERT.SUBJECT} 报警信息的主题
如果想查找更多关于zabbix的内置宏变量,可以去官网查找更详细的信息:
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
触发器
触发器:
zabbix中监控项仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器(Trigger)"正是用于为监控项所收集的数据定义阈值,每一个触发器仅能管理至一个监控项,但是可以为一个监控项同时使用多个触发器;意思就是,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警。一个触发器由一个表达式构成,它定义了监控项所采集的数据的一个阈值,一旦某次采集的数据超出了触发器定义的阈值,触发器状态将会转为"problem";而当采取的数据再次回归至合理的范围内时,其状态将重新返回到"OK"。
触发器函数的分类
常用触发函数
diff 判断最近两个值是否相同
比较最近数据的值与前一个数据的值,如果值相等,则函数运行结果为0,不同则为1
应用场景:对比passwd是否修改,检测主机名是否被修改等;
nodata 判断是否能接受到数据
检测一段时间内能否接收到数据,返回值为1表示没有接收到数据,返回值为0表示接收到数据了。该函数中需要输入时间参数
last 获取最新的数据
获取最近一段时间内或指定个数的数据
格式:last(sec|#num,<time_shift>)
last(3m)=N #最近3分钟内该值等于N
last(#3)>N #第3次监控数值大于N
last(#3,3m)<N #最近3分钟内第3次的监控数值小于N
应用场景:求系统中运行的进程数
max 最大值(min 最小值)
指在一段时间内,或者指定的数据个数中,找出最大值。该函数只支持float和int数据类型
avg 求平均值
指在一段时间内,或者指定的数据个数中,求平均值,该函数只支持float和int数据类型。
触发器创建
核心配置界面
TPS触发器添加
主机-配置-触发器-创建触发器
主机监控项出现
用户登录触发器
测试一下
大于2的数都会触发
监控项中修改报警触发响应时间
找到这个监控项修改触发间隔
再点击更新就好了
多了一个触发器
开启web界面报警模式
实现web界面和声音报警
新建两个11的窗口
查看仪表盘并标记
不仅如此,还会有一般严重的报警声音
每个默认监控项都会有一个键值,我们使用默认键值时不需要自己创建键值,直接使用就好,我们可以为具体某一个触发器寻找监控项,也可以自创监控项,然后在建立自己设定的触发器
自创的键
可以直接拿出这个值
报警
简介
当zabbix中的触发器,达到阈值时,会触发告警机制,zabbix支持使用邮件,短信,电话,微信,钉钉等方式实现告警 。
发送告警流程
zabbix发送告警流程为,客户端定期采集指定监控项的的相关数据,然后发送给zabbix-server服务器,zabbix-server对数据进程存储和分析,如果监控项的值满级告警表达式中的阈值,则会触发一个告警,但告警并不会主动通知给用户,此时再zabbix-web页面会看到故障信息。如果此故障同时需要发送个用户,需要动作(Action)页面中对告警信息进行规制匹配,并按照设置发送用户信息或执行命令。
Action(动作)
Action指定的就是发生了什么事,根据一定的条件来采取什么样的措施,可以发送消息,也可以是执行命令。
Action中的事件来源有四种:触发器,网络自动发现,Agent主动注册和内部事件(Internal)。
Action配置详解
邮件报警
思路
centos6不支持zabbix自带email,安装mailx实现脚本发送email
安装sendmail和mailx
yum -y install sendmail mailx
systemctl start sendmail
在家目录创建一个.sh认证文件,并给它执行权限
vim A.sh
#!/bin/bash
mkdir /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
chmod +x A.sh
sh A.sh
vim /etc/mail.rc
set smtp-use-starttls
set smtp=smtp.qq.com
set from=自己的qq邮箱
set smtp-auth-user=自己的qq邮箱
set smtp-auth-password=你的密钥
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs/
发送邮件
echo "邮件内容" | mail -s "邮件标题" QQ号@qq.com
发送副本
echo "hello world" | mail -s "邮件标题" -a 文件路径 QQ号@qq.com
cd /usr/lib/zabbix/alertscripts/
vim email_notification.sh
#!/bin/bash
to=$1
subject=$2
File=/tmp/mail.txt
echo $3 > $File
dos2unix -k $File
cat $File | mail -s "$subject" "$to"
在/tmp下创建文件mail.txt写入内容
执行
./email_notification.sh 503197281@qq.com test 123
管理报警媒介类型-创建媒体类型
报警媒介类型配置(发件人)
配置动作
配置收件人
开启报警方式
启用后点进去,然后再点操作
模板:
默认标题
故障{TRIGGER.STATUS},服务器名:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息界面
告警主机:{HOST.NAME}
告警主机IP地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
操作界面详解
配置恢复动作:
模板:将“故障”修改成已恢复即可
进入发件人配置界面
授权配置(qq)
登录qq邮箱,选择设置、账户
先用手机发送,然后点击我已发送
使用手机发送
复制授权码
附163配置界面:
授权配置(网易)
加入授权码,点击更新
配置收件人
创建三个用户显示邮件发送结果
问题报警
解决报警
可以在报表动作日志中查看日志
钉钉报警
登录钉钉客户端,创建一个群,把需要收到报警信息的人员都拉到这个群内.然后点击群右上角的"群机器人"->"添加机器人"->"自定义",记录该机器人的webhook值。
服务器端添加测试脚本
vim /usr/lib/zabbix/alertscripts/dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import datetime
webhook = "https://oapi.dingtalk.com/robot/send?access_token=552a6b58325ccaa206fac36c45267e1e14d938bc5dd97e0c5391d81aa5fd6238"
user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content":text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/dingding.log"):
f=open("/usr/lib/zabbix/dingding.log","a+")
else:
f=open("/usr/lib/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送失败"+"\n"+str(text))
f.close()
脚本内容补充说明:
yum -y install python-pip; pip install --upgrade pip
pip install requests
touch /usr/lib/zabbix/dingding.log
测试
/usr/lib/zabbix/alertscripts/dingding.py 13021020077 告警 服务器告警
WEB界面添加监控方式
创建媒体类型
添加收件人信息:
微信报警
首先申请企业微信
https://qy.weixin.qq.com/
记录AgentID和Secret:
点击我的企业,企业信息可以查看企业ID即CropID.
查看部门id
测试微信接口
创建脚本
cd /usr/lib/zabbix/alertscripts/
vim weixin.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import datetime
webhook = "https://oapi.dingtalk.com/robot/send?access_token=552a6b58325ccaa206fac36c45267e1e14d938bc5dd97e0c5391d81aa5fd6238"
user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content":text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/dingding.log"):
f=open("/usr/lib/zabbix/dingding.log","a+")
else:
f=open("/usr/lib/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送失败"+"\n"+str(text))
f.close()
chmod +x weixin.py
/usr/lib/zabbix/alertscripts/weixin.py 李嘉豪 报警 服务器崩了
测试
web界面操作
加入微信报警方式
添加收件人
配置动作
自定义模块
往往默认监控项和实际生产环境需求并不符合,所以需要自定义模板监控项和触发器,而且需要多调试才能找到最适合当前环境的监控阈值
检测用户文件修改
在监控项中配置
点击更新
检测
为什么会说解决了呢?因为每2秒都会与前两秒进行对比,第二次对比并不会发现有所变化,所以报警解决
发布者:LJH,转发请注明出处:https://www.ljh.cool/36722.html