2020-04-11

【InfluxDB】別のPCから接続する

ローカルネットワークを利用して別のPCからInfluxDBやChronografを使う方法を紹介する

Article Image

まずはローカルで起動できているか確認

InfluxDBが起動しているPCでブラウザから http://localhost:8086/にアクセスすると次のようにシンプルなテキストが表示される。

404 page not found

404エラーが出ているがこれは後ろで起動しているInfluxDBが正しくエラーを出している結果だ(InfluxDBにHTTPのUI機能が無いため)

不安であれば http://localhost:8086/debug/vars にアクセスしJSONが帰ってくることを確認するのもよい。

参考:もしInfluxDBに正しくアクセス出来ていない場合は次の表示になる(Windows)

このサイトにアクセスできません

別のPCからアクセスしてみると

ではこれをローカルネットワーク上の別のPCからアクセスすると次のようなメッセージでアクセス出来ない場合がある。

このサイトにアクセスできません

{アドレス} からの応答時間が長すぎます。

これは単純にファイアーウォールが仕事しているだけではない可能性が高い。そもそもInfluxDBが別マシンからのアクセスに応答しないようになっている可能性がある。

confファイルの変更

bind-address を次のように変更する。

bind-address = ":8086"

bind-address の設定が2箇所あるという問題

実はデフォルトでは [http] の項目で bind-address = ":8086" になっているのだがconfファイルにbind-addressが2行コメントアウトされており片方が 127.0.0.1:8088 になっている。他のウェブサイトでも localhost:8086 などを推奨しているページが散見されるためこの設定が別れているパターンが多そうだ。

余談:127.0.0.1:8088Backup and Restore にて使用するそうだ。

ファイアーウォールのポートを開放

ここは個別に設定が違うが、Windowsセキュリティを使用している場合は

  1. 左下の「ここに入力して検索」に「windows defender」と入力して「Windows セキュリティの設定」をクリック

    1. ここに入力して検索

  2. 「ファイアーウォールとネットワーク保護」から「詳細設定」をクリック

    1. 詳細設定

  3. 送信の規則・受信の規則どちらにも「新しい規則」でポートを開放する

    1. 新しい規則

    「送信・受信」両方とも開放することを忘れずに。

  4. あとは手順に従ってTCPを選択、ポート番号を入力、接続を許可、規則は全て、名前をつけて完了

    ★冗長になるので画像は省略

これでアクセスができるか確認

ipアドレス:8086 にクライアントのPCから接続して 404 page not found がテキストで表示されるか確認する。

筆者の場合はサーバがwi-fi接続、クライアントが有線で同一のルータに接続されているがこれだけで問題なく利用できている。

認証を設定

セキュリティのため認証を設定する

  1. confファイルで次を設定する

    auth-enabled = true
  2. InfluxDBを起動する

  3. コマンドプロンプトから次のコマンドで管理者のユーザーIDとパスワードを登録する

    curl -X POST http://ここにサーバip:8086/query --data-urlencode "q=CREATE USER ここにユーザ名 WITH PASSWORD 'ここにパスワード' WITH ALL PRIVILEGES"

    ★ユーザー名はそのままでパスワードはシングルクォーテーションで囲うようだ。

  4. {"results":[{"statement_id":0}]} が帰ってきたら成功

その他

Telegrafはconfファイルにユーザー名とパスワードを設定する箇所があるので記入して保存しておく。

  ## HTTP Basic Auth
  username = "telegraf"
  password = "metricsmetricsmetricsmetrics"

ChronografはDBに接続する最初の設定でUI上から設定できる。

Chronograf

node-influxからログインして登録する場合は次のinfluxDBのオブジェクトにコードを使う。

const client = new Influx.InfluxDB({
  database: 'my_db',
  host: 'localhost',
  port: 8086,
  username: 'connor', //ここを追記:ユーザ名
  password: 'pa$$w0rd', //ここを追記:パスワード  
  
  //続く

余談:setPassword() という関数もあるが、こちら単体では動作しなかったため上記の方法で対応。

所感

もっとセキュアな認証方法にも対応しているが大変な記事になるので今回は簡単な方で実装した。

付随するプログラムにも認証手続きが必要となるため思いの外大変になった印象だがセキュリティ的には仕方がない。



この記事のタグ

この記事をシェア


謎の技術研究部 (謎技研)