[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.根据系统位数选择

WeiyiGeek.根据系统位数选择

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#重启网卡
ifdown eth2
ifup eth2

#系统中C:\Windows\System32\drivers\etc\hosts文件指向我们zabbix服务器
192.168.56.101 zabbix.weiyigeek.com

[[email protected] C:\zabbix\bin]# 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:\zabbix\bin]# route PRINT

WeiyiGeek.

WeiyiGeek.




Step 1. 下载解压文件 -> 打开并配置conf/zabbix_agentd.conf 里面的配置比较详细
1
2
3
4
5
6
7
8
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注册服务到系统

1
2
3
4
5
6
7
8
C:\zabbix\bin\zabbix_agentd.exe -i -c C:\zabbix\conf\zabbix_agentd.conf     #安装zabbix客户端
zabbix_agentd.exe [11700]: service [Zabbix Agent] installed successfully
zabbix_agentd.exe [11700]: event source [Zabbix Agent] installed successfully

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

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



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

1
2
3
4
5
6
7
8
9
10
11
12
13
[[email protected] C:\Users\Administrator]$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:\zabbix\bin\zabbix_agentd.exe" --config "C:\zabbix\conf\zabbix_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.shutdown

WeiyiGeek.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.WindowsGeneral

WeiyiGeek.WindowsGeneral

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

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

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


0x02 Zabbix分布式安装

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

zabbix proxy 使用场景:

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

WeiyiGeek.zabbix

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

如何选择proxy模式?

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

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

1
2
3
4
5
6
#共享密钥一致性 	共享密钥身份字符串
如:ZABBIXPROXY

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

zabbix-proxy重要参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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和观察连接日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[[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.webhook

WeiyiGeek.webhook

修改后钉钉zabbix监控脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()


执行流程:

1
2
3
4
5
6
7
8
#赋予脚本执行权限放入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. 点击配置–>动作–>创建动作->触发器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#默认信息里:
{
"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.钉钉报警