滴滴夜莺nightingale v2版本 监控端口存活上报数据一直为0修复
- 小弟最近使用夜莺监控系统v2版本时候,有一台服务器9200端口报警,上报数据为0,但是小弟我上服务器一看,发现已经监听了,而且telnet和python socket都可以连接,这就纳闷了,这是为什么呢?最后经过给官方提交issue,官方已经在v3版本修复了这个问题了,但是还在用v2版本的朋友们因为缺少一些模块,不太实用,所以就想着自己去修改一下源码
![]()
- 查看collector源码,发现端口监控部分的代码标红部分需要修改
func PortCollect(p *model.PortCollect) {
value := 0
if isListening(p.Port) {
value = 1
}item := core.GaugeValue("proc.port.listen", value, p.Tags)
item.Step = int64(p.Step)
item.Timestamp = time.Now().Unix()
item.Endpoint = identity.Identity
core.Push([]*dataobj.MetricValue{item})
}func isListening(port int) bool {
tcpAddress, err := net.ResolveTCPAddr("tcp4", fmt.Sprintf(":%v", port))
if err != nil {
logger.Errorf("net.ResolveTCPAddr(tcp4, :%v) fail: %v", port, err)
return false
}listener, err := net.ListenTCP("tcp", tcpAddress)
if err != nil {
logger.Debugf("cannot listen :%v(%v), so we think :%v is already listening", port, err, port)
return true
}
listener.Close()return false
}func isListen(port, timeout int, ip string) bool {
var conn net.Conn
var err error
addr := fmt.Sprintf("%s:%d", ip, port)
if timeout <= 0 {
// default timeout 3 second
timeout = 3
}
conn, err = net.DialTimeout("tcp", addr, time.Duration(timeout)*time.Second)
if err != nil {
return false
}
conn.Close()
return true
} -
用isListen函数去检测端口存活
func GetLocalIp() (result string) {
addrs, err := net.InterfaceAddrs()
result="127.0.0.1"
if err != nil{
fmt.Println(err)
return result
}
for _, value := range addrs{
if ipnet, ok := value.(*net.IPNet); ok && !ipnet.IP.IsLoopback(){
if ipnet.IP.To4() != nil{
result=ipnet.IP.String()
return result
}
}
}
return result
}
func PortCollect(p *model.PortCollect) {
value := 0
local_ip := GetLocalIp()
if isListen(p.Port, 1, "127.0.0.1") {
value = 1
} else if isListen(p.Port, 1, local_ip) {
value = 1
} else if isListen(p.Port, 1, "::1") {
value = 1
}item := core.GaugeValue("proc.port.listen", value, p.Tags)
item.Step = int64(p.Step)
item.Timestamp = time.Now().Unix()
item.Endpoint = identity.Identity
core.Push([]*dataobj.MetricValue{item})
} - 去linux服务器编译一下./control build collector, 发现好使了
在此还是要感谢滴滴的大佬们的解惑!

浙公网安备 33010602011771号