目录
3.33 配置server,使其支持邮件报警(直接跳过钉钉报警步骤前往3.4 动作 步骤)
注:前面已经介绍了zabbix的安装及基本使用,体验一下zabbix监控的魅力,那么这一张就围绕怎么部署符合自己需求的监控环境来解说。
一.用户
1.用户设置
1.1 修改管理员用户密码
默认情况,zabbix的管理员用户密码是 zabbix ,这样太过于简单,风险非常高,因此安装完zabbix后首先就是改密码
流程:
点击管理——>点击用户——>点击admin—>点击修改密码—>然后点击更新即可(修改密码完成后你当前登录账户是不会立即退出的,只有在下次进行登录的时候才需要输入新密码)
1.2 创建报警用户
流程:
点击管理—>点击用户—>点击创建用户—>根据实际提示信息填写用户信息(因为没创建报警设置现在这里可以不填写报警信息)
1.3 创建其他用户
流程:
点击管理—>点击用户—>点击创建用户(示例:今天新来一位新同事,需要他先了解清楚监控,也就是只能看不能操作那种)
2 用户组设置
流程:
点击管理—>点击用户群组—>点击创建用户群组—>根据提示信息填写用户群组信息—>根据提示填写—>权限信息
注:也可以不填写权限,您随意
二.添加主机(不讲手动添加主机)
2.1 创建主机群组
流程:
点击 配置—>点击 主机群组—>点击 创建群组 —>填写 组名(建议按照项目名进行分组)
#主机群组就创建完成,一般主机群组会创建多个,根据项目名自动添加主机
2.2 基于自动发现-添加主机
原理:自动发现是位于server端的操作,是由server每隔一段时间进行全网扫描,非常消耗服务器资源。
2.21 创建自动发现动作
流程:
点击配置—>点击动作—>选择时间源 自动发现 —>点击创建动作 —>定义动作,按照提示填写(下面有示例)—>定义操作,按提示填写(下面有示例)
定义动作:
注:
计算方式:
3种方式(and/or or and )加自定义触发条件,默认是 与/或
触发条件
:默认提供10种触发条件及后面2种触发方式,示例是以ip方式触发(需要配置客户端的),
并且还支持多条件混合使用,条件越多就越精准
定义操作:
默认标题及消息内容,不懂的话就不用去随便乱修改的
操作_操作类型:
有下面11种类型,一般常用类型就3种,分别是添加主机,添加到主机群主,与模板关联(主机群主需要预先创建,模板的话只能选择存在当前zabbix系统的模板,Linux主机的话一般选择 template os Linux即可)
操作_类型添加:
点击新的—>选择操作类型—>根据提示填写信息—>最后点击添加
添加完成
2.22 创建自动发现规则
注:创建自动发现动作后得创建自动发现规则,不然就算客户端配置了,主机也发现不了
流程:
点击配置—>点击自动发现—>点击创建发现规则—>根据提示填写
2.23 server端配置
$ vim /opt/app/zabbix/etc/zabbix_server.conf
StartDiscoverers=10 #默认值为1,主要是指zabbix在运行的时候启用几个自动发现进程,建议值调大,否则会报警的
2.24 配置客户端
$ vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.28.88.204 #填写serverip/域名(域名的话记得解析或者绑hosts)
Hostname=hostname
Include=/etc/zabbix/zabbix_agentd.d/
HostMetadataItem=system.uname #指定键值
$ systemctl restart zabbix-agent
2.3 基于自动注册-添加主机
原理:自动注册是位于client端的操作,是由client主动向server发起自动注册功能。
2.31 创建自动注册规则
注:得把刚刚配置的自动发现规则给关掉
流程:
点击配置—>点击动作—>选择时间源 自动注册 —>创建动作—>根据下列示例填写
创建动作:
创建操作:
2.32 配置客户端
$ vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.28.88.204
ServerActive=10.28.88.204
Hostname=test
Include=/etc/zabbix/zabbix_agentd.d/
HostMetadataItem=system.uname
HostMetadata=test
$ systemctl restart zabbix-agent
2.33 测试
流程:
点击配置—>点击主机—>选择对应的群组,然后回车即可 或者 直接在最上面搜索栏搜索当前主机名称也行
总结:
我个人的话比较喜欢以自动注册的方式添加主机,主要是由客户端主动发起注册功能,并且消耗极少,同时操作条件也简单,适合有各种外网ip的主机。
自动发现的话主要是由server端主动发起,每个一段时间就会进行自动扫描,负载很大,不建议以这种方式添加主机。
还有是以第三方程序自动添加主机及关联模板,这种方式是最好的,但是你得有此脚本才行,至于手动添加的话就没有必要了。
三.报警
注:这里只说2种报警方式,邮件报警及钉钉报警
3.1 创建报警用户
一般线上都是创建一个用户专门用来干报警这事。
这里不展示创建用户流程了。
3.2 邮件报警
3.21 创建报警媒介类型
流程:点击管理—>点击报警媒介类型—>点击创建媒体类型—>根据示例填写
其中类型有5种:
一般都是选择脚本
脚本参数,zabbix自带的宏(宏业相当于一个变量):
{ALERT.SENDTO} #告警人信息,一般是邮箱
{ALERT.SUBJECT} #消息标题
{ALERT.MESSAGE} #消息内容
修改完成参数,最后记得点击 添加
3.22 添加用户报警信息
流程:选择用户 报警 —>点击报警媒介 —>点击添加
3.33 配置server,使其支持邮件报警(直接跳过钉钉报警步骤前往3.4 动作 步骤)
#安装邮件报警
$ yum install mailx -y
$ vim /etc/mail.rc
set from=邮箱账号
set smtp=smtp.163.com #
set smtp-auth-user=邮箱账号
set smtp-auth-password=客户端授权密码
set smtp-auth=login
#测试
$ echo "zabbix test mail" |mailx -s "zabbix" ********@163.com
#使zabbix可以读取你的脚本
$ vim /opt/app/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/opt/app/zabbix/share/zabbix/alertscripts/ #去掉注释,并且改为绝对路径
#添加邮件报警脚本
$ vim /opt/app/zabbix/share/zabbix/alertscripts/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
#授权
$ chown zabbix.zabbix /opt/app/zabbix/share/zabbix/alertscripts/sendmail.sh -R
$ chmod +x zabbix.zabbix /opt/app/zabbix/share/zabbix/alertscripts/sendmail.sh -R
$ chmod 777 /tmp/sendmail.log -R
#测试
$ /opt/app/zabbix/share/zabbix/alertscripts/sendmail.sh 你的邮箱 zabbix #测试
#重启zabbix-server
$ /etc/init.d/zabbix_server restart
3.3 钉钉报警
3.31 获取钉钉webhook地址
流程:
打开钉钉—>拉上3个人建立一个群组,名字自定义—>点击 智能群助手—>添加机器人—>点击自定义—>点击添加—>根据下面示例进行添加
建议:安全设置那里,我这是演示错误 建议选择ip地址:填写你zabbix server的ip地址即可,只要是来自于zabbix server的任何报警信息都能接收。
3.32 添加钉钉报警脚本(server端操作)
$ vim /opt/app/zabbix/share/zabbix/alertscripts/ding.py
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import ConfigParser
headers = {'Content-Type': 'application/json;charset=utf-8'}
content={}
def msg(text,call,api_url,All=False):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": call,
"isAtAll": All
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
textemp,text = sys.argv[1],''
l1=textemp.split('\n')
for i in l1:
if i:
text=text+i+'\n'
#text = '{_text} ' .format(_text=text)
send_to = sys.argv[2]
config = ConfigParser.ConfigParser()
config.read('/opt/app/zabbix/etc/alert.conf')
if send_to in config.sections():
call = config.get(send_to,'user').split(' ')
api_url = config.get(send_to,'url')
All = config.get(send_to,'All')
else:
print('the group is not existed')
msg(text,call,api_url,All)
#这脚本需要进行传参的,也就是$1跟$2,并且需要读取/opt/app/zabbix/etc/alert.conf 文件
3.33 添加 alert.conf 文件
$ vim /opt/app/zabbix/etc/alert.conf
[da-sa] #建议是项目名(以公司-项目方式进行填写)
user = 钉钉用户手机号码(需要在钉钉里面注册过的)
url= 获取的webhook地址
All = True #为True时,发送给所有人,为False时只发送给User对应手机号的用户
3.34.测试
$ chmod +x /opt/app/zabbix/share/zabbix/alertscripts/ding.py
$ python /opt/app/zabbix/share/zabbix/alertscripts/ding.py “监控报警测试” da-sa
报错:ImportError: No module named requests
解决:yum install python-requests -y
3.4 配置动作
流程:
点击配置—>点击动作—>点击事件源 选择触发器 —>点击创建动作—>在动作,操作,恢复操作根据下面例子填写—>测试
创建动作:
填写触发动作名称—>填写触发的条件—>点击添加(下面是个示例)
创建告警操作 填写下列信息:
【故障】 {HOST.CONN}: {TRIGGER.NAME}
告警主机:{HOSTNAME1} {HOST.IP}
告警主题:{TRIGGER.NAME}
告警级别:{TRIGGER.SEVERITY}
告警时间:{EVENT.DATE} {EVENT.TIME} 持续时间: {EVENT.AGE}
告警详情: {ITEM.NAME1} ({ITEM.KEY1}): {ITEM.VALUE1}
当前状态: {ITEM.LASTVALUE}
创建恢复操作 根据如下内容填写:
恢复 {HOST.CONN}: {TRIGGER.NAME}
【恢复】:{HOSTNAME1} {TRIGGER.NAME}
发生时间:{EVENT.DATE} {EVENT.TIME}
恢复时间: {TIME} 持续时间: {EVENT.AGE}
恢复详情: {ITEM.NAME1} ({ITEM.KEY1}): {ITEM.VALUE1}
当前状态: {TRIGGER.STATUS}: {ITEM.LASTVALUE}
注:至于更新操作可以用管,选择默认即可
使用小技巧:
触发条件:
如果针对单个主机群组,一定要得添加
主机群组 等于 (主机群组)
此选项,主要用于特定主机群组报警,示例:
操作
细节:
步骤那里有2个框框可以填2个值,第一框代表至少发送几次告警,第二个框是最大发送多少次报警,默认是1-1,也就是只发送一次报警,如果你想发送3次报警,则填写1-3,0的话是无穷大,也就是 1-0,代表无限发送,示例:
操作
细节:
步骤持续时间 这里定义是间隔多少时间再次进行发送报警,上面那个步骤只的是发送多次此,这是指定每次发送的间隔时间,示例:
消息内容:
可以添加一个条件,时间状态等于非确认,也就是确认过的信息不再发送,示例:
测试的话,直接将client关闭,看下是否收到告警,收到报警代表成功
四.仪表盘编辑
4.1 仪表盘新增
流程
:点击添加仪表盘—>点击创建仪表盘—>根据系统仪表盘模板创建符合自己需要的模板(请看示例)
在构件那里你可以选择自己需要的类型模板进行创建:
4.2 编辑仪表盘
流程
:点击编辑仪表盘—>然后可以对 对应的构件进行修改,删除,新增等操作,最后一定记得保存设置即可。
五 性能监控
注:主讲监控Mariddb实例,至于zabbix的
Template OS Linux
没有啥讲的,你只要关联了,并且client可以被server访问,那么就没有啥问题。
5.1 关联MySQL模板
流程
:选择你的主机—>点击模板—>点击选择—>找到
Template DB MySQL
打钩—>点击选择即可。
5.2 client设置
注:在zabbix web界面为你client关联MySQL监控模板后,你还需要在client做一些对应的配置才能使监控生效。
#在数据库创建zabbix监控用户,支持对mysql状态,主从信息进行读取
MariaDB [(none)]> grant select,process,replication client on *.* to zabbix@'127.0.0.1' identified by '你的密码';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;
$ mysql -uzabbix -hlocalhost -p
#创建关联文件,使你的zabbix用户执行MySQL命令不需要输入用户及密码
$ vim /etc/zabbix/.my.cnf
[mysql]
host = localhost
user = zabbix
password = "你的密码"
socket = /data/mydata/mysql.sock
[mysqladmin]
host = localhost
user = zabbix
password = "你的密码"
socket = /data/mydata/mysql.sock
#修改MySQL监控文件
$ cp userparameter_mysql.conf{,.bak}
$ sed -i 's#/var/lib/zabbix#/etc/zabbix#g' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/etc/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
##这下面这条是后面添加的,上面键值中没有统计进程数的命令
UserParameter=mysql.process,HOME=/etc/zabbix mysql -e "show full processlist" 2>>/tmp/mysql_processlit.log | wc -l
#授权
$ chmod 777 /tmp/mysql_processlit.log
$ systemctl restart zabbix-agent.service
#测试,得到值代表配置没有问题,等会监控就可以获取当前client的数据了
$ HOME=/etc/zabbix mysqladmin ping | grep -c alive
1
六.模板操作
6.1创建模板
流程
:点击 配置—>点击 模板—>点击 创建模板—>填写相关信息—>点击添加,新创建的模板就出来了
6.2 创建应用集
流程
:点击 刚刚创建的模板—>点击 应用集—>点击 创建应用集—>输入应用名称(也就是软件名称,用于说明此监控属性是用来监控哪个应用的)—>点击添加即可
6.3 创建监控项
流程
:点击刚刚创建的模板—>点击 监控项—>点击 创建监控项—>根据下列示例填写 —>填写完记得点击添加
6.4 创建触发器
注:有了监控项就得创建触发器,不然怎么触发报警了,毕竟触发报警才是重点
流程
:点击刚刚创建的模板—>点击 触发器 —>点击 创建触发器—> 根据提示填写
6.5 创建图形(聚合图形有兴趣的可以去看看)
注:现在监控项,触发器都创建了,但是没有图形怎么能直观的展示监控数据了,那就需要创建图形了
流程:
点击刚刚创建的模板—>点击图形—>点击创建图形—>根据要求填写相关信息(记得点击提交)
注:至此zabbix web端操作完毕
6.6 配置client,大致路程参考5.2流程即可
这里就只讲下自定义键值 自定义键键值:
zabbix官方是提供自定义键值的功能,当你的官方模板没法满足您的监控需求的时候,你可以自行定义键值进行相关状态监控。
语法:
UserParameter=<键值>,<命令> #中间用,号隔开。
创建进程统计监控项,文件名自定义
vim /etc/zabbix/zabbix_agentd.d/MySQL.conf
UserParameter=mysql.process,HOME=/etc/zabbix mysql -e "show full processlist"
6.7 备份模板
流程:
点击配置—>点击模板—>选择你要操作模板 打钩—> 然后点击最下方的导出—>下载到本地
这是导出的模板,建议改名,不然以后自己都不认识是那块模板。
6.8 导入模板
流程:
点击配置—>点击模板—>点击导入—>选择 你要导入的模板
本篇说明:本篇为进阶版,但是讨论的是怎么搭建符合自己生产环境需求的zabbix,也许在很多地方研究不太深入,请各位看官海涵。