@@ -110,6 +110,11 @@ func (ins *Instance) Gather(slist *types.SampleList) {
110
110
111
111
func (ins * Instance ) gatherOneHost (wg * sync.WaitGroup , slist * types.SampleList , zkHost string ) {
112
112
defer wg .Done ()
113
+ defer func () {
114
+ if r := recover (); r != nil {
115
+ log .Println ("E! Recovered in zookeeper gatherOneHost " , zkHost , r )
116
+ }
117
+ }()
113
118
114
119
tags := map [string ]string {"zk_host" : zkHost , "zk_cluster" : ins .ClusterName }
115
120
begun := time .Now ()
@@ -120,27 +125,22 @@ func (ins *Instance) gatherOneHost(wg *sync.WaitGroup, slist *types.SampleList,
120
125
slist .PushFront (types .NewSample ("" , "zk_scrape_use_seconds" , use , tags ))
121
126
}(begun )
122
127
123
- // zk_up
124
- mntrConn , err := ins .ZkConnect (zkHost )
125
- if err != nil {
126
- slist .PushFront (types .NewSample ("" , "zk_up" , 0 , tags ))
127
- log .Println ("E! failed to connect zookeeper:" , zkHost , "error:" , err )
128
- return
129
- }
130
-
131
- defer mntrConn .Close ()
132
- ins .gatherMntrResult (mntrConn , slist , tags )
128
+ // zk_up zk_ruok
129
+ conn , err := ins .ZkConnect (zkHost )
133
130
134
- // zk_ruok
135
- ruokConn , err := ins .ZkConnect (zkHost )
136
131
if err != nil {
132
+ slist .PushFront (types .NewSample ("" , "zk_up" , 0 , tags ))
137
133
slist .PushFront (types .NewSample ("" , "zk_ruok" , 0 , tags ))
138
134
log .Println ("E! failed to connect zookeeper:" , zkHost , "error:" , err )
139
135
return
140
136
}
137
+ defer conn .Close ()
138
+
139
+ // prevent blocking
140
+ conn .SetDeadline (time .Now ().Add (time .Duration (ins .Timeout ) * time .Second ))
141
141
142
- defer ruokConn . Close ( )
143
- ins .gatherRuokResult (ruokConn , slist , tags )
142
+ ins . gatherMntrResult ( conn , slist , tags )
143
+ ins .gatherRuokResult (conn , slist , tags )
144
144
}
145
145
146
146
func (ins * Instance ) gatherMntrResult (conn net.Conn , slist * types.SampleList , globalTags map [string ]string ) {
@@ -226,12 +226,14 @@ func (ins *Instance) gatherRuokResult(conn net.Conn, slist *types.SampleList, gl
226
226
func sendZookeeperCmd (conn net.Conn , cmd string ) string {
227
227
_ , err := conn .Write ([]byte (cmd ))
228
228
if err != nil {
229
- log .Println ("E! failed to exec Zookeeper command:" , cmd )
229
+ log .Printf ("E! failed to exec Zookeeper command: %s response from '%s': %s" , cmd , conn .RemoteAddr ().String (), err )
230
+ return ""
230
231
}
231
232
232
233
res , err := ioutil .ReadAll (conn )
233
234
if err != nil {
234
235
log .Printf ("E! failed read Zookeeper command: '%s' response from '%s': %s" , cmd , conn .RemoteAddr ().String (), err )
236
+ return ""
235
237
}
236
238
return string (res )
237
239
}
0 commit comments