ヘルプ
よくある質問と、つまずきやすい点をまとめました。答えが見当たらないときはメールでご連絡ください。宛先はページ下部にあります。
はじめに
ブローカーの価格は?
無料です。デバイス、メッセージ、購読、サーバーの数に制限はなく、ライセンスキーも不要で、テレメトリーも収集しません。
対応しているシステムは?
Debian と Ubuntu(APT リポジトリのパッケージ)、Windows 10・11 x64(そのまま使える .exe)、さらに amd64、arm64、armhf 向けの Linux ビルドがあり、Raspberry Pi を含むどのディストリビューションでも手動で起動できます。
ほかに何をインストールすればよいですか?
何も要りません。バイナリは静的リンクされており、実行環境も libc も外部データベースも不要です。状態はブローカー自身の中の純 Go の SQLite に保存されます。
インストール後はどこへ行けばよいですか?
ダッシュボードは http://あなたのサーバー:8567 で待っています。初期のログインは admin、パスワードは admin です。最初のログイン後すぐにプロフィール画面で変更してください。
既定で開いているポートは?
TCP 上の MQTT は 1883、TLS 上の MQTT は 8883、Web ダッシュボードと /mqtt での WebSocket 上の MQTT は 8567 です。ポートは config.json かコマンドラインのオプションで変更できます。
デバイスの接続
デバイスが接続できず「not authorized」と出ます。何が問題ですか?
おそらくダッシュボード管理者のログイン情報を使っています。両者は別物で、管理者が扱うのは Web インターフェースだけです。デバイスはユーザー画面で作る別のアカウントで接続します。そこでユーザーを作り、その名前とパスワードで接続してください。
クライアントは接続できるのにメッセージが見えません。
権限を確認してください。ACL は既定ですべて拒否で、明示的な許可がなければアクセスできません。対象のトピックフィルターについて read か readwrite のルールがあり、それが拒否のルールより上にあることを確かめてください。ルールは上から順に最初の一致まで確認されます。
デバイスに自分の枝だけへのアクセスを与えるには?
フィルター $u/#、アクセス readwrite のルールを追加してください。$u は接続してきたクライアント名に展開されるので、1 つのルールで全員に対応でき、各デバイスは自分の枝しか見えません。ダッシュボードにはこのための「自分の枝」ボタンがあります。
匿名アクセスを許可できますか?
はい。設定 → ブローカーに専用のスイッチがあります。ただし匿名クライアントには $SYS を含め $ の名前空間全体が拒否されます。
# を購読しても $SYS が見えないのはなぜ?
仕様がそう定めているためです。ワイルドカードは $ で始まるトピックに届きません。統計を読むには $SYS/# のような明示的なルールが必要です。ブローカーの設定には $SYS の全体スイッチもあります。
ブラウザーから接続するには?
WebSocket 上の MQTT を使います。アドレスは ws://あなたのサーバー:8567/mqtt、サブプロトコルは mqtt です。WebSocket はダッシュボードと同じポートで動くので、別のゲートウェイは要りません。
安全性と TLS
8883 に接続するとクライアントが証明書について警告します。
初回起動時にブローカーが自己署名証明書を生成するためです。試験用には十分ですが、クライアントはこれを信頼しません。本番では設定の tls ブロック(cert と key の項目)に自前の証明書を指定し、ブローカーを再起動してください。
管理者パスワードを変えるには?
プロフィール画面で変更します。新しいパスワードはハッシュとして config.json に書き込まれ、平文のパスワードはファイルに残りません。
管理者パスワードを忘れました。
ブローカーを停止し、config.json の auth ブロックから passwordHash の項目を削除して、代わりに "password": "新しいパスワード" を書いてください。次の起動でブローカーがハッシュを計算し、平文の値をファイルから消します。
ダッシュボードがインターネットから見えていますが問題ありませんか?
Linux の標準的な導入では、ダッシュボードは 127.0.0.1 だけで待ち受け、nginx 経由で公開します。そこに HTTPS やアクセス制限を足すのは容易です。ポート 8567 をそのまま外に出すのは得策ではありません。
別のシステムに API アクセスを与えるには?
設定 → API でベアラートークンを作ります。表示は 1 度きりで、保存されるのはハッシュだけです。統計しか要らないシステムなら「読み取り専用」にチェックを入れてください。GET、HEAD、OPTIONS だけが通ります。
負荷と信頼性
1 台のデバイスがメッセージであふれさせています。どうすれば?
設定 → ブローカーで制限を有効にしてください。毎秒のメッセージ数、バースト、毎秒のバイト数で、接続ごとに効きます。超過しても接続は切れず、メッセージも失われません。ブローカーがソケットの読み取りを遅らせ、送信側が自ら速度を落とします。
特定のトピックだけがうるさく、クライアント自体は問題ありません。
ルール → トピック制限の出番です。パターンごとのルールで、最新値を保ちながら一定の頻度まで間引くか、そのトピックを丸ごと捨てられます。毎秒 10 回送るセンサーは毎秒 1 件になり、しかも最新の値が届きます。
ブローカーを再起動しても残るものは?
retain メッセージ、購読とオフラインキューを含む永続セッション、未完了の QoS 手順、遅延メッセージです。クリーンセッションは保存されません。仕様上、接続とともに消えるものだからです。
クラスタリングには対応していますか?
いいえ。このブローカーは単一プロセスとして設計されています。複数のブローカーをつなぐにはブリッジがあり、サーバー間でトピックを双方向に転送します。
いま何が起きているかを見るには?
トラフィック画面に、フィルターと一時停止を備えたメッセージとブローカーイベントのリアルタイムな流れが出ます。概要画面には流量のグラフ、マシンの状態、イベントの流れがあります。データは WebSocket で届きます。
保守
Debian や Ubuntu でブローカーを更新するには?
システム全体と一緒に行います。sudo apt-get update && sudo apt-get upgrade だけで、ほかに必要な作業はなく、設定もデータもそのまま残ります。
設定を別のサーバーへ移すには?
設定 → インポートとエクスポートで、古いサーバーでファイルを取得し、新しいサーバーで読み込みます。設定、ユーザー、ルールが引き継がれます。
データとログはどこにありますか?
データはバイナリの隣の data ディレクトリ(Linux では /opt/elxmqttbroker)にあり、broker.db、users.json、証明書が入っています。Linux ではログは journald へ送られます:journalctl -u elxmqttbroker -f。
動いているバージョンを確かめるには?
バージョン、ビルド番号、ビルド日時はバイナリに埋め込まれています。サイドバーの下部、バージョン情報の画面、elxmqttbroker -version の実行結果で確認できます。
状態の永続化を切れますか?
はい。config.json で persistence: false にします。その場合はすべてメモリー上だけに保たれ、再起動で失われます。試験環境では理にかなった選択です。
見つかりませんでした。別の語で試すか、ご連絡ください。
答えが見つかりませんでしたか?
ご連絡ください。お手伝いし、この章も充実させていきます。