問題描述
接到易超的反饋 之前用falcon數(shù)據(jù)做的幾張報表屢次出現(xiàn)斷圖詳見:
經(jīng)過排查狡相,發(fā)現(xiàn)該機(jī)器為windows服務(wù)器
排查過程與問題確認(rèn)
排查方向?yàn)椋?/p>
- tcp連接數(shù)過多
netstat 查看 time_wait 的連接幾乎沒有 - 內(nèi)存不足
從zabbix的監(jiān)控數(shù)據(jù)來看,內(nèi)存使用率在30%左右 - 網(wǎng)絡(luò)不穩(wěn)定
無丟包 - 重啟服務(wù)
還是斷圖
但是經(jīng)過觀察拄养,發(fā)現(xiàn)zabbix并未出現(xiàn)斷圖取具,應(yīng)該是falcon agent本身的問題
檢查falcon-agent windows版源碼
在排查過程中發(fā)現(xiàn)整個agent 有用的日志極少仿便,而且未做切割悯仙,閱讀起來極其困難
修改源碼囱修,豐富日志
通過對源碼的閱讀捐下,最終定位在采集指標(biāo)的那一段代碼账锹,最終定位在:buildmapper函數(shù),發(fā)現(xiàn)是TcpipMetrics()函數(shù)阻塞了整個agent的日志上報
具體可以看:
為什么會阻塞坷襟?
因?yàn)樵摵瘮?shù)需要調(diào)用windows的wmi 才能獲取到數(shù)據(jù)奸柬,而windows的wmi組件經(jīng)常會抽風(fēng),比如我們在用在通虛擬機(jī)時會調(diào)用該模塊婴程,但是經(jīng)常會超時廓奕,導(dǎo)致虛機(jī)開通失敗
解決方案
既然無法繞過,那可以修改其機(jī)制档叔,而且換一個角度想桌粉,如果下次是其他的原因?qū)е履硞€指標(biāo)長時間未返回,是不是也會同步阻塞掉其他指標(biāo)的上報衙四?
修改源碼铃肯,所有函數(shù)都并發(fā)執(zhí)行即可,具體見代碼
funcs.go
//var Mappers []FuncsAndInterval
var Mappers = []func() []*model.MetricValue{
AgentMetrics,
CpuMetrics, //
NetMetrics, //
MemMetrics,//
DeviceMetrics,//
DiskIOMetrics,
TcpipMetrics,
PortMetrics,
ProcMetrics,
NetstatSummaryMetrics,
iisMetrics,
mssqlMetrics,
}