zabbix-proxyでMySQL server has gone awayが出る対処

gone awayとかいわれてビビるけどそんなに致命的ではなかった備忘録。

軽くググった感じでは
http://tech.g.hatena.ne.jp/rx7/20100708/p1
とか
http://qiita.com/RyutaKojima/items/3772d695db5e2342ab47
こんな感じでtimeoutがらみのようでありました。

挨拶がわりにnetstatでListenしてるポートをみる

```
# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1970/mysqld         
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1225/rpcbind        
tcp        0      0 0.0.0.0:4949                0.0.0.0:*                   LISTEN      22120/perl          
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      16478/zabbix_agentd 
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      2857/zabbix_proxy   
tcp        0      0 0.0.0.0:1220                0.0.0.0:*                   LISTEN      1324/sshd           
tcp        0      0 :::111                      :::*                        LISTEN      1225/rpcbind        
tcp        0      0 :::1220                     :::*                        LISTEN      1324/sshd           
```

・ログみると一分おきにでていた

```
# tail -f /var/log/zabbix/zabbix-proxy.log
2868:20170711:102306.839 [Z3005] query failed: [2006] MySQL server has gone away [select hostid,status from hosts where host='xxx-http01' and status in (0,1) and proxy_hostid=0]  

2871:20170711:102400.810 [Z3005] query failed: [2006] MySQL server has gone away [select hostid,status from hosts where host='xxx-backup01' and status in (0,1) and proxy_hostid=0]
```

気にしなくてもいいしwait_timeout伸ばしてもいいかなって感じみたい。
http://www.zabbix.jp/node/3209

・ちょっとパラメータを確認

```
# mysql -u root -p

mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 60    |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'interactive_timeout';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
+---------------------+-------+
1 row in set (0.00 sec)

mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)
```

・mysqltunerでいちおう確認

一応見たがまずそうなサジェストは出てなかった。

・値を変えてみる（オンライン）

```
mysql> set global wait_timeout=3600;
Query OK, 0 rows affected (0.00 sec)

mysql> set global interactive_timeout=3600;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 3600  |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'interactive_timeout';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 3600  |
+---------------------+-------+
1 row in set (0.00 sec)
```

・様子をみる
一分おきには出なくなった。

```
# tail -f /var/log/zabbix/zabbix-proxy.log
```

・まだでるので一応SQL文の最大長も広げる

```
mysql> set global max_allowed_packet=33554432;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 33554432 |
+--------------------+----------+
1 row in set (0.00 sec)
```

どこまで増やせるか的な情報↓
http://nippondanji.blogspot.jp/2009/05/mysql.html

・my.cnfも変えとく（再起動後にも反映）

```
# cp -p /etc/my.cnf{,.`date +%Y%m%d`}
# vi /etc/my.cnf
# diff /etc/my.cnf{,.`date +%Y%m%d`}
21,22c21
< wait_timeout = 3600
< interactive_timeout = 3600
---
> wait_timeout = 60
29c28
< max_allowed_packet = 32M
---
> max_allowed_packet = 16M
```

・しばらく様子を見る

zabbix-proxyのログ以外にMySQL本体のerrorlogはとくに出てなかった。
追ってみてたら1時間くらい連続で出なくなってたので解決。

・そのたactive checksでhost not foundとか言われるログの対処

```
Sending list of active checks to [xxx.xxx.xxx.20] failed: host [xxx-zabbix01] not found
```

http://www.zabbix.jp/node/361

ホスト監視してないとかホスト名一致しないと出るやつ。
zabbix-server側にhosts登録及び監視ホスト登録して解消。