前言
在连锁零售企业的数字化运营中,多门店通过网络实时访问总部业务系统(如收银、库存、会员管理等核心模块)是其日常经营的基础支撑。然而,由于门店分布广泛、网络环境复杂,网络或应用服务的任何中断都可能直接阻断交易流程、影响顾客体验,进而造成即时营收损失与长期品牌信任损耗。据行业调研,门店单次网络中断平均会造成 15-30 分钟的业务停滞,高峰时段(如周末、节假日)单店每小时营收损失可达数千元,叠加顾客投诉与复购率下降的隐性成本,对门店整体收益与品牌口碑形成显著冲击。
具体而言,门店终端离线将直接切断门店与总部的网络通路,线上业务停滞;DNS 解析异常会导致门店终端无法定位业务系统域名(如收银系统域名指向错误 IP),用户无法完成支付;DNS 污染/劫持可能将用户导向恶意或无效页面,引发交易失败甚至数据泄露风险;应用进程异常(如 POS 服务崩溃、库存同步程序卡死)则会使关键功能失效,导致顾客排队流失或订单积压。
因此,通过门店主动拨测与进程监测实时感知主机离线、DNS 解析异常、DNS 污染、应用进程中断等关键风险,是保障连锁门店网络稳定性与应用可用性、最小化业务中断损失的必要手段,也是支撑连锁企业规模化运营与数字化服务连续性的核心运维实践。
观测云简介
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
DataKit
DataKit 是观测云提供的开源、跨平台的数据收集和监控工具。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。在门店观测场景中,DataKit 可运行在 Windows 7、Server 2008R2 或更高版本,其可用性监测功能(拨测)、主机健康检查功能至关重要。
安装 DataKit
测试终端:Windows Server 2019 Datacenter Edition
进入观测云「集成」-「DataKit」页面,切换到 Windows 菜单页,可看到 Windows 版 DataKit 的安装命令。

在 windows server(模拟门店主机)上使用管理员权限打开 PowerShell,执行上述安装命令。

使用 datakit monitor 命令,如有下方的输出则证明 DataKit 安装成功。
datakit monitor

新建拨测节点
进入「可用性监测」-「自建节点管理」菜单,点击「新建节点」。

根据实际情况填写节点信息,如下所示:

创建完成后,点击「获取配置」。

获得如下配置信息,稍后需要复制到 DataKit 的采集器配置文件中。

配置拨测节点参数
在客户端主机上进入 DataKit 的拨测采集器目录,默认是在 C:\Program Files\datakit\conf.d\network,将 dialtesting.conf.sample 文件复制一份,去掉其后缀、改名为 dialtesting.conf,如下图所示:

编辑 dialtesting.conf 配置文件,将观测云界面上自建拨测节点的配置填写到对应字段中。

保存后重启 datakit 服务,再执行 datakit monitor 命令时可以看到 dialtesting 采集器已经成功开启。
arduino
datakit serivce -R
//重启datakit 服务

配置拨测任务
进入「可用性监测」-「新建监测任务」-「API拨测」。

按页面提示选择拨测类型,配置拨测目标地址、可用判断、拨测频率,勾选拨测节点为刚才创建的自建拨测节点,如下图所示:

本次测试所用配置的参数如下:
配置项 | 配置参数 |
---|---|
拨测类型 | HTTP协议 |
URL | www.guance.com |
名称 | 门店拨测-测试 |
可用判断 | 默认模式响应状态码是200 |
拨测节点 | 自建节点 |
拨测频率 | 1min |
保存任务后稍等片刻,便可以在「查看器」看到该任务的拨测数据。

场景1:门店终端离线
场景描述
终端宕机、门店网络中断等情况都会导致门店无法访问总部系统、POS、进销存等关键业务平台,影响正常营业与交易。
场景模拟
当终端宕机、门店网络中断等异常情况发生时,门店终端上的 DataKit 拨测节点亦将无法上报拨测数据,因此我们在观测云上配置「数据断档」监控,可以有效地对终端离线等情况进行监控告警。我们将测试的 windows server 关机以便模拟该现象。
关键步骤
- Step1:确保拨测任务正常,观测云上能看到持续产生的拨测数据。

- Step2:在观测云上配置无数据告警。
进入「监控」-「监控器」-「新建监控器」,配置一个「可用性数据检测」类型的监控器。在配置时,将「数据断档」配置如下,这表示如果观测云在 5 分钟内没有收到数据上报,则触发一个严重级别事件,并按照监控器配置发送一条监控告警。

本测试任务的其他配置参数为:
配置项 | 配置参数 |
---|---|
监控器类型 | 可用性数据检测 |
检测频率 | 1分钟 |
检测区间 | 最近1分钟 |
检测指标 | 拨测类型:HTTP拨测拨测地址:全部指标:平均响应时间维度:node_name,name筛选:name=门店拨测-测试 |
触发条件 | Result:严重级别-大于5秒 |
数据断档 | 最近5分钟查询条件为空,触发严重事件 |
- Step3:将测试用的 windows server 关机,模拟门店终端离线。
- Step4:当数据断档时间超过设定阈值时,观测云将产生「数据断档」事件,并按照设定的通知渠道发送给告警接收人/团队。 进入观测云「事件中心」可查看该事件。

观测云还提供了「IoT 精简版」DataKit,专门为 IoT 设备设计的,具有更小的资源占用和更少的功能,以适应资源受限的嵌入式设备。部分连锁零售品牌在门店 SD-WAN 网关中安装 DataKit,来实现门店网络和终端的监控。
IoT 精简版 DataKit 的链接为
docs.guance.com/datakit/dat...
场景2:DNS 解析失败
场景描述
众所周知,客户端正确解析服务端网站域名是正常访问业务的前提。运营商 Local DNS 或互联网 DNS Server 故障都可能导致 DNS 解析异常,这些情况都会引起门店在线业务中断。
场景模拟
将测试 windows server 的 DNS 地址修改为一个错误的 IP 地址,模拟 DNS 解析异常。
关键配置
- Step1:确保拨测任务正常,观测云上能看到持续产生的拨测数据。

- Step2:在观测云上配置可用性监测告警,监控"可用率"指标。
进入「监控」-「监控器」-「新建监控器」,配置一个「可用性数据检测」类型的监控器。在配置时,将监控指标配置为「可用率」,这表示如果拨测任务的可用率下降,则触发事件并按照监控器配置发送一条监控告警。(「可用率」由创建拨测任务时的「可用判断」来决定,例如响应状态码≠200等)

本测试任务的其他配置参数为:
配置项 | 配置参数 | |||
---|---|---|---|---|
监控器类型 | 可用性数据检测 | |||
检测频率 | 5分钟 | |||
检测区间 | 最近5分钟 | |||
检测指标 | 拨测类型:HTTP拨测拨测地址:www.guance.com指标:可用率维度:node_name | |||
触发条件 | 严重级别:Result < 95 | |||
事件标题 | 门店拨测任务可用率下降,请立即关注,节点{{node_name}} | |||
事件内容 | 故障开始时间:{{ date | to_datetime }}故障等级:{{ df_status | to_status_human }}当前可用率:{{ Result | to_round(2) }}%节点:{{node_name}} |
- Step3:修改测试 windows server 的 DNS 地址,引发 DNS 解析异常。
配置 windows server 的网络适配器,将DNS服务器配置为 2.2.2.2 并保存。

此时通过浏览器访问目标网站,浏览器会提示找不到目标服务器 IP 地址,说明 DNS 地址配置成功。

- Step4:等待片刻,观测云将产生「可用性下降」的事件并按照设定的通知渠道发送给告警接收人/团队。 进入观测云「事件中心」可查看该事件。可以点击右上角「关联查看」-「查看相关全部可用性监测」跳转到拨测查看器。

跳转到拨测查看器页面,可以看到当前的拨测任务都是失败状态(状态为橙红色)。

点击拨测详情,可查看请求失败原因,显然这是一个 DNS 解析异常而产生的错误。
yaml
Get "https://www.guance.com": dial tcp: lookup www.guance.com: no such host

在 DNS 解析异常时,拨测数据依然可以从门店终端进行上报。这是因为 DataKit 和后端服务之间采用长连接,不会频繁进行 DNS 解析。
场景3:DNS 劫持/污染
场景描述
除了正常网络故障导致的 DNS 解析异常外,互联网中普遍存在 DNS 劫持/污染攻击,攻击者通过篡改 DNS 服务器的解析记录,将用户请求的合法域名恶意指向虚假或恶意网站,从而可能导致用户访问异常、数据泄露甚至门店在线业务服务中断。
场景模拟
通过修改 windows server 的 hosts 文件,强制将目标网站解析到某个 IP。同时,通过观测云的 pipeline 功能对拨测的 DNS 解析结果进行判断,如果解析的 IP 地址并不属于指定 IP 网段,则进行告警。
关键配置
- Step1:确保拨测任务正常,观测云上能看到持续产生的拨测数据。本场景我们使用 baidu 进行来做演示。

- Step2:检查拨测目标网站/业务系统的正确 IP 地址。在测试 windows server 上进行 DNS 解析,DNS Server 返回 baidu 的 IPv4 地址为 182.61.200.108 和 182.61.200.110,他们都属于 182.61.200.0/24 网段。

- Step3:添加观测云 pipeline,对拨测任务的目标 IP 进行判断。
进入观测云「管理」-「pipelines」页面,新建一个中心 pipeline,将数据类型选为「可用性拨测」。数据来源选择「http_dial_testing」,配置自定义的 Pipeline 名称,点击「一键获取样本」将拨测任务的 JSON 格式的数据显示到网页中。

将以下 pipeline 代码粘贴到「定义解析规则」的空白处,这段代码表示:如果拨测任务的目标 IP 属于 182.61.200.0/24 网段,便添加一个字段 dns_result=true;若目标 IP 不属于该网段,则添加 dns_result=false。
scss
json(_, dest_ip)
if cidr(dest_ip, "182.61.200.0/24") {
add_key(dns_result, "true")
} else {
add_key(dns_result, "false")
}

配置好解析规则后,点击「开始测试」可以看到测试结果,如符合预期则保存该 pipeline。后续的拨测任务将自动应用 pipeline 规则对数据进行处理。

- Step4:配置监控告警,对 dns_result 这个字段进行判断。
进入观测云「监控」-「监控器」-「新建监控器」-「阈值检测」,参考下面的表格进行配置。
参数 | 选项 | 说明 | ||
---|---|---|---|---|
检测频率 | 1分钟 | |||
检测区间 | 最近1分钟 | |||
检测指标 | D:: http_dial_testing:(count( dns_result)) { name= 'baidu-test' and dns_result= 'false' } BY node_name`` |
这是一个DQL检测语句,对拨测数据中dns_result=false的出现次数按拨测节点进行分组统计。 | ||
触发条件 | 严重级别:Result ≥ 1 | |||
事件标题 | 拨测任务遭到DNS污染,请立即处理 | |||
事件内容 | 故障开始时间:{{ date | to_datetime }}故障等级:{{ df_status | to_status_human }}节点:{{node_name}}故障描述:拨测任务疑似遭到DNS污染,解析结果为非法IP,请登陆观测云查看拨测任务 |


- Step5:配置 windows server 的 hosts 文件,将 baidu 强制解析为某个 IP。保存后,浏览器访问 baidu 将无法正常访问。

- Step6:在修改 DNS 解析记录之后稍等片刻,观测云将产生相关事件,并按照设定的通知渠道发送给告警接收人/团队。 进入观测云「事件中心」可查看该事件。

从事件跳转到「可用性监测」后,可以看到异常拨测任务中关键信息:
字段 | 字段说明 |
---|---|
dst_ip | 目标IP地址,是DNS Server实际解析到的IP地址。正常情况下是应用的合法IP,在遭到DNS劫持/污染时是非法网站IP。 |
dns_result | 通过pipeline新增的、用于判断DNS解析结果是否正确的字段。在遭遇DNS劫持/污染时,DNS解析结果未落在指定网段,则该字段为false,反之为true。 |
Country、Province、City、ISP | 国家、省份、城市、运营商信息,有助于帮助运维团队了解到DNS劫持/污染影响的范围,并与相关ISP协同进行处理。 |
node_name | 自定义拨测节点名称,自定义名称需要能让运维团队直观看出门店信息,例如"广州市南沙区万达广场店-1号终端" |
请求失败原因 | 展示了拨测任务出错的详细信息,能反映拨测节点当时的故障现场,帮助运维团队向ISP进行举证、投诉。 |

场景4:门店应用进程中断
场景描述
门店的 windows 终端上会运行「点单系统」等重要应用,应用进程的正常运行对门店运营至关重要,总部的运维团队应当第一时间收到门店应用的进程异常告警。
场景模拟
DataKit 可以采集应用进程的指标,并对应用进程的存活进行监控告警。因此在模拟该场景时,可在 windows server 上指定运行中的 chrome 浏览器进程,通过结束 chrome 进程来模拟门店应用进程中断。
关键步骤
- Step1:打开 DataKit 的「host_healthcheck」采集器,上报进程的存活指标。
进入已安装 DataKit 的 windows server 的如下路径 C:\Program Files\datakit\conf.d\host,将 host_healthcheck.conf.sample 文件复制一份并修改名称为 host_healthcheck.conf。

修改 host_healthcheck.conf 文件,将 names 字段的值配置为应用进程名(对应 DataKit 采集到的 process_name 字段的值)。

配置文件中的值对应进程名称,即 process_name 字段的值。可在「基础设施」-「进程」中找到指定进程。

修改配置文件后需重启 DataKit 方可使配置生效。
datakit service -R
通过 datakit monitor 命令观察,如果看到 host_healthcheck 采集器正常上报数据,则配置成功,如下图所示。

进入「指标」-「指标分析」,可以看到 host_process_exception 指标集下新增了 exception 指标,并且按照采集器配置文件中频率进行刷新。(在本次测试中, host_healthcheck 采集器的采集频率为 1 分钟)当应用进程正常运行时,该指标的值为 0。而当进程异常终止时,该指标将接收到 DataKit 上报的异常信号,exception 指标的值为 1。

也可以采用 DQL 方式进行查看 exception 指标的变化情况。
ruby
M::`host_process_exception`:(avg(`exception`)) { `process` = 'chrome.exe' }
- Step2:配置监控器,对应用进程的存活进行监控。
配置项 | 配置参数 | ||
---|---|---|---|
监控器类型 | 阈值检测 | ||
检测频率 | 1分钟 | ||
检测区间 | 最近1分钟 | ||
检测指标 | M:: host_process_exception:(avg( exception)) { process= 'chrome.exe' } BY host`` |
||
触发条件 | 严重级别:Result = 1 | ||
事件标题 | {{host}}主机的应用进程异常终止,请立即处理 | ||
事件内容 | 故障开始时间:{{ date | to_datetime }}故障等级:{{ df_status | to_status_human }}异常主机:{{host}}故障描述:{{host}}主机的应用进程异常,请登陆观测云进行查看 |
关键配置如下图所示,配置完成后保存监控器。


- Step3:结束应用进程,触发告警。在 windows server 上使用「任务管理器」结束 chrome 浏览器进程。

- Step4:当进程被终止后,观测云将接收到 DataKit 上报的 exception=1 的信号,并将按照监控器配置产生 Critical 级别事件,通过设定的通知渠道发送给告警接收人/团队。 进入观测云「事件中心」可查看该事件。
如下图所示,观测云将接收到 chrome 进程的 excetpion 指标值为 1 的信号。

监控器产生的事件如下:

总结
综上,通过在连锁门店部署针对 DNS 解析异常、DNS 污染、主机离线及应用进程异常的拨测与监测方案,能够实时感知网络与应用层的潜在风险,快速定位中断根因,有效规避因网络或服务不可用导致的交易停滞、顾客流失及隐性收益损失。该实践以"主动监测+精准告警"为核心,为连锁企业构建了覆盖全网门店的业务连续性保障体系,是支撑数字化运营稳定、提升门店服务韧性的关键基础。