zabbix模块配置学习

2020-10-13 13:25:35 浏览数 (1)

0x00 Zabbix监控Windows

(1) Windows Agent下载安装配置 Agent下载地址:https://www.zabbix.com/download_agents 选择我们对应的版本:4.2.1/Windows/amd64/OpenSSL https://www.zabbix.com/downloads/4.2.1/zabbix_agents-4.2.1-win-amd64-openssl.zip

WeiyiGeek.根据系统位数选择WeiyiGeek.根据系统位数选择

Step 0. 这里监控windows我采用了宿主机与virtual中Zabbix主机进行通信,需要设置虚拟网卡为HOST-ONLY模式,注意HOST-only网卡需要设置自动获取

代码语言:javascript复制
#重启网卡
ifdown eth2
ifup eth2

#系统中C:WindowsSystem32driversetchosts文件指向我们zabbix服务器
192.168.56.101 zabbix.weiyigeek.com

[[email protected] C:zabbixbin]# route ADD 192.168.56.101 MASK 255.255.255.255 19
2.168.56.102 METRIC 3 IF 15
 操作完成!
 
route ADD 192.168.56.200 MASK 255.255.255.255 192.168.56.101 METRIC 3 IF 15


[[email protected] C:zabbixbin]# route PRINT
WeiyiGeek.WeiyiGeek.

Step 1. 下载解压文件 -> 打开并配置conf/zabbix_agentd.conf 里面的配置比较详细

代码语言:javascript复制
LogFile=c:zabbix_agentd.log
EnableRemoteCommands=1           #允许在本地执行远程命令
LogRemoteCommands=1               #执行远程命令是否保存操作日志
DebugLevel=3
Server=192.168.56.101
ListenPort=10050
ServerActive=192.168.56.101
Hostname=Windows7  #一定要与zabbix创建的主机一致,缺省就是IP地址

Step 2. 启动zabbix的 bin注册服务到系统

代码语言:javascript复制
C:zabbixbinzabbix_agentd.exe -i -c C:zabbixconfzabbix_agentd.conf     #安装zabbix客户端
zabbix_agentd.exe [11700]: service [Zabbix Agent] installed successfully
zabbix_agentd.exe [11700]: event source [Zabbix Agent] installed successfully

C:zabbixbinzabbix_agentd.exe -s -c C:zabbixconfzabbix_agentd.conf     #启动zabbix服务
zabbix_agentd.exe [10756]: service [Zabbix Agent] started successfully

C:zabbixzabbix_agentd.exe -d -c  C:zabbixconfzabbix_agentd.conf    #必须先停止服务再删除zabbix客户端操作

Step 3. 查看服务是在系统的服务列表中或者services命令查看

代码语言:javascript复制
[[email protected] C:UsersAdministrator]$sc qc "Zabbix Agent"
[SC] QueryServiceConfig 成功

SERVICE_NAME: Zabbix Agent
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : "C:zabbixbinzabbix_agentd.exe" --config "C:zabbixconfzabbix_agentd.conf"
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Zabbix Agent
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

Step 4. 可通过zabbix_agentd.log日志和zabbix主机选项卡中看到连接成功 -> 监控 -> 拓扑图 -> 编辑拓扑图

WeiyiGeek.拓扑图WeiyiGeek.拓扑图

Step 5. 尝试执行远程命令脚本 管理 -> 脚本 -> 添加选项选择主机群组

WeiyiGeek.shutdownWeiyiGeek.shutdown

Step 6. 之后可以在网络拓扑中选择主机进行命令执行

WeiyiGeek.拓扑图WeiyiGeek.拓扑图
WeiyiGeek.成功执行WeiyiGeek.成功执行

0x01 Zabbix监控Linux

(1)Zabbix自带模板监控 监控:Linux主机 CPU、内存、硬盘、网卡等等,以及设置图像化界面; 执行流程: Step 1. 配置 -> 主机 -> 添加主机 -> 群组选择[Linux Server] -> 设置agent代理程序的接口 -> 添加即可 Step 2. 配置 -> 主机 -> data2-模板 -> 添加模板 -> 链接指示器[寻找Template OS Linux] -> 添加后更新(否则不生效)

WeiyiGeek.链接指示器选择群组模板WeiyiGeek.链接指示器选择群组模板
WeiyiGeek.添加完成后会自动添加图形WeiyiGeek.添加完成后会自动添加图形

Step 3. 配置 -> 主机 -> 选择指定主机 -> 更新即可 -> ZBX正常连接

Step 4. 配置 -> 主机 -> 选择主机图像 -> 创建图形 -> 选择模板中监控项 -> 添加即可

WeiyiGeek.创建图像WeiyiGeek.创建图像
WeiyiGeek.配置图像监控项WeiyiGeek.配置图像监控项

(2)Zabbix聚合图像 Step 1. 监测 -> 聚合图像 -> 所有聚合图像 -> 创建聚合图形 -> 设置所有者和名称[ Linuxgeneral] -> 添加即可 Step 2. 点击设置聚合图像名称[Linuxgeneral] -> 编辑聚合图像 -> 更改 -> 选择显示的类型 -> 选择图像或者监控项

WeiyiGeek.编辑聚合图像WeiyiGeek.编辑聚合图像
WeiyiGeek.添加图像到面板WeiyiGeek.添加图像到面板

(3)Zabbix设置自动发现添加主机功能 Step 1. 配置 -> 自动发放 -> 创建自动发现规则 -> 监测方式设置 -> 监测IP段 Step 2. 配置 -> 动作 —> 事件源[自动发现] -> 设置动作条件 -> 启用即可

WeiyiGeek.动作WeiyiGeek.动作
WeiyiGeek.自动发现WeiyiGeek.自动发现

Step 3. 选择指定自动发现检查条件,就是选择自动发现规则名称; 配置 -> 动作 -> 选择创建的发现规则 -> 选择操作 -> 设置操作细节: 动作:添加主机 、 添加到主机群组: Windows General 、链接到模板: Template OS Windows -> 添加即可

WeiyiGeek.自动发现检查WeiyiGeek.自动发现检查
WeiyiGeek.自动发现操作WeiyiGeek.自动发现操作

Step 4. 我们就能在主机群组发现我们检测到的主机

WeiyiGeek.WindowsGeneralWeiyiGeek.WindowsGeneral

Step 5. 之后我们能在配置 -> 主机 -> 选择群组 -> 查看添加到zabbix 监控的主机 -> 注意次数ZBX未启动 -> 需要在监控端安装agent;

WeiyiGeek.测试自动发现添加到主机中WeiyiGeek.测试自动发现添加到主机中

0x02 Zabbix分布式安装

Zabbix为IT基础设施提供有效和可用的分布式监控,代理(proxies)可用于代替Zabbix server本地收集数据,然后将数据报告给server服务器。 zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警

zabbix proxy 使用场景:

  • 监控远程区域设备
  • 监控本地网络不稳定区域
  • 当zabbix监控上千设备时,使用它来减轻 server 的压力
  • 简化分布式监控的维护
WeiyiGeek.zabbixWeiyiGeek.zabbix

执行过程:proxy 收集到数据之后,首先将数据缓存在本地,然后在一定得时间之后传递给 zabbix server,这样就不会因为服务器的任何临时通信问题而丢失数据。

如何选择proxy模式?

  • 主动式 - proxy将连接到Zabbix server并请求配置数据
  • 被动式 - Zabbix server连接到代理proxy 注意:当使用active proxy,未加密通信(敏感)proxy配置数据可用于访问Zabbix server trapper端口。如果不进行身份验证,任何人都可以伪装成active proxy并请求配置数据。

我们这里采用共享秘钥(PSK)方式加密通信:

代码语言:javascript复制
#共享密钥一致性 	共享密钥身份字符串
如:ZABBIXPROXY

#共享密钥(PSK) 	共享密钥(16进制)
#使用openssl生成psk密钥并将生成的openssl写入到enc/文件中
[[email protected] etc]$ openssl rand -hex 32  > /var/lib/zabbix/zabbix_proxy.psk

zabbix-proxy重要参数:

代码语言:javascript复制
egrep -v '^#' /etc/zabbix/zabbix_proxy.conf
#默认主动模式
Server=192.168.1.200
ServerPort=10051
Hostname=ZabbixProxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix

#proxy-mysql数据库注意需要单只建库
DBHost=192.168.1.200
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=123456
DBPort=3306

#缓存大小
ProxyLocalBuffer=10
ProxyOfflineBuffer=10
#高可用切换
HeartbeatFrequency=60

#代理从Zabbix服务器检索配置数据的频率
ConfigFrequency=30
#发送采集的监控数据到服务器端,默认是1秒,我们一分钟发送一次
DataSenderFrequency=60  

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

#加密认证(/etc/zabbix/)
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=ZABBIXPROXY
TLSPSKFile=etc/zabbix/zabbix_proxy.psk

然后启动zabbix-proxy和观察连接日志:

代码语言:javascript复制
[[email protected] ~]$service zabbix-proxy restart
[[email protected] ~]$cat /var/log/zabbix/zabbix_proxy.log  #查看zabbix——proxy日志
4733:20190516:000542.753 using configuration file: /etc/zabbix/zabbix_proxy.c
4733:20190516:000542.768 current database version (mandatory/optional): 04020
4733:20190516:000542.768 required mandatory version: 04020000
4733:20190516:000542.793 proxy #0 started [main process]
4735:20190516:000542.795 proxy #1 started [configuration syncer #1]
4737:20190516:000542.800 proxy #3 started [data sender #1]
4736:20190516:000542.803 proxy #2 started [heartbeat sender #1]
4740:20190516:000542.806 proxy #6 started [discoverer #1]
4742:20190516:000542.817 proxy #8 started [history syncer #2]


#设置连接zabbix-agent的agent主机
$vim /etc/hosts   #配置hostname
hostname zabbixagent #agent配置文件中也需要一样
$service zabbix-agent start
cat /var/log/zabbix/zabbix_agentd.log   #查看agent日志

在zabbix-web中设置agent代理程序:

WeiyiGeek.设置agent代理程序WeiyiGeek.设置agent代理程序
WeiyiGeek.加密agent代理程序WeiyiGeek.加密agent代理程序

注意:接入成功后需要建立应用集ZBX才能进行显示绿色(注意这里的主机名称需要与配置文件对应)

WeiyiGeek.proxy接入WeiyiGeek.proxy接入

注意: zabbix proxy 数据库必须和 server 分开,否则数据会被破坏;

0x03 Zabbix使用钉钉进行预警

群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步; 登录钉钉客户端->创建一个群->然后点击群右上角的”群机器人”->”添加机器人”->”自定义”,记录该机器人的webhook值!

WeiyiGeek.webhookWeiyiGeek.webhook

修改后钉钉zabbix监控脚本:

代码语言:javascript复制
cat dingding.py 
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import json,sys,os,datetime
import urllib2

#机器人的webhook地址及其@收信人电话信息
webhook="https://oapi.dingtalk.com/robot/send?access_token=e633c24593e06b207af5ef099b300f7b6f68a6ff086a74837f094638d51c52a2"
username=sys.argv[1]
text=sys.argv[3]

#构造post数据包
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            username
        ],
        "isAtAll": False
    }
}
headers = {'Content-Type': 'application/json'}

#利用request模块进行post请求
request=urllib2.Request(url=webhook,data=json.dumps(data),headers=headers)
reponse=urllib2.urlopen(request)
result = reponse.read()

#再钉钉中记录成功或者失败
filename="/var/log/zabbix/log/dingding.log"
if os.path.exists(filename):
    f=open(filename,"a ")
else:
    f=open(filename,"w ")
f.write("n" "--"*30)

#解析返回的json
x = json.loads(result)
print x["errmsg"]
if x["errcode"] == 0:
    f.write("n" str(datetime.datetime.now()) " " str(username) "  " "发送成功" "n" str(text))
    f.close()
else:
    f.write("n" str(datetime.datetime.now())   " "   str(username)   " "   "发送失败"   "n"   str(text))
    f.close()

执行流程:

代码语言:javascript复制
#赋予脚本执行权限放入server的JavaScript指定目录中
chmod  x dingding.py
#创建上面脚本中的日志路径
mkdir -vp /var/log/zabbix/log/
chown zabbix.zabbix /var/log/zabbix/log/dingding.log

#手动测试脚本是否可以正常发送消息这个条文档记录的测试信息,
./dingding.py 1842 gaojing "测试报警"

zabbix web界面配置流程: Step1. 创建报警媒介 脚本参数:ALERT.SENDTO ALERT.SUBJECT ALERT.MESSAGE Step2. 给用户添加报警媒介 说明:收件人是钉钉上的手机号码,我这里使用的是Admin管理员用户

WeiyiGeek.添加报警媒介WeiyiGeek.添加报警媒介

Step3. 点击配置–>动作–>创建动作->触发器

代码语言:javascript复制
#默认信息里:
{
  "from": "{HOSTNAME1}",
  "time": "{EVENT.DATE} {EVENT.TIME}",
  "level": "{TRIGGER.SEVERITY}",
  "name": "{TRIGGER.NAME}",
  "key": "{TRIGGER.KEY1}",
  "value": "{ITEM.VALUE}",
  "now": "{ITEM.LASTVALUE}",
  "id": "{EVENT.ID}",
  "ip": "{HOST.IP}",
  "color":"FFE61A1A",
  "age":"{EVENT.AGE}",
  "status":"{EVENT.STATUS}"
}
      
#恢复默认信息:
{
  "from": "{HOSTNAME1}",
  "time": "{EVENT.DATE} {EVENT.TIME}",
  "level": "{TRIGGER.SEVERITY}",
  "name": "{TRIGGER.NAME}",
  "key": "{TRIGGER.KEY1}",
  "value": "{ITEM.VALUE}",
  "now": "{ITEM.LASTVALUE}",
  "id": "{EVENT.ID}",
  "ip": "{HOST.IP}",
  "color":"FF4A934A",
  "age":"{EVENT.AGE}",
  "recoveryTime":"{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}",
  "status":"{EVENT.RECOVERY.STATUS}"
}

Step4. 等待事件触发

WeiyiGeek.测试WeiyiGeek.测试
WeiyiGeek.钉钉报警WeiyiGeek.钉钉报警

0 人点赞