[TOC]
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.根据系统位数选择
Step 0. 这里监控windows我采用了宿主机与virtual中Zabbix主机进行通信,需要设置虚拟网卡为HOST-ONLY模式,注意HOST-only网卡需要设置自动获取
代码语言:javascript复制#重启网卡
ifdown eth2
ifup eth2
#系统中C:WindowsSystem32driversetchosts文件指向我们zabbix服务器
192.168.56.101 zabbix.weiyigeek.com
[root@WeiyiGeek 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
[root@WeiyiGeek C:zabbixbin]# route PRINT
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复制[root@WeiyiGeek 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.拓扑图
Step 5. 尝试执行远程命令脚本 管理 -> 脚本 -> 添加选项选择主机群组
WeiyiGeek.shutdown
Step 6. 之后可以在网络拓扑中选择主机进行命令执行
WeiyiGeek.拓扑图
WeiyiGeek.成功执行
0x01 Zabbix监控Linux
(1)Zabbix自带模板监控 监控:Linux主机 CPU、内存、硬盘、网卡等等,以及设置图像化界面; 执行流程: Step 1. 配置 -> 主机 -> 添加主机 -> 群组选择[Linux Server] -> 设置agent代理程序的接口 -> 添加即可 Step 2. 配置 -> 主机 -> data2-模板 -> 添加模板 -> 链接指示器[寻找Template OS Linux] -> 添加后更新(否则不生效)
WeiyiGeek.链接指示器选择群组模板
WeiyiGeek.添加完成后会自动添加图形
Step 3. 配置 -> 主机 -> 选择指定主机 -> 更新即可 -> ZBX正常连接
Step 4. 配置 -> 主机 -> 选择主机图像 -> 创建图形 -> 选择模板中监控项 -> 添加即可
WeiyiGeek.创建图像
WeiyiGeek.配置图像监控项
(2)Zabbix聚合图像 Step 1. 监测 -> 聚合图像 -> 所有聚合图像 -> 创建聚合图形 -> 设置所有者和名称[ Linuxgeneral] -> 添加即可 Step 2. 点击设置聚合图像名称[Linuxgeneral] -> 编辑聚合图像 -> 更改 -> 选择显示的类型 -> 选择图像或者监控项
WeiyiGeek.编辑聚合图像
WeiyiGeek.添加图像到面板
(3)Zabbix设置自动发现添加主机功能 Step 1. 配置 -> 自动发放 -> 创建自动发现规则 -> 监测方式设置 -> 监测IP段 Step 2. 配置 -> 动作 —> 事件源[自动发现] -> 设置动作条件 -> 启用即可
WeiyiGeek.动作
WeiyiGeek.自动发现
Step 3. 选择指定自动发现检查条件,就是选择自动发现规则名称; 配置 -> 动作 -> 选择创建的发现规则 -> 选择操作 -> 设置操作细节: 动作:添加主机 、 添加到主机群组: Windows General 、链接到模板: Template OS Windows -> 添加即可
WeiyiGeek.自动发现检查
WeiyiGeek.自动发现操作
Step 4. 我们就能在主机群组发现我们检测到的主机
WeiyiGeek.WindowsGeneral
Step 5. 之后我们能在配置 -> 主机 -> 选择群组 -> 查看添加到zabbix 监控的主机 -> 注意次数ZBX未启动 -> 需要在监控端安装agent;
WeiyiGeek.测试自动发现添加到主机中
0x02 Zabbix分布式安装
Zabbix为IT基础设施提供有效和可用的分布式监控,代理(proxies)可用于代替Zabbix server本地收集数据,然后将数据报告给server服务器。 zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警
zabbix proxy 使用场景:
- 监控远程区域设备
- 监控本地网络不稳定区域
- 当zabbix监控上千设备时,使用它来减轻 server 的压力
- 简化分布式监控的维护
WeiyiGeek.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/文件中
[root@container1 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复制[root@Szabbix ~]$service zabbix-proxy restart
[root@Szabbix ~]$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代理程序
注意:接入成功后需要建立应用集ZBX才能进行显示绿色(注意这里的主机名称需要与配置文件对应)
WeiyiGeek.proxy接入
注意: zabbix proxy 数据库必须和 server 分开,否则数据会被破坏;
0x03 Zabbix使用钉钉进行预警
群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步; 登录钉钉客户端->创建一个群->然后点击群右上角的”群机器人”->”添加机器人”->”自定义”,记录该机器人的webhook值!
WeiyiGeek.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.添加报警媒介
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.钉钉报警