InfluxDBがまた2日くらいデータを蓄積しなくなった。現在はラズパイ3B+が母艦で各種センサーのデータをラズパイに大量に投げているので、SYN FLODDアタックと勘違いしてtcp_syncookiesを閉じられたり、バージョンが古くなって正常に動かなくなったりして、その都度対処しています。
ラズパイ3はやはりInfluxDBをまともに使うには力不足なのでしょう。ラズパイ4を母艦にするか検討中。
InfluxDBはラズパイ3では荷が重い?
InfluxDBが収集するデータを減らしたつもりですが、それでもtopコマンドを見るとInfluxDBがCPU使用率70~400%の高い数値でラズパイを圧迫している・・・
結構頻繁にデータを取得せずにGrafanaは↓このような表示になって困る。
Possible SYN flooding on port 8000
InfluxDBがデータを収集しなくなったらdmesgのTCPの項目をチェックしてみる。
どうやら8000ポートが大量に送られてくるので攻撃されていると勘違いして遮断しているみたい。
$ dmesg TCP: request_sock_TCP: Possible SYN flooding on port 8000. Sending cookies. Check SNMP counters.
ものすごい数のポート8000からの処理がTIME_WAITになっていてInfluxDBに保存されない状態だった。
$ netstat -nta | egrep "State|8000" tcp6 0 0 :::8000 :::* LISTEN tcp6 0 0 192.168.31.53:8000 192.168.31.75:59596 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.75:59672 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.75:59600 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.119:59185 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.119:59120 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.119:59190 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.119:59155 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.75:59578 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.119:59137 TIME_WAIT
特にアタックではなくデータ収集しているので許可する。net.ipv4.tcp_syncookiesの「1」で許可、「0」ではじく(攻撃されている場合)
$ sudo sysctl -w net.ipv4.tcp_syncookies=1 net.ipv4.tcp_syncookies = 1
1にしたらInfluxDBにデータが保存されるようになった。
$ cat /proc/sys/net/ipv4/tcp_syncookies 1
が、暫く経つとまた「Bad Gateway(502)」の表示になる・・・
再起動して210秒後?にまたでてきた・・・
$ dmesg [ 210.093560] TCP: request_sock_TCP: Possible SYN flooding on port 8000. Sending cookies. Check SNMP counters.
データの送信を減らして、CronなどのInfluxDBにインサートするデータの更新時間を10分と長めにしてなんとかしのぐ。
2日ほどずっとInfluxDBのデータが蓄積されない
2019/11/14 net.ipv4.tcp_syncookies=1のコメントアウトを削除して有効にしてみる。
$ sudo vim /etc/sysctl.conf net.ipv4.tcp_syncookies=1
これで持続的に攻撃されてると勘違いすることはなくなる?
influxコマンドで入ろうとすると・・・
このようなエラーになる・・・
$ influx use sensor Failed to connect to http://localhost:8086: Get http://localhost:8086/ping: dial tcp [::1]:8086: connect: connection refused Please check your connection settings and ensure 'influxd' is running.
Influxは正常に動いているみたいだけど、
$ systemctl status influxdb ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-11-14 13:47:10 JST; 3min 46s ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 29750 (influxd) CGroup: /system.slice/influxdb.service └─29750 /usr/bin/influxd -config /etc/influxdb/influxdb.conf 11月 14 13:50:54 Raspi3Bp influxd[29750]: ts=2019-11-14T04:50:54.506430Z lvl=info msg="Reading file" log_i
8086へのPingは返答なし・・・
$ curl -sl -I http://localhost:8086/ping
8083もポートが開いてない!!どういうこと?
$ ss -lntp | grep 808 LISTEN 0 128 127.0.0.1:8088 *:*
正常だと以下のようになる。
$ ss -lntp | grep 808 LISTEN 0 128 :::8083 :::* LISTEN 0 128 :::8086 :::* LISTEN 0 128 :::8088 :::*
InfluxDBのバージョンが少し古い
Influxdbのパッケージのバージョン。最新バージョンが1.7.7.1だから少し古い、バージョンアップする。
$ dpkg -l influxdb 要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持 | 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留 |/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常) ||/ 名前 バージョン アーキテクチ 説明 +++-==============-============-============-================================= ii influxdb 1.7.6-1 armhf Distributed time-series database.
apt-get upgradeしたらすごく時間がかかった、アップグレードしてないツールがたくさんあったみたい。
$ sudo apt-get update && sudo apt-get upgrade -y
InfluxDB1.7.9-1になったけど・・・まだポート8086が開いてない。
削除して再インストールする。
$ sudo apt-get remove influxdb $ sudo apt-get install influxdb
だめ・・・
と思ったら・・・しばらくしたら何事もなかったように戻った。
$ curl -sl -I http://localhost:8086/ping HTTP/1.1 204 No Content Content-Type: application/json Request-Id: d0817ebe-06ad-11ea-80ef-b827eb9dbfd5 X-Influxdb-Build: OSS X-Influxdb-Version: 1.7.9 X-Request-Id: d0817ebe-06ad-11ea-80ef-b827eb9dbfd5 Date: Thu, 14 Nov 2019 07:10:18 GMT
ポート8086が開いてる。
$ ss -lntp | grep 808 LISTEN 0 128 127.0.0.1:8088 *:* LISTEN 0 128 :::8086 :::*
アップグレードしたから治ったのか?InfluxDBを削除後インストールしたからちゃんと動き出したのかは不明。
Grafanaもちゃんと見えるようになってきた↓世話が焼けます。
でもやはりラズパイ3だと力不足です。
upgradeを自動化
今後も不具合が置きたら手動でアップグレードしたりするのが面倒なので、unattended-upgradesで自動化することにします。
$ sudo apt-get update $ sudo apt-get install unattended-upgrades #インストール $ sudo dpkg-reconfigure -plow unattended-upgrades
ラズパイ4だと以下のようになりました。
ラズパイ3だとなにやらさらに説明が出た。
設定
設定は以下のようにしました。stableのみアップグレードすることと、アップグレード後に2時に再起動する。
$ sudo vim /etc/apt/apt.conf.d/50unattended-upgrades "o=Debian,a=stable";//セキュリティーアップデートの対象パッケージをのみ //アップグレード後にリブートする Unattended-Upgrade::Automatic-Reboot-Time "02:00";
unattended-upgradesをインストールしなくても、Cronで以下のようにしてもいけるようです。(毎週月曜日の3時に実行)
0 3 * * 1 apt-get update && sudo apt-get upgrade -y
IPアドレスが変わった場合
ラズパイのIPアドレスが変わって「Network Error: Bad Gateway(502)」と怒られる時もある。
InfluxDBの8086が開いていてGrafanaの設定だけの場合はGrafanaのデータベースのURLを変更する。根本的にInfuxDBが8086ポートを開いてない場合も同様のエラーが起きるのでその場合はInfuxDBで対処する。
DB設定でGrafanaのURLを変更
Grafanaの左メニューの歯車アイコン > Configration > Data Sourcesに進む。
以下のような画面になりますので、データベースを押す。データベースの数だけ設定していきます。
HTTPのURLを変更する。
Hostnameを設定する箇所は2つ
IPアドレス固定にしてない場合は、面倒なのでhostnameを使うといいと思いました。
例えばhostnameを「Raspi3B」にする場合は以下のようにhosts,hostnameの2つのファイルを編集します。
$ sudo vi /etc/hosts 127.0.1.1 Raspi3B #例 $ sudo vi /etc/hostname Raspi3B #例
これでローカルからのみですが「http://Raspi3B:8086」でGrafanaにアクセスすることができるようになります。
結局のところTIME_WAITがたまるのでラズパイ4でInfluxDBを使う
Grafanaでちゃんとグラフが表示されても、常時ラズパイ3B+のInfluxDBのCPU使用率が高く、TIME_WAITにたくさん処理待ちが溜まっているのでラズパイ4に移行するしかなさそう。
どっちにしろこれ以上センサーを増やせないので今後はラズパイ3を母艦にはできなさそう。
$ netstat -nta | egrep "State|8000" tcp6 0 0 192.168.31.53:8000 192.168.31.117:51700 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56544 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56520 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51718 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51702 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56714 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51728 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51745 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56670 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56634 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56704 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56628 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51760 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56596 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56686 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56648 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56538 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.100:56618 TIME_WAIT tcp6 0 0 192.168.31.53:8000 192.168.31.117:51699 TIME_WAIT
InfluxDBのデータベースどうやって移動しようか?
ここで↓InfluxDBのバックアップ・リストア書いたけど時間がかかるので面倒だからWindowsでVirtualboxのUbuntu起動してInfluxDBのDBを取り出してコピーしてみます。

以上、InfluxDBが正常に動作しないときに解決した方法です。またInfluxDBでトラブル置きた場合も追記していきます。
コメント