Skip to content

EMQX Enterprise Version 4 ​

e4.4.38 ​

リリース日: 2026-09-01

強化点 ​

  • ダッシュボードユーザーはカテゴリによる細かな権限管理に対応しました。

    これまでダッシュボードユーザーは administrator(全権限)と viewer(読み取り専用)の2つのロールのみでした。

    今回のリリースでは、9つのカテゴリに基づく権限モデルを導入しました:

    • 既存の6つのビジネスカテゴリ:banned、rule_engine、resources、plugins、modules、others。これらはAPIキーとダッシュボードユーザーの両方に適用されます。
    • ダッシュボードユーザーのみ対象の新規3カテゴリ:user_management(他のダッシュボードアカウント管理)、mfa_management(他ユーザーのMFA管理)、app_management(APIキー管理)。

    ダッシュボードユーザーの権限を絞るには、ユーザーの tags フィールドに scopes 配列を設定します。scopes が明示されていないユーザーはアップグレード前の動作を維持します:

    • 管理者はすべてのエンドポイントにアクセス可能。
    • ビューアーはバックアップアーカイブのダウンロードを除くすべての読み取り専用エンドポイントにアクセス可能。

    scopes が設定されると以下のルールが適用されます:

    • 明示的な scopes を持つ管理者は、そのスコープに限定され、読み書き操作ともにスコープリストが厳格に適用されます。
    • ビューアーは読み取り専用のままです。スコープに関わらず他ユーザーのリソースに対する非GETリクエストは拒否されます。
    • ビューアーは user_management と app_management を持てず、デフォルトのビューアースコープはこれらと mfa_management を除外します。ビューアーの mfa_management は強制MFAロックの自己免除のみ可能で、他ユーザーのMFA管理はできません。
    • GETリクエストはスコープチェックされ、スコープ制限ユーザーはマッピングされていないAPIパスは拒否されます(フェイルクローズ)。空のスコープリストは自己サービスを除きすべて拒否します(自身のパスワード、MFA、ログアウトのみ許可)。
    • 自己サービスパスは scopes に影響されません。ビューアーは常に自身のパスワード変更、MFA管理、ログアウトが可能です。
    • ビューアーはバックアップアーカイブ(/api/v4/data/file/*)をダウンロードできなくなりました。バックアップにはダッシュボードユーザーパスワードハッシュ、TOTPシークレット、APIキー認証情報が含まれるためです。エクスポート一覧(/data/export)はビューアーが引き続き利用可能です。

    デフォルトの管理者アカウント(dashboard.default_user.loginで設定)は追加保護されており、降格、明示的な scopes 設定、削除はできません。

  • SAML SSOバックエンドはユーザーごとの force_mfa オーバーライドに対応しました。

    これまで各SAMLバックエンドの force_mfa フラグは全ユーザーに一律適用され、個別調整はできませんでした。

    今回のリリースで、ダッシュボードユーザーの tags フィールドに内部状態 admin_override を追加しました。管理者が他ユーザーのMFAを有効/無効にする既存エンドポイント利用時に暗黙的に管理されます。

    admin_override の意味は以下の通りです:

    • admin_override = mfa_required:バックエンドの force_mfa 設定に関わらず、SSOログイン時にMFAを必須とします。
    • admin_override = mfa_exempted:バックエンドの force_mfa 設定に関わらず、SSOログイン時にMFAをスキップ可能とします。
    • 未設定(デフォルト):バックエンドの force_mfa 設定が適用されます。

    自己サービスによるMFA変更は admin_override を変更せず、元の意味を保持します。

    ローリングアップグレード注意:旧バージョンのノードがクラスターに残っている間は、admin_override = mfa_required は旧ノードで効果を発揮しません。旧ノードは引き続きバックエンドの force_mfa 設定のみを尊重します。admin_override = mfa_exempted は既存の disable_mfa プレースホルダ経路を通じて旧ノードでも有効です。

  • emqx_ctl log-throttling によるログスロットリングのランタイム制御を追加しました。

    これまでグローバルスロットル制限、時間窓、レベルは設定ファイルのみで変更可能でした。新しい log-throttling コマンド群は以下をサポートします:

    • ローカルノードの現在設定を log-throttling print、全ノードで log-throttling print-cluster で表示。
    • グローバル制限、時間窓、レベルをそれぞれ log-throttling limit set <Limit>、log-throttling window set <Duration>、log-throttling level set <Level> で更新。クラスタ全体は対応する set-cluster を使用。
    • 特定ログ行の独立制限を log-throttling line-limit set '<Mod:Ln,...>' <Limit> で設定。例:'emqx_channel:1551,emqx_username_quota:245' 0 は該当行を完全に無音化し、他はグローバル制限を維持。クラスタ全体は set-cluster 版を使用。
    • 行別オーバーライド削除は log-throttling line-limit del '<Mod:Ln,...>'、クラスタ全体は del-cluster 版を使用。

    行番号はリリース間で変動するため、行別制限はランタイムのみで設定ファイルに永続化されません。ログ行が多すぎる・少なすぎる場合の一時的調整に利用してください。

  • デフォルトのログスロットリング設定を 50,60s から 5,60s に変更しました。各スロットラーは60秒間に最大5回まで同一ログを許可し、それ以降は破棄・集約します。高頻度ログによるログ洪水を軽減します。

  • ユーザー名クォーターモジュールは新しいノード間同期機構を採用し、クラスターのパフォーマンスと安定性を向上しました。

    Mnesiaレプリケーションを廃止し、ノードごとのETSテーブルと専用RPCチャネルに基づくストリーミング設計に置換しました。これにより、クラスター参加/離脱時のメモリ使用量とリソース消費を削減し、同期・処理経路の過負荷保護を追加しました。非推奨の refresh_username_tab_interval 設定は削除されました。

  • デフォルトノードの net_ticktime を120秒から60秒に短縮しました。

    高負荷時、遅延または停止したノードへのRPCチャネルが輻輳・ブロックし、キューイングされたメッセージがメモリ使用量を増大させ、OOMを引き起こす可能性があります。

    net_ticktime を60秒に短縮(vm.args の -kernel net_ticktime で設定)することで、クラスターは障害ノードをより速やかに検出・除去可能となり、RPC要求のブロック時間を短縮します。

  • メモリプレッシャー検知によるグローバルGCを強化しました。

    システムメモリ使用率が高水準(os_mon.sysmem_high_watermark)を超え、周期的GCが無効の場合、スムーズなグローバルGCがトリガーされメモリ使用量を削減します。トリガー信号はメモリアラーム発生時に emqx_os_mon が発行します。制御設定は以下の通りです:

    • node.global_gc_mem_pressure(デフォルト on):メモリプレッシャー検知グローバルGCの有効/無効。
    • node.global_gc_mem_pressure_min_interval(デフォルト 5m):2回のメモリプレッシャー検知グローバルGC間の最小間隔(スロットリング用)。
  • クラスター内ノード間リンクの健全性をPrometheusメトリクスで報告するインターノードネットワークヘルスプローブプラグイン emqx_erpc_probe を追加しました。

    各ノードはクラスター内の他ノードごとに独立したプローブプロセスを起動し、erpc_probe.probe_interval(デフォルト1秒)間隔で erpc:call(Peer, erlang, node, [], Timeout) を送信し、erpc_probe.probe_timeout(デフォルト5秒)でタイムアウトを設定します。

    プラグインは以下のPrometheusメトリクスを公開します:

    • emqx_erpc_probe_result_total(カウンター):result ラベル別のプローブ結果数。値は ok、timeout、noconnection、system_limit。
    • emqx_erpc_probe_duration_seconds(ヒストグラム):成功したプローブの往復時間。p99レイテンシなどで遅延リンク検知に利用可能。

    新規インストールでは data/loaded_plugins によりデフォルト有効。設定ファイルは etc/plugins/emqx_erpc_probe.conf。設定変更後はプラグイン再起動が必要です。

    既存クラスターのアップグレードでは data/loaded_plugins を保持するため自動有効化されません。有効化には ./bin/emqx ctl plugins load emqx_erpc_probe を実行するか、data/loaded_plugins に {emqx_erpc_probe, true}. を追加しノードを再起動してください。

バグ修正 ​

  • バックアップ復元時にダッシュボードユーザーの明示的なスコープと admin_override が失われる問題を修正しました。

    バックアップインポート時にダッシュボードユーザーの tags フィールドの拡張フィールドをそのまま保持し、明示的な scopes やユーザーごとの admin_override を復元後も維持するようにしました。これによりロールデフォルトに戻る問題を解消しました。

  • バックアップエンドポイント(/api/v4/data*)がAPIキー認証でアクセス可能だった問題を修正しました。

    バックアップのエクスポート/インポートはAPIキー認証では拒否され、ダッシュボードログインセッションは影響を受けません。

  • APIキー更新エンドポイントの入力検証を厳格化し、不正な値を拒否するようにしました。

    不明な権限キー、真偽値以外の権限値、オブジェクトが期待される permissions にJSON配列、非真偽値の fallback はHTTP 400を返します。部分更新では省略されたフィールドは undefined 文字列で上書きせず既存値を保持します。

  • SAML SSO用の esaml 依存をv1.1.5にアップグレードし、SAMLレスポンスとメタデータのXMLエンティティ展開を無効化しました。これにより悪意あるSAML XMLによる外部またはカスタムエンティティ展開を防止します。

  • SAML SSOコールバックが不正なDEFLATEエンコードレスポンスでHTTP 500を返す問題を修正しました。現在はHTTP 400を返し、Cowboyリクエストプロセスは終了しません。

  • 2つのルールアクションが異なる durable 設定で同じRabbitMQエクスチェンジを宣言した際に、すべてのキューバインディングが破壊される問題を修正しました。

    修正前は exchange.declare の durable 設定不一致でブリッジがエクスチェンジを削除・再宣言し、既存のキューバインディングも消失していました。修正後は durable またはタイプ不一致時に明確なエラーメッセージ(PRECONDITION_FAILED)を返し、既存エクスチェンジとバインディングは保持されます。

  • ゲートウェイ接続のピア証明書CN/DNフィールドの検証を追加しました。

    これまでTLS証明書やPROXYプロトコルv2から取得したCN/DNフィールドは検証されず、制御文字がログインジェクションリスクをもたらしていました。制御文字を含むフィールドは拒否され接続を切断します。

  • バックアップファイル名の検証を強化し、バックアップディレクトリ外へのパス脱出を防止しました。

    これまで拡張子のみ検証していたため、パス区切り文字や不正文字を含む悪意あるファイル名でバックアップディレクトリ外に逃げる可能性がありました。現在は合法的なベース名で、解決後のパスがバックアップディレクトリ内に収まることを要求します。

  • クラスター参加時に評価ライセンスがクラスタライセンスとして選択される可能性を修正しました。

    これまでは評価ライセンスと正式ライセンスが共存すると、クラスタ参加時のライセンス交渉で評価ライセンスが選ばれることがありました。現在は非評価ライセンスを優先します。

  • クラスター参加後に無効化されたモジュールのフックがクリアされず、新ノードでモジュールがアクティブになる問題を修正しました。

    これまではクラスターで無効化されたモジュール(例:Retainer)が新規参加ノードでアクティブのままになり、サブスクリプション処理時にエラーを報告していました。現在はノード参加時に無効モジュールを正しく停止し、フックをクリアします。

  • $SYS トピックの保持メッセージがワイルドカードサブスクリプションに配信される問題を修正しました。

    MQTT仕様により、# または + で始まるフィルターは $ で始まるトピックにマッチしてはいけません。現在は $SYS トピックの保持メッセージは具体的なトピック(例:$SYS/#)にサブスクライブしたクライアントのみに配信されます。

  • 再パブリッシュルールアクションで元メッセージのMQTTプロパティが失われる問題を修正しました。

    これまではユーザープロパティなどのMQTTプロパティが再パブリッシュ時に失われていました。現在は保持されます。

  • MQTTブリッジの接続関連設定の検証不足を修正しました。

    不正なプールサイズや不正な再接続間隔などが静かに適用されたり不明瞭なエラーを生じていました。現在は検証され、不正設定は明確なエラーを返します。

  • 無効な設定でリソース作成時にREST APIが emqx_rule_engine_api をクラッシュさせ、ルールエンジンアプリケーションがシャットダウンする問題を修正しました。

    例:bridge_mqtt リソース作成時に必須フィールド clientid が欠落すると例外が発生し、APIプロセスがクラッシュ。複数リクエスト時にルールエンジンが再起動制限に達しHTTP 500を返していました。現在は明確なHTTP 400エラーを返し、APIプロセスは影響を受けません。

  • 監査ログのHTTP APIパスバインディングがURLデコードされず記録される問題を修正しました。

    これまでは監査ログのAPI呼び出しバインディングがURLエンコードされたままで、リスト形式の値が正しく保存されないことがありました。現在はデコード・正規化されたパスバインディングを記録します。

  • ホットコンフィグインポートで無効な設定が適用される問題を修正しました。

    これまではAPI経由の無効なホットコンフィグが直接適用されていました。現在はインポート前に検証し、無効値はエラーを返します。

  • バックアップインポート後に loaded_modules レコードが更新されない問題を修正しました。

    これまではモジュール設定を含むバックアップインポート後に data/loaded_modules が更新されず、再起動後にインポート状態と不整合が生じていました。現在はバックアップインポート後にレコードを更新します。

  • Prometheusに報告されるCPU使用率メトリクスの不正確さを修正しました。

    cpu_sup:util は最初の呼び出し時に信頼性が低く、Prometheusが取得する cpu_use と cpu_idle が不正確でした。現在は長寿命の emqx_os_mon プロセス経由で収集し、正確な値を報告します。

  • クラスター間で転送されるMQTTメッセージが順序通りに配信されない問題を修正しました。

    同一クライアントが同一トピックに連続パブリッシュしたメッセージが、異なるノードのパブリッシャーとサブスクライバー間で順序が乱れることがありました。クロスノード転送は gen_rpc:cast を使用しており、受信側で並列ワーカーがランダムに処理していたためです。現在は gen_rpc:ordered_cast に変更し、同一接続のキャストを到着順に処理し、クライアント単位のメッセージ順序を復元します。

  • emqx_ctl listeners restart http:dashboard(および https:dashboard)が undef エラーで失敗する問題を修正しました。

    ダッシュボードリスナーの start_listener/1 と stop_listener/1 関数がエクスポートされていなかったため、再起動コマンドが失敗し、リスナー停止後にポート(例:18083)が利用不可のままでした。現在は両関数をエクスポートし、コマンドが正常に動作します。

  • os_mon.memsup_system_only が実際には有効になっておらず、多数接続時にシステムメモリ使用量取得が遅い問題を修正しました。

    以前の修正(e4.4.34)では os_mon.memsup_system_only = true を emqx.os_mon 環境に設定していましたが、memsup は起動時に os_mon アプリケーション環境を参照するため効果がありませんでした。結果として全プロセスを走査し続け、/nodes と /emqx_prometheus の応答が遅延していました。

    今回は os_mon.memsup_system_only を直接 os_mon アプリケーション環境にマッピング(デフォルト true)し、memsup がシステムメモリのみを取得するモードで起動します。

e4.4.37 ​

リリース日: 2026-07-31

バグ修正 ​

  • データバックアップエクスポートにダッシュボードMFA設定、APIキー権限、SCRAM認証情報が含まれない問題を修正しました。

e4.4.36 ​

リリース日: 2026-05-22

強化点 ​

  • ノードごとのライセンス情報をPrometheusメトリクスで公開しました。

    新たに3つのメトリクスを追加:emqx_license_max_sessions、emqx_license_expiry_at、emqx_license_issued_at。タイムスタンプはUnixエポック秒(UTC)です。ライセンスが利用不可の場合はすべて 0 を返します。

  • RabbitMQルールアクションはRabbitMQのデフォルト(名前なし)エクスチェンジをサポートしました。

    exchange パラメータは必須でなくなり、空文字列 "" がデフォルトです。空の場合、ルールアクションはデフォルトのダイレクトエクスチェンジ経由でメッセージをパブリッシュし、routing_key と同名のキューにルーティングされます。このモードではブリッジは exchange.declare/exchange.delete を実行しません。詳細は RabbitMQ: Default Exchange を参照してください。

  • Erlang VMスケジューラロードコンパクションをデフォルトで無効化しました。

    vm.args に +scl false を設定し、スケジューラの安定性向上と負荷遷移時のメッセージレイテンシ低減を図りました。

    ただし、CPUトポロジによっては低負荷時にCPU使用率が上昇する場合があります。複数NUMAノードや論理CPUコア数が多い環境で顕著です。必要に応じて +scl true で再有効化したり、スケジューラ数削減、CPUハイパースレッディング無効化、単一NUMAノードのCPUコアバインドで緩和可能です。

  • MQTT接続ヒープメモリ制限の更新時パフォーマンスを最適化しました。

    ClientIDのログトレース有効化後、EMQXは該当MQTT接続プロセスのヒープメモリ制限を調整し、過剰ログによるプロセス終了を防止します。今回の最適化では設定更新時に多数のMQTT接続プロセスでGCが発生する性能低下を避けるため、persistent_term ではなくETSを使用してヒープ制限設定を管理します。

  • Erlang分散通信ポートバッファ関連の設定を追加し、デフォルト値を増加させてクラスター安定性を向上しました。

    以前のデフォルトバッファサイズは1460バイトでしたが、本リリースでは1MBに増加し、高レイテンシ・大容量メッセージに対応しRPCレイテンシを大幅に低減します。設定例:

    hocon
    node.dist_connect_options.nodelay = false
    node.dist_connect_options.sndbuf = 1MB
    node.dist_connect_options.recbuf = 1MB
    node.dist_connect_options.buffer = 1MB
    node.dist_listen_options.nodelay = false
    node.dist_listen_options.sndbuf = 1MB
    node.dist_listen_options.recbuf = 1MB
    node.dist_listen_options.buffer = 1MB
  • ホットアップグレードスクリプトのデフォルトタイムアウトを5分から25分に延長しました。

    ホットアップグレードは旧バージョンのスクリプトを使用するため、新デフォルトは本バージョンから新バージョンへのアップグレード時にのみ有効です。

  • ノード退避・リバランス機能およびクラスター分散ロック(ekka_locker)のマルチノード呼び出しで rpc を erpc に置換し、高負荷時の性能と安定性を向上しました。

  • Erlang/OTPを24.3.4.17-2にアップグレードしました。

    Erlang/OTPの修正はホットアップグレードでは反映されず、EMQX再起動後に有効となります。

バグ修正 ​

  • 不安定なネットワーク環境下でのEMQXクラスターのセルフヒーリング失敗を修正しました。

  • Redis Sentinel接続でRedisデータノードとSentinelノードの認証設定を分離可能にしました。

  • 一部HTTP APIでRPC自己呼び出し問題を修正しました。

    例:ダッシュボードAPI nodes/:node/monitor/metrics がRPC再帰ループに入り大量の gen_rpc プロセスをリーク。クラスター構成でノード名のIP部分がループバックアドレス(例:emqx@127.0.0.1)に誤設定されている場合に発生。

    影響範囲は emqx_management、ダッシュボード、ホットコンフィグ、トピックメトリクス、クライアントタグモジュールのクロスノードRPCを使用する多くのHTTP APIです。

    ローリングアップグレード中は旧バージョンノードが存在するため、これらAPIは不正確な結果を返すか失敗する可能性があります。

  • 長いプロセスメッセージボックスの警告ログにおけるメールボックス長の不正確なログを修正しました。

  • emqx_broker_helper と username_quota プロセスが過剰に長いプロセスメッセージボックスから回復できないリスクを修正しました。

  • RocketMQリソースが旧バージョンコードモジュールを解放できない問題を修正しました。

    ホットアップグレード完了後もRocketMQリソースプロセスが旧コードのアンロードを妨げ、旧コード使用中のプロセスを繰り返しスキャンし不要な性能オーバーヘッドを発生させていました。RocketMQリソースはホットアップグレード時に再起動されるため、少数のメッセージが失われる可能性があります。

  • RocketMQプロデューサーのメモリリーク問題を修正しました。

  • APIキー権限制御導入後、management.default_application と management.bootstrap_apps_file のAppIDが互換モード(権限レコードなし)として扱われる問題を修正しました。

    これまではこれらのAppIDが権限レコードを持たず互換モード扱いで、APIリクエストごとに警告ログが繰り返されていました。現在は完全権限AppIDとして扱い、権限レコードなしの互換モードAppIDのログレベルは warning から info に下げられています。

  • SAML SSOログイン失敗時にEMQX内部エラー詳細がレスポンスボディに漏洩する問題を修正しました。

    これまではSAML認証成功後にEMQX側のアカウントプロビジョニングやセッション設定が失敗すると、内部エラー詳細がブラウザに直接返されていました。現在は一般的なエラーメッセージを返し、詳細はサーバーログにのみ記録されます。

  • MQTTメッセージのノード間転送が非常に高頻度の場合に gen_rpc が多数のワーカープロセスを生成し、システムプロセス数制限を超える問題を修正しました。

e4.4.35 ​

リリース日: 2026-04-03

バグ修正 ​

  • ネットワーク分断後のEMQX再起動でルーティングテーブル不整合が発生する問題を修正しました。

    この問題は ekka-0.8.1.17 へのアップグレードで解決されます。

e4.4.34 ​

リリース日: 2026-03-25

強化点 ​

  • 管理HTTP APIのAPIキー権限制御を追加しました。

    APIキーはカテゴリ別の書き込み権限(banned、rule_engine、resources、plugins、modules)を設定可能になり、GET リクエストは互換性のため読み取り可能です。

  • ダッシュボードにMFA認証とセッション管理を追加しました。

    MFAセットアップ/チャレンジフロー、MFA状態管理API、JWTベアラーセッション、ユーザーログアウトをサポートします。

  • ダッシュボードにSAML 2.0 SSOモジュールを追加しました。

    IDPメタデータ統合、ACSコールバック処理、SPメタデータエクスポート、SP署名済みAuthnRequestのオプション、SSOユーザー向けの force_mfa 設定をサポートします。

  • HTTP APIの可観測性メトリクスを追加しました。

    HTTP APIの成功/失敗カウンターとリクエスト時間ヒストグラムを記録し、Prometheusにエクスポート、/api/v4/http_api_metrics で直接カウンター参照可能です。

  • Helm Chartの起動挙動を改善しました。

    デフォルトの podManagementPolicy を OrderedReady に変更し、k8s/dns 発見モード用にDNS待機のinitコンテナを追加し、クラスター起動の安定性を向上しました。

  • ehttpc のヘッドオブラインブロッキング処理を改善しました。

    ブロッキング検知時に自動的に切断・再接続し、少数の長時間リクエストが接続全体をブロックするのを防止します。

    影響範囲はHTTP ACL・認証、Webhookリソース、IoTDBリソース、SAP Event Meshリソース、GCP PubSubリソースなどです。

バグ修正 ​

  • ホットアップグレードおよびローリングアップグレード時のトレースモジュールテーブル処理を修正し、トレーステーブルのコピー不整合と起動問題を回避しました。

  • Pulsarブリッジの単一メッセージ解析問題を修正し、pulsar-client-erl を0.7.3にアップグレードしました。

  • HTTP APIでACLファイルを空に更新できない問題を修正しました。

  • emqx_vm_mon のリソース使用を最適化し、高接続時のメモリオーバーヘッドを削減しました。

  • システムメモリ使用量取得によるHTTP API応答遅延問題を修正しました。

    多数接続時、memsup が全Erlangプロセスを走査して最大メモリ使用プロセスを探すため遅延していました。現在は os_mon.memsup_system_only = true を設定し、システムメモリのみ取得します。影響を受けるエンドポイントは /nodes と /emqx_prometheus です。

  • eredis_cluster を0.7.8にアップグレードし、Redis Clusterの再接続バックオフ挙動を改善しました。

  • wolff を1.5.20にアップグレードし、Kafkaクライアントの安定性を向上しました。

  • クラスター参加時のライセンス読み込み挙動を修正し、クラスタライセンスを優先し無効・期限切れライセンスの使用を防止しました。

e4.4.33 ​

リリース日: 2025-11-26

強化点 ​

  • タグベースのレート制限を追加しました。

    HTTP認証サービスが返すタグを利用し、クライアントをカテゴリ分けしてカテゴリごとにレート制限を適用可能です。

  • ACLキャッシュ機能のメモリ消費を削減しました。

    MQTTメッセージペイロードが大きい場合、ACLキャッシュはMQTTセッション数に比例して多くのメモリを消費していました。

  • ユーザー名クォーターモジュールは指定ユーザー名の全クライアント接続キックをサポートしました。

  • ユーザー名クォーターモジュールの「Usage」ページのユーザー体験を改善しました。

    これまではセッション数順に自動ソートしていましたが、多数ユーザー時に長いページロード時間が発生していました。現在はソートボタンを追加し、ボタンクリック時のみソートを実行します。

  • クラスターのノード変更時にユーザー名クォーターモジュールのシステムリソース消費を削減しました。

    モジュールが他ノードのオフラインを検知した際の不要なデータ同期を減らし、システムリソース使用量を低減します。

バグ修正 ​

  • MySQLおよびPostgreSQLアクションでSQLの複数行INSERT構文が使えない問題を修正しました。ログに以下のエラーが出力されていました:

    ... Not an INSERT statement or incorrect SQL syntax
  • ローリングアップグレード時にLwM2Mモジュールが起動失敗する問題を修正しました。ログに以下のエラーが出力されていました:

    [error] init_module_failure, module: emqx_module_proto_lwm2m, reason: {badkey,<<"coap_max_block_size">>}, ...
  • バイナリパッケージでインストールしたEMQX環境のLwM2MモジュールのデフォルトXMLパスエラーを修正しました。

  • KafkaプロデューサーのキャッシュメッセージがKafkaサービス復旧後に送信されない問題を修正しました。ログに以下の警告が出ていました:

    [warning] your-kafka-topic replayq_overflow_dropped_number_of_requests 2444
  • ログトレース機能が emqx_trace リモートテーブルの消失によりアップグレード後に利用不能になる問題を修正しました。

    特定のアップグレードシナリオで、新旧バージョン混在クラスターに新バージョンノードを追加し旧ノードを削除する際、旧ノード停止前にログトレースが有効だと新ノードのログトレースモジュールが emqx_trace テーブルにアクセスできず失敗しました。これにより emqx ctl cluster force-leave <node> コマンドも失敗しました。

    修正によりログトレースモジュールは起動時に自動的に emqx_trace テーブルを復元し、モジュール初期化後は force-leave コマンドも正常動作します。

  • 不正確なレート制限を修正しました。

    トークンバケットアルゴリズムの実装を修正し、設定値より実際の最大レートが常にやや高くなる問題を解消しました。

e4.4.32 ​

リリース日: 2025-07-30

強化点 ​

  • HTTP AUTH/ACLモジュールのHTTPヘッダーにプレースホルダー対応を追加しました。

    HTTPリクエストヘッダーの値に %u、%c などのプレースホルダーを使用し、クライアント情報を動的に挿入可能です。

  • Erlang VMのデフォルトパラメータを最適化しました。

    • +sbwt none +sbwtdcpu none +sbwtdio none:スケジューラのビジーウェイトを無効化しCPU消費を削減。
    • +sbt db:スケジューラスレッドをCPUコアへのデフォルトバインド戦略に設定。
    • +zdbbl 32768:分散チャネルのバッファサイズを増加。
  • 定期的なグローバルGCをデフォルトで無効化しました。

    node.global_gc_interval のデフォルト値を Disabled に設定しました。

バグ修正 ​

  • Kafkaリソースでの "SCRAM_SHA_256" 認証失敗問題を修正しました。

e4.4.31 ​

リリース日: 2025-07-15

強化点 ​

  • ユーザー名クォーターモジュールのパフォーマンスを改善しました。

    マルチノードクラスターで有効時、ノード間でユーザー名とクライアントIDの状態同期が頻繁に発生しCPU負荷が高かったため、バッチ同期を導入しCPU使用率を低減しました。

  • 「ユーザー名更新間隔」設定を追加しました。

    極端な条件下でノード間のユーザー名クォーターテーブル不整合を防ぐため、他ノードからユーザー名状態を定期取得しローカルテーブルを更新します。デフォルトは15分、最小設定値は30秒です。

  • 再パブリッシュアクションに「未定義プロパティ送信」オプションを追加しました。

    未定義のMQTTプロパティやユーザープロパティを再パブリッシュメッセージに含めるか制御します。有効時は値を "undefined" 文字列で追加し、無効時は省略します。

  • 高レイテンシネットワーク条件下でのHTTP API安定性を改善しました。

    RPC依存部分を gen_rpc にリファクタリングし、Erlang分散RPCチャネルの競合を回避しブロックリスクを低減しました。

  • 組み込み認証データベース(auth_mnesia)のクエリ性能を最適化しました。

    レコード数増加による性能劣化と高頻度・並列ログイン時のCPU高負荷を解消し、認証効率とシステム安定性を向上しました。

バグ修正 ​

  • クラスター修復後のルーティングテーブルやクライアントグローバルレジストリ不整合を修正しました。

    ネットワーク分断でクラスターが重複サブグループに分割された場合、少数派パーティションの再起動だけでは整合性が完全に回復せず、他ノードへのメッセージルーティング失敗やHTTP APIによるクライアントキック失敗が発生していました。少数派パーティションと重複グループの全ノードを再起動するようロジックを調整し、整合性を回復します。

  • HTTP API呼び出し中の例外によるETSメモリリークを修正しました。

  • ダッシュボードからゲートウェイモジュールにリスナーを追加できない問題を修正しました。

    プロトコルゲートウェイモジュール作成後、モジュール更新画面でリスナー追加が反映されませんでした。対象プロトコルはCoAP、GB/T 32960、JT/T 808、LwM2M、MQTT-SN、STOMP、TCPです。

e4.4.30 ​

リリース日: 2025-06-20

強化点 ​

  • グローバルガベージコレクションをよりスムーズにしました。

    EMQXは全プロセスに対して周期的にGCを実行し、node.global_gc_interval(デフォルト15分)で間隔を制御します。これは極端な条件下でErlang VMのデフォルトGCがオフヒープバイナリメモリを適時回収できない問題を防ぎますが、CPU使用率の周期的なスパイクを引き起こすことがあります。

    新しいグローバルGC機構は各サイクルでバッチ単位でGCを実行し、CPU使用率の変動を低減します。この最適化は node.global_gc_interval が1分以上に設定されている場合にのみ有効です。

バグ修正 ​

  • 古いバージョンから4.4.28または4.4.29へのホットアップグレード時に一部接続が切断される問題を修正しました。

    切断クライアント数は当該ノードのメッセージレートに正比例します。

e4.4.29 ​

リリース日: 2025-03-07

強化点 ​

  • ライセンスチェック性能を最適化しました。

    クライアント接続時のライセンス接続数チェックにおけるノード間RPC呼び出しを最小化し、性能オーバーヘッドを低減しました。

  • 大量クライアント再接続時の接続管理を改善し、ライセンス制限による接続拒否を防止しました。

    現接続数がライセンス上限を超えていても、既に確立済みのClientIDを持つクライアントの再接続を許可します。

  • Wolffを強化し、Kafkaトピックのパーティション数を減らす再構築をサポートしました。

    Kafkaはパーティション数の直接削減を許さないため、通常は新規トピック作成とデータ移行、またはデータ損失許容時に旧トピック削除+同名新規作成が必要です。従来はWolffがこれらを正しく扱えず、一部プロデューサーの再接続失敗を招いていました。

  • すべてのリスナーで acceptors と max_connections のデフォルト値を統一しました。

    acceptors は全リスナーで16、max_connections は1,024,000に統一されました。

  • トレースモジュールの設定オプションを拡張しました。

    • 行最大サイズ:ログファイル1行あたりの最大文字数(デフォルト2048)
    • ファイル最大サイズ:ログファイルの最大サイズ(デフォルト1GB)
    • クライアントプロセス最大ヒープサイズ:デフォルト512MB。ログトレース有効時にデフォルト64MB(64bit環境)ではクライアント接続プロセスが終了される問題を防止。
  • クライアントプロセス終了時に警告ログを追加しました。

    これまではメモリ制限による終了時にErlang/OTPのエラーメッセージのみで、対象クライアントが特定しづらい状態でした。現在は以下のような警告ログを追加し、影響クライアントを特定しやすくしました。

    [warning] [CM] Clean down, clientid: abcd_bench_pub_1, pid: <0.3540.0>, reason: killed

バグ修正 ​

  • コンテナ展開時にホットコンフィグ機能で acceptors と max_connections 設定が更新できない問題を修正しました。

  • Redisマスター/スレーブ切替後にRedis再接続に失敗する問題を修正しました。

    ネットワーク障害により新マスターへの接続ができない場合、eredis_cluster が異常状態に入りRedisへの再接続が適切に行われませんでした。

  • ダッシュボードからログトレースファイルをダウンロード時に応答不能になる問題を修正しました。

  • Pulsarドライバーのパケット解析問題を修正しました。

e4.4.28 ​

リリース日: 2025-01-23

強化点 ​

  • EMQXクラスターのセルフヒーリング機能を強化しました。

    これまで単純なスプリットブレインのみを自己修復可能でしたが、以下のような複雑なケースには対応していませんでした:

    • 1ノードが他ノード全てと連絡可能な場合、そのノードを基準に他ノードを再起動してクラスターを復元。
    • スプリットブレインが2つのサブクラスターに分かれた場合、ノード数が少ないサブクラスターを再起動して復元。

    今回の改善により、複数の複雑かつ非対称なクラスターに分割されても自己修復可能になりました。

  • EMQXのワイルドカードサブスクリプションおよび解除処理のパフォーマンスを最適化しました。

    プレフィックスツリーをノード間でレプリケートする mnesia テーブルから ETS テーブルに変更し、ノード間の同期時間を削減しました。サブスクリプション処理は非同期化され、以下の流れとなります:

    1. ローカルでプレフィックスツリーとルーティングレコードを更新しSUBACKを返却。
    2. ルーティング情報を非同期で他ノードに更新し、各ノードが自身のプレフィックスツリーを更新。

    これにより多数ノードや高レイテンシ環境でのサブスクリプション処理性能が大幅に向上します。

    ただし旧バージョンノードが混在する場合、旧ノードで追加されたワイルドカードサブスクリプションは新ノードで正しく確立されますが、その逆は保証されません。ローリングアップグレード完了後に全ノードが更新されると問題は解消されます。ノードアップグレード後はルーティングテーブル経由でプレフィックスツリーが再構築され、ルーティング情報の損失はありません。

  • ルールエンジンのマッチング性能を最適化しました。

    トピックプレフィックスツリーのキャッシュ化と過剰なトピックスプリット処理の削減により、多数ルールのシナリオで性能向上が顕著です。

  • Kafkaアクションに「バッファ最大待機時間」オプションを追加しました。

    プロデューサーが各パーティションのメッセージをバッファにバッチ書き込みする際の最大待機時間を制御します。デフォルトは0ms(待機なし)。メモリバッファリングモード以外では5ms以上の設定を推奨し、IOPSを削減します。

  • アラーム処理を非同期モードに変更しました。

    これまでアラームは同期処理で、多数の conn_congestion アラームがMQTT接続プロセスに影響を与えていました。現在は非同期処理とし、過負荷時は1分間のサイレント期間に入りアラームを破棄します。

  • プロセスメッセージキュー長の監視・アラーム機能を追加しました。

    新設定 vm_mon.process_long_msgq(デフォルト80)でキュー長閾値を設定し、vm_mon.process_alarm_top_n(デフォルト5)でアラーム時に情報を含める上位Nプロセス数を指定します。

  • CONNECTパケット解析失敗時のログ出力を最適化しました。

    CONNECT可変ヘッダー解析失敗でMQTT接続が切断される場合、esockd はエラーをログに出さず、切断理由を malformed_connect_variable_header とマークします。

  • ログを「常に非同期」モードに変更しました。

    これまで log.sync_mode_qlen は100で、ログキュー長が超過すると同期モードに切り替わっていましたが、3000に変更し、log.drop_mode_qlen と整合させて常に非同期モードで動作し、キュー長3000超でログ破棄を開始します。

  • スローサブスクリプションのパフォーマンスを最適化しました。

    ets:info(emqx_slow_subs_topk, size) 呼び出しを回避し、オーバーヘッドを軽減しました。

  • ホットコンフィグによるリスナー更新時間を短縮しました。

    これまでノードごとに逐次リスナー更新・再起動していましたが、erpc:multicall/4 を用いて並列化し時間を短縮しました。

  • 遅延開始する ecpool_worker による ecpool_sup ブロックを回避しました。

バグ修正 ​

  • 永続セッションのユーザー名がユーザークォーターページから消える問題を修正しました。

    再接続後に永続セッションのMQTTクライアントのユーザー名が消失していました。

  • ログスロットリングによるパフォーマンス劣化問題を修正しました。

    ログスロットリング機能の問題で、ログトレース有効時にEMQXのリソース消費が大幅に増加していました。

4.4.27 ​

リリース日: 2024-11-28

強化点 ​

  • MQTTブリッジアクションに「メッセージ配信タイムアウト」と「最大メッセージ再試行回数」パラメータを追加しました。これによりPUBACK未応答によるMQTTブリッジの詰まりを防止します。

    • Message Delivery Timeout:デフォルト30秒。QoS1またはQoS2メッセージの配信にこの時間を超えるとメッセージは破棄されます。
    • Max Message Retry Count:デフォルト3。ACKが再送間隔内に受信されない場合に再送されますが、再送回数はこの値を超えません。
  • ホットコンフィグモジュールのリスナー再起動ロジックを最適化しました。

    ユーザーがホットコンフィグモジュールを開始/再起動しても、mnesia テーブルのリスナー設定が更新されていてもリスナーは再起動されません。代わりに以下ログを出力し、ユーザーに手動再起動を促します:

    [EMQX_HOT_CONF] There is a difference between the listener conf in the hot conf module and the one currently in use at runtime. Please restart the listener at an appropriate time to ensure the configuration is correctly applied. listener: mqtt:tcp:external, conf_in_use: #{...}, hot_conf: #{...}
  • ダッシュボードのノード情報ページに「Waiting to join」ステータスを表示しなくなりました。

    ノードステータスは「Running」か「Stopped」の2種のみになります。

  • Amazon Linux 2023のインストールパッケージをサポートしました。

  • MySQLおよびPostgreSQLアクションのバッチモードで ON DUPLICATE KEY UPDATE または ON CONFLICT DO NOTHING 文をサポートしました。

    主キー重複時に重複挿入を回避可能です。ただし、これら文の後にプレースホルダーは使用できません。

  • ecpool のパフォーマンスを最適化しました。

  • ダッシュボードのホットコンフィグページで allow_anonymous に false_quick_deny を設定可能になりました。

    これにより匿名クライアント(ユーザー名なし)を迅速に拒否し、認証バックエンドチェックをスキップします。

バグ修正 ​

  • サーバー停電後にKafkaアクションがキャッシュファイル破損で失敗する問題を修正しました。

    破損ファイル検出時はKafkaプロデューサーが回復不能なメッセージを破棄します。

  • ホットアップグレード後にMQTTメッセージがノード間で同期されない問題を修正しました。

    旧バージョンから4.4.12〜4.4.22間の任意のバージョンへのアップグレードで発生。ログに gen_rpc_auth モジュールの未定義エラーが出力されていました。

  • ユーザー名クォーターモジュール未有効時にHTTP APIでユーザー情報取得すると500エラーになる問題を修正しました。

  • 古いバージョンのバックアップファイルからインポート時に emqx_mod_acl_internal フックが重複マウントされる問題を修正しました。

  • クラスター参加中にHTTP APIでアラーム一覧取得時に一時的に500エラーが発生する問題を修正しました。

4.4.26 ​

リリース日: 2024-09-26

バグ修正 ​

  • 旧バージョンクラスターにノードが参加できない問題を修正しました。

    4.4.25でユーザー名クォーターテーブルが存在しないことが原因でした。

  • ユーザー名クォーターインターフェースで特殊文字を含むユーザー名が検索できない問題を修正しました。

    APIインターフェースでURLデコードが行われていませんでした。

  • ユーザー名クォーターインターフェースに一部ユーザー名が表示されない問題を修正しました。

    これはユーザークォーターモジュール有効化前にEMQXに存在したセッションが原因で不完全なユーザーリストが生成されていました。

4.4.25 ​

リリース日: 2024-09-13

強化点 ​

  • MQTTユーザー名のセッション数制限モジュールを導入しました。

    ダッシュボードの モジュール → ユーザー名クォータ で設定可能です。設定タブでユーザー名ホワイトリストを追加でき、ホワイトリスト内のユーザーは制限対象外となります。

    MQTTブリッジングにはホワイトリストの利用が必須です。

  • MQTT 3.1.1プロトコルのCONNECTメッセージで不正なWill QoS値を持つ場合のエラーログを改善しました。

  • Redisへのメッセージ送信性能を強化しました。

    gen_tcp:send/2 の制限により、Redisクライアントプロセスの送信キューが増大すると送信性能が低下し、Redisクライアントがボトルネックになる問題を改善しました。Redis認証機能の大量デバイス再接続時の負荷も軽減します。

  • SysKeeperへのメッセージ送信性能を強化しました。

    gen_tcp:send/2 の制限により、emqx_bridge_sysk_forward プロセスの送信キュー増大で性能低下が発生していた問題を改善しました。

  • ログトレースの単一ファイルサイズ上限を512MBから1GBに増加しました。

  • 内蔵DB AUTH/ACLモジュールのACL機能を改善しました。

    • クライアントごとのACLエントリ数制限を設定可能にしました。ACL検証時にクライアントのACLエントリを全走査するため、多数のACLがパフォーマンス低下を招いていました。auth.mnesia.max_acls_for_each_login 設定またはモジュールの「Max ACLs」パラメータで制限可能です。
    • ACLテーブルの格納構造とトピックマッチングロジックを最適化し、検索・マッチング性能を向上しました。クライアントのACL数が多いほど効果が大きいです。
    • ACLの追加・削除時にACLキャッシュをリセットするようにしました。
  • ルールエンジンのバッチ送信処理に過負荷保護を追加しました。

    バッチ送信有効時、アクション用に複数プロセスを作成しメッセージをバッファ・バッチ送信します。非同期送信モードで外部DB応答が遅いとメッセージがバッチプロセスのメッセージキューに溜まり、メモリ制限超過リスクがありました。キューサイズが "最大バッチサイズ" * 10(1000未満は1000)を超えるとアクションを一定期間(デフォルト60秒)「アンロード」し、その間のメッセージは破棄、action_olp_blocked/<RuleID>/<ActionID> アラームを発生します。

    過負荷保護対象アクション:

    • Cassandra、ClickHouse、DolphinDB、InfluxDB、IoTDB、Lindorm、MySQL、Oracle Database、PostgreSQL、SQLServer、Tablestore、TDengine、GCP Pubsubへのデータ送信
  • 未定義値をデータベースに NULL として挿入するオプションを追加しました。

    ルールエンジンの各種DBアクションで ${var} プレースホルダーを使った挿入時、未定義変数が文字列 undefined として挿入されていました。新オプション「未定義値をNULLとして挿入」で未定義時に NULL を挿入可能です。

    対応アクション:

    • Cassandra、ClickHouse、DolphinDB、MySQL、Oracle Database、PostgreSQL、SQLServer、TDengine
  • ログスロットリングをサポートしました。

    異常時に類似ログが大量発生しシステム負荷増大や有用ログ埋没を防止するため、etc/logger.conf の log.throttling 設定で時間窓と最大ログレートを指定可能です。

    効率向上のためCPUコア数分のスロットラーを起動し、例えば log.throttling = 50,60s なら各スロットラーは60秒間に最大50回まで同一ログ(モジュール名+行番号で判定)を許可します。8コアなら最大400回/分程度のログ出力が可能です。ログが破棄されると以下のようなログを出力します:

    log throttled during last 60s, dropped_msg: #{{emqx_channel,1400} => #{msg => "Client ~s (Username: '~s') login failed for ~0p", count => 33}}

    これは過去60秒間に emqx_channel モジュール1400行目のログ33件が破棄されたことを示します。

    デフォルトで警告以上のログレベルに対し有効化され、設定は 50,60s です。

  • HTTP/HTTPS管理インターフェースのタイムアウト設定を追加しました。

    etc/plugins/emqx_management.conf に以下設定を追加:

    • management.listener.<Proto>.request_timeout:TCP接続確立後、HTTPリクエスト受信なしで切断するまでの時間(デフォルト5秒)
    • management.listener.<Proto>.idle_timeout:HTTPリクエスト受信後、次のリクエストが一定時間来なければ切断するアイドルタイムアウト(デフォルト60秒)

    <Proto> は http または https。

  • 「再パブリッシュ」アクションのターゲットトピック検証を追加しました。

    UTF-8未エンコードのバイナリトピックの場合、アクションは失敗します。

  • Redis-Clusterドライバーの性能を最適化しました。

    Redis Clusterアクセス時のEMQXメモリ使用量を削減し、以下機能が恩恵を受けます:

    • Redis認証/ACL
    • Redisプラグイン
    • ルールエンジンのRedisアクション

バグ修正 ​

  • Kafkaサーバーの最大メッセージサイズ制限を超えるメッセージ送信でKafkaプロデューサーが詰まる問題を修正しました。

    これまではサーバー設定 message.max.bytes を超える単一メッセージ送信時に、ルールエンジンのKafkaプロデューサー送信キューが詰まり、以降のメッセージが最大キャッシュバイト数までバッファリングされていました。現在はルールエンジンのKafkaリソース設定 Max Batch Bytes を超える単一メッセージは破棄し、キュー詰まりを防止します。

  • 特定状況で「リソースダウン」アラームがクリアできない問題を修正しました。

  • Willメッセージトリガールールの timestamp フィールド値がクライアント接続時間ではなくルールトリガー時間になるよう修正しました。

  • Kafkaアクションで username を Message Key に設定した場合の送信失敗を修正しました。

    クライアントがユーザー名なしでログインした場合、Kafkaプロデューサーは undefined 文字列をMessage Keyとして使用します。

  • プロセス異常終了時に $events/client_disconnected イベントがトリガーされない問題を修正しました。

  • DynamoDBアクションで clientid を Hash Key に設定した場合の送信失敗を修正しました。

  • ノード再起動後に共有サブスクリプションのスティッキー戦略がランダムに退化する問題を修正しました。

4.4.24 ​

リリース日: 2024-04-16

強化点 ​

  • /load_rebalance/availability_check を認証不要のパブリックAPIにしました。ロードバランサー設定を簡素化し、ブローカー過負荷を防ぐために可能な限り軽量化しています。

  • 再バランス/退避の待機ヘルスチェックフェーズをよりグレースフルにしました。

    退避対象ノードへの接続はこのフェーズ中は禁止しません。ロードバランサーがこれらノードを不健康と判断しているか不明なため、禁止すると再接続試行が繰り返される可能性があります。

  • HTTP APIのアイドルタイムアウトが短すぎる問題を改善しました。

    これまでHTTP APIの idle_timeout は5秒でしたが、リクエストが5秒間途絶えるとTCP接続が切断されていました。現在は60秒に延長しました。

  • 一部設定項目の説明を改善しました。

    • Webhookリソース・アクションの Base URL と Path パラメータ説明を改善。
    • ホットコンフィグのWS/WSSリスナーの idle_timeout 設定説明を改善。
    • オフラインメッセージ関連アクションの Max Returned Count パラメータ詳細説明を改善。
    • ClickHouseリソースの英語パラメータ Key を Password に名称変更。
    • HStreamDBアクションの PartitionKey を Partition Key に名称変更。
    • Retainerモジュールの Maximum Retained Message Size 詳細説明を 0B から 0 に更新。
    • Retainerモジュールの Message Interception を Intercept Empty Messages に名称変更し説明を改善。
  • 一部設定値の範囲と妥当性チェックを追加しました。

    • mqtt.max_topic_levels、mqtt.max_packet_size、keepalive_backoff は非負値であること。
    • SSLリスナー起動時に verify_peer、fail_if_no_peer_cert、cacertfile の依存関係をチェック。以前はSSLクライアント接続時のみチェックしていました。
    • リスナー設定の acceptors、max_connections、max_conn_rate、active_n は非負値であること。
    • RabbitMQリソースの Heartbeat Interval と Automatic Reconnection Interval は正しい時間長文字列であること。
    • GB/T 32960 と JT/T808 リスナーでポート重複チェックを追加。
    • GB/T 32960 と JT/T808 ゲートウェイ設定の一部パラメータ値検証を追加。
  • ログフォーマットを最適化し、ダッシュボードの表示問題を修正しました。

    • ルールエンジンのレート値が非常に長い浮動小数点数で表示される問題を小数点以下2桁に修正。
    • システムリソース使用率アラートのCPU使用率を小数点以下2桁に修正。
    • ログから mfa などのデバッグフィールドを削除。
  • ルールエンジンでユーザー定義SQL関数をサポートしました。

    例:ユーザー作成プラグインに emqx_rule_funcs1 モジュールの func 関数がある場合、以下のように利用可能です:

    SQL
    SELECT emqx_rule_funcs1.func() FROM "t/#"

    モジュール名は emqx_rule_funcs または EmqxRuleFuncs で始まる必要があります。

  • Kafkaコンシューマグループモジュールが複数認証方式(PLAIN、SCRAM_SHA_256、KERBEROS)をサポートしました。

  • システムリソース消費が多いHTTP APIメソッドに過負荷保護を追加しました。

    対象API:

    • GET /api/v4/clients/* 系API
    • GET /api/v4/routes
    • GET /api/v4/subscriptions
    • GET /api/v4/rules
    • GET /api/v4/banned
    • GET /api/v4/audits
    • 組み込み認証モジュールのユーザー名・クライアントID検索API

バグ修正 ​

  • うるう年の日付入力時にルールエンジンの date_to_unix_ts() SQL関数が誤った値を返す問題を修正しました。

  • ノード退避時に clean_start が false のセッションだけでなく、切断済みセッションも退避するよう修正しました。

    これまではクライアントが clean_start = true かつ非ゼロの Session-Expiry-Interval を設定した場合、セッションが退避されずノード終了後に失われていました。

  • Redis認証で対応する認証情報がRedisに存在しない場合の例外を修正しました。

  • EMQXノード起動時にETSテーブル未初期化によるHTTP APIアクセス時の例外を修正しました。

  • 特定条件下で拡張プラグインがロードできない問題を修正しました。

    plugins.expand_plugins_dir 設定で指定したディレクトリのプラグインが複数回ロードされ、EMQX起動失敗を引き起こしていました。

  • CLIで単一クライアントのACLキャッシュクリアができない問題を修正しました。

    例:emqx ctl acl cache-clean 'mqttx_458d5222' が機能していませんでした。

  • ルール一覧や組み込み認証/認可リストページであいまい検索時にページネーションが表示されずデータが不完全になる問題を修正しました。

  • ログトレースファイルのダウンロード時に「開始待ち」状態でエラーログが大量に出る問題を修正しました。

  • ホットコンフィグ機能初回利用時にSSLリスナーの backlog 設定が空かつ必須表示されフォーム送信失敗する問題を修正しました。

    現在は backlog 設定を任意としデフォルト1024を設定します。

  • emqx.schema 設定ファイルの zone 関連バリデータが無効になる問題を修正しました。

  • 監査ログ検索APIのレスポンスで、HTTPステータスコードが500でも operation_result が success のままになる問題を修正しました。

  • ダッシュボードでGB/T 32960クライアントIDが重複表示される問題を修正しました。