> ## Documentation Index
> Fetch the complete documentation index at: https://doc.lwops.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 1.10. 客户端与server端或proxy端时间差监控

# 1. 说明

需求背景：滨州医学院某台Windows设备由于时间同步问题经常产生误告警

<img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-01.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 1" /><br />通过监控客户端（agent端）与server端的时间差可快速排查出相关问题，当客户端与server端时间相差过大时，将会产生误告警（主动式无法采集到数据）<br />本方法监控需被控端需要安装agent，监控原理如下<br />由server或者proxy发起zabbix\_get请求，请求 “system.localtime” （系统本地时间）监控项，获取系统本地时间，获取的时间为时间戳格式，在将返回的时间戳数据与本地时间戳数据进行对比

# 2. 代码

本脚本由go语言编写，源码如下

```plain theme={null}
package main
import (
"fmt"
"os"
"os/exec"
"strconv"
"strings"
"time"
)
// 定义脚本中使用的变量
var (
// 定义命令执行变量
GetPath  string = "/itops/zabbix/bin/zabbix_get"
HostIP   string
HostPort string
ServerIP string
Key      string = "system.localtime"
// 定义数据存储变量
AgentTempTime string // 临时存储agent返回的时间
AgentTime     int64
LocalTime int64
TimeDiff  int64
)
func main() {
// 获取命令中使用到的参数
args := os.Args
HostIP = string(args[1])
HostPort = string(args[2])
ServerIP = string(args[3])

// 获取对应主机时间（时间戳格式）
AgentCmd := exec.Command(GetPath, "-s", HostIP, "-p", HostPort, "-I", ServerIP, "-k", Key)
output, err := AgentCmd.Output()
if err != nil {
fmt.Println("命令执行失败:", err)
return
}
AgentTempTime = strings.ReplaceAll(strings.ReplaceAll(string(output), " ", ""), "\n", "")
AgentTime, _ = strconv.ParseInt(AgentTempTime, 10, 64)

// 获取server或proxy的本地时间
LocalTime = time.Now().Unix()

// 计算时间差
TimeDiff = LocalTime - AgentTime
fmt.Println(TimeDiff)
}
```

附件中go结尾的文件为源文件，需要依赖go开发环境<br />TimeDiff为编译后的二进制文件，二进制文件不可编辑，可直接执行查看结果，如需调整，需调整源码，而后编译保存<br />测试执行命令为 ./TimeDiff HostIP Agent端口 serverIP<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-02.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 2" />

# 3.监控、监控项、触发器

## 3.1监控

将二进制文件放置于Server或Proxy的脚本目录：/itops/zabbix/scripts/<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-03.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 3" /><br />测试效果如下：<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-04.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 4" /><br />外部检查键值创建，目录：/itops/zabbix/share/zabbix/externalscripts<br />创建文件TimeDiff<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-05.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 5" />

## 3.2监控项

创建模板，模板名称、可见名称、群组根据需求进行填写<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-06.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 6" /><br />创建相关宏变量<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-07.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 7" /><br />监控像类型：外部监查<br />键值：TimeDiff\[\{HOST.IP},\{HOST.PORT},\{\$SERVERIP}]<br />单位：s<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-08.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 8" /><br />模板链接到主机进行测试<br />链接模板<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-09.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 9" /><br />更新宏值<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-10.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 10" /><br />返回数据<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-11.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 11" />

## 3.3创建触发器

触发器函数选择：abs()<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-12.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 12" /><br />新增依赖关系<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-13.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 13" /><br />告警效果<br /><img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/makesure/image-14.png" alt="1.10. 客户端与server端或proxy端时间差监控 操作截图 14" />
