问题描述
接到易超的反馈 之前用falcon数据做的几张报表屡次出现断图详见:
经过排查,发现该机器为windows服务器
排查过程与问题确认
排查方向为:
- tcp连接数过多
netstat 查看 time_wait 的连接几乎没有 - 内存不足
从zabbix的监控数据来看,内存使用率在30%左右 - 网络不稳定
无丢包 - 重启服务
还是断图
但是经过观察,发现zabbix并未出现断图,应该是falcon agent本身的问题
检查falcon-agent windows版源码
在排查过程中发现整个agent 有用的日志极少,而且未做切割,阅读起来极其困难
修改源码,丰富日志
通过对源码的阅读,最终定位在采集指标的那一段代码,最终定位在:buildmapper函数,发现是TcpipMetrics()函数阻塞了整个agent的日志上报
具体可以看:
为什么会阻塞?
因为该函数需要调用windows的wmi 才能获取到数据,而windows的wmi组件经常会抽风,比如我们在用在通虚拟机时会调用该模块,但是经常会超时,导致虚机开通失败
解决方案
既然无法绕过,那可以修改其机制,而且换一个角度想,如果下次是其他的原因导致某个指标长时间未返回,是不是也会同步阻塞掉其他指标的上报?
修改源码,所有函数都并发执行即可,具体见代码
funcs.go
//var Mappers []FuncsAndInterval
var Mappers = []func() []*model.MetricValue{
AgentMetrics,
CpuMetrics, //
NetMetrics, //
MemMetrics,//
DeviceMetrics,//
DiskIOMetrics,
TcpipMetrics,
PortMetrics,
ProcMetrics,
NetstatSummaryMetrics,
iisMetrics,
mssqlMetrics,
}