zabbix 4.0 进阶版

  • Post author:
  • Post category:其他



目录


一.用户


1.用户设置


1.1 修改管理员用户密码


1.2 创建报警用户


1.3 创建其他用户


2  用户组设置


二.添加主机(不讲手动添加主机)


2.1 创建主机群组


2.2 基于自动发现-添加主机


2.21 创建自动发现动作


2.22 创建自动发现规则


2.23 server端配置


2.24 配置客户端


2.3 基于自动注册-添加主机


2.31 创建自动注册规则


2.32 配置客户端


2.33 测试


三.报警


3.1 创建报警用户


3.2 邮件报警


3.21 创建报警媒介类型


3.22 添加用户报警信息


3.33 配置server,使其支持邮件报警(直接跳过钉钉报警步骤前往3.4 动作 步骤)


3.3 钉钉报警


3.31 获取钉钉webhook地址


3.32 添加钉钉报警脚本(server端操作)


3.33 添加 alert.conf 文件


3.34.测试


3.4 配置动作


四.仪表盘编辑


4.1 仪表盘新增


4.2 编辑仪表盘


五 性能监控


5.1 关联MySQL模板


5.2 client设置


六.模板操作


6.1创建模板


6.2 创建应用集


6.3 创建监控项


6.4 创建触发器


6.5 创建图形(聚合图形有兴趣的可以去看看)


6.6 配置client,大致路程参考5.2流程即可


6.7 备份模板


6.8 导入模板


注:前面已经介绍了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 导入模板



流程:

点击配置—>点击模板—>点击导入—>选择 你要导入的模板

示例1
示例2
示例3



本篇说明:本篇为进阶版,但是讨论的是怎么搭建符合自己生产环境需求的zabbix,也许在很多地方研究不太深入,请各位看官海涵。



版权声明:本文为yts1115084429原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。