ラズパイ+BME280で温度・湿度・気圧を計測(BMP280は湿度なし):ラズパイとPPD42NJダストセンサー 自宅PM2.5値を自作で計測:InfluxDBがデータを保存しない!8086ポート閉じてInfluxDB SYN FLOOD攻撃とみなされてデータを保存しなくなった

InfluxDBがまた2日くらいデータを蓄積しなくなった。現在はラズパイ3B+が母艦で各種センサーのデータをラズパイに大量に投げているので、SYN FLODDアタックと勘違いしてtcp_syncookiesを閉じられたり、バージョンが古くなって正常に動かなくなったりして、その都度対処しています。

ラズパイ3はやはりInfluxDBをまともに使うには力不足なのでしょう。ラズパイ4を母艦にするか検討中。

この記事は複数のページに別れています
  1. (今このページを見ています)

InfluxDBはラズパイ3では荷が重い?

InfluxDBが収集するデータを減らしたつもりですが、それでもtopコマンドを見るとInfluxDBがCPU使用率70~400%の高い数値でラズパイを圧迫している・・・

結構頻繁にデータを取得せずにGrafanaは↓このような表示になって困る。

InfluxDB

 

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もちゃんと見えるようになってきた↓世話が焼けます。

InfluxDB

でもやはりラズパイ3だと力不足です。

upgradeを自動化

今後も不具合が置きたら手動でアップグレードしたりするのが面倒なので、unattended-upgradesで自動化することにします。

$ sudo apt-get update 
$ sudo apt-get install unattended-upgrades #インストール
$ sudo dpkg-reconfigure -plow unattended-upgrades

ラズパイ4だと以下のようになりました。

unattended-upgrades

ラズパイ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)」と怒られる時もある。

 
Network Error: Bad Gateway(502)

InfluxDBの8086が開いていてGrafanaの設定だけの場合はGrafanaのデータベースのURLを変更する。根本的にInfuxDBが8086ポートを開いてない場合も同様のエラーが起きるのでその場合はInfuxDBで対処する。

DB設定でGrafanaのURLを変更

Grafanaの左メニューの歯車アイコン > Configration > Data Sourcesに進む。

以下のような画面になりますので、データベースを押す。データベースの数だけ設定していきます。

sudo vi /etc/hosts sudo vim /etc/hostname

HTTPのURLを変更する。

sudo vi /etc/hosts sudo vim /etc/hostname

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を取り出してコピーしてみます。

【Iot環境センシング下準備】InfluxDB設定+Grafana+telegrafでラズパイデータ可視化 カッコいいグラフを作ろう
自宅環境センシングの2回目の記事として今回はラズパイ(Raspberry Pi)にデータベースのInfluxDBを入れて将来的にセンシングしたデータをInfluxDB保存していきます。 そして次回は、GrafanaというデータをWebで美し

 

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

コメント

タイトルとURLをコピーしました