docs(schema): Add descriptions of the records
This commit is contained in:
parent
aecfa77985
commit
fff6bffa0c
|
@ -894,9 +894,9 @@ conn_congestion {
|
||||||
## Whether to alarm the congested connections.
|
## Whether to alarm the congested connections.
|
||||||
##
|
##
|
||||||
## Sometimes the mqtt connection (usually an MQTT subscriber) may
|
## Sometimes the mqtt connection (usually an MQTT subscriber) may
|
||||||
## get "congested" because there're too many packets to sent.
|
## get "congested", because there're too many packets to sent.
|
||||||
## The socket tries to buffer the packets until the buffer is
|
## The socket tries to buffer the packets until the buffer is
|
||||||
## full. If more packets comes after that, the packets will be
|
## full. If more packets come after that, the packets will be
|
||||||
## "pending" in a queue and we consider the connection is
|
## "pending" in a queue and we consider the connection is
|
||||||
## "congested".
|
## "congested".
|
||||||
##
|
##
|
||||||
|
@ -1100,7 +1100,7 @@ sys_topics {
|
||||||
## Default: 30s | disabled
|
## Default: 30s | disabled
|
||||||
sys_heartbeat_interval = 30s
|
sys_heartbeat_interval = 30s
|
||||||
|
|
||||||
## Whether to enable Client lifecycle event messages publish.
|
## Whether to enable Client lifecycle event messages publishing.
|
||||||
## The following options are not only for enabling MQTT client event messages
|
## The following options are not only for enabling MQTT client event messages
|
||||||
## publish but also for Gateway clients. However, these kinds of clients type
|
## publish but also for Gateway clients. However, these kinds of clients type
|
||||||
## are distinguished by the Topic prefix:
|
## are distinguished by the Topic prefix:
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
comma_separated_atoms/0
|
comma_separated_atoms/0
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([namespace/0, roots/0, roots/1, fields/1]).
|
-export([namespace/0, roots/0, roots/1, fields/1, desc/1]).
|
||||||
-export([conf_get/2, conf_get/3, keys/2, filter/1]).
|
-export([conf_get/2, conf_get/3, keys/2, filter/1]).
|
||||||
-export([server_ssl_opts_schema/2, client_ssl_opts_schema/1, ciphers_schema/1, default_ciphers/1]).
|
-export([server_ssl_opts_schema/2, client_ssl_opts_schema/1, ciphers_schema/1, default_ciphers/1]).
|
||||||
-export([sc/2, map/2]).
|
-export([sc/2, map/2]).
|
||||||
|
@ -116,7 +116,7 @@ roots(high) ->
|
||||||
{"listeners",
|
{"listeners",
|
||||||
sc(
|
sc(
|
||||||
ref("listeners"),
|
ref("listeners"),
|
||||||
#{desc => "MQTT listeners identified by their protocol type and assigned names"}
|
#{}
|
||||||
)},
|
)},
|
||||||
{"zones",
|
{"zones",
|
||||||
sc(
|
sc(
|
||||||
|
@ -133,12 +133,7 @@ roots(high) ->
|
||||||
{"mqtt",
|
{"mqtt",
|
||||||
sc(
|
sc(
|
||||||
ref("mqtt"),
|
ref("mqtt"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"Global MQTT configuration.<br>\n"
|
|
||||||
"The configs here work as default values which can be overridden\n"
|
|
||||||
"in <code>zone</code> configs"
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{?EMQX_AUTHENTICATION_CONFIG_ROOT_NAME,
|
{?EMQX_AUTHENTICATION_CONFIG_ROOT_NAME,
|
||||||
authentication(
|
authentication(
|
||||||
|
@ -203,29 +198,17 @@ roots(low) ->
|
||||||
{"force_gc",
|
{"force_gc",
|
||||||
sc(
|
sc(
|
||||||
ref("force_gc"),
|
ref("force_gc"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"Force the MQTT connection process garbage collection after\n"
|
|
||||||
"this number of messages or bytes have passed through."
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{"conn_congestion",
|
{"conn_congestion",
|
||||||
sc(
|
sc(
|
||||||
ref("conn_congestion"),
|
ref("conn_congestion"),
|
||||||
#{
|
#{}
|
||||||
desc => "Congestion alarm settings"
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{"stats",
|
{"stats",
|
||||||
sc(
|
sc(
|
||||||
ref("stats"),
|
ref("stats"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"Enable/disable statistic data collection.\n"
|
|
||||||
"Statistic data such as message receive/send count/rate etc. "
|
|
||||||
"It provides insights of system performance and helps to diagnose issues. "
|
|
||||||
"You can find statistic data from the dashboard, or from the '/stats' API."
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{"sysmon",
|
{"sysmon",
|
||||||
sc(
|
sc(
|
||||||
|
@ -250,10 +233,7 @@ roots(low) ->
|
||||||
{"trace",
|
{"trace",
|
||||||
sc(
|
sc(
|
||||||
ref("trace"),
|
ref("trace"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"Real-time filtering logs for the ClientID or Topic or IP for debugging."
|
|
||||||
}
|
|
||||||
)}
|
)}
|
||||||
].
|
].
|
||||||
|
|
||||||
|
@ -337,13 +317,10 @@ fields("authorization") ->
|
||||||
default => allow,
|
default => allow,
|
||||||
%% TODO: make sources a reference link
|
%% TODO: make sources a reference link
|
||||||
desc =>
|
desc =>
|
||||||
""
|
|
||||||
"\n"
|
|
||||||
"Default access control action if the user or client matches no ACL rules,\n"
|
"Default access control action if the user or client matches no ACL rules,\n"
|
||||||
"or if no such user or client is found by the configurable authorization\n"
|
"or if no such user or client is found by the configurable authorization\n"
|
||||||
"sources such as built_in_database, an HTTP API, or a query against PostgreSQL.\n"
|
"sources such as built_in_database, an HTTP API, or a query against PostgreSQL.\n"
|
||||||
"Find more details in 'authorization.sources' config.\n"
|
"Find more details in 'authorization.sources' config."
|
||||||
""
|
|
||||||
}
|
}
|
||||||
)},
|
)},
|
||||||
{"deny_action",
|
{"deny_action",
|
||||||
|
@ -667,11 +644,7 @@ fields("flapping_detect") ->
|
||||||
#{
|
#{
|
||||||
default => false,
|
default => false,
|
||||||
desc =>
|
desc =>
|
||||||
"Enable flapping connection detection feature.<br/>\n"
|
"Enable flapping connection detection feature."
|
||||||
"This config controls the allowed maximum number of `CONNECT` packets received\n"
|
|
||||||
"from the same clientid in a time frame defined by `window_time`.\n"
|
|
||||||
"After the limit is reached, successive `CONNECT` requests are forbidden\n"
|
|
||||||
"(banned) until the end of the time period defined by `ban_time`."
|
|
||||||
}
|
}
|
||||||
)},
|
)},
|
||||||
{"max_count",
|
{"max_count",
|
||||||
|
@ -858,7 +831,7 @@ fields("mqtt_tcp_listener") ->
|
||||||
{"tcp",
|
{"tcp",
|
||||||
sc(
|
sc(
|
||||||
ref("tcp_opts"),
|
ref("tcp_opts"),
|
||||||
#{desc => "TCP listener options"}
|
#{}
|
||||||
)}
|
)}
|
||||||
] ++ mqtt_listener();
|
] ++ mqtt_listener();
|
||||||
fields("mqtt_ssl_listener") ->
|
fields("mqtt_ssl_listener") ->
|
||||||
|
@ -1268,7 +1241,7 @@ fields("broker") ->
|
||||||
{"perf",
|
{"perf",
|
||||||
sc(
|
sc(
|
||||||
ref("broker_perf"),
|
ref("broker_perf"),
|
||||||
#{desc => "Broker performance tuning parameters"}
|
#{}
|
||||||
)}
|
)}
|
||||||
];
|
];
|
||||||
fields("broker_perf") ->
|
fields("broker_perf") ->
|
||||||
|
@ -1299,17 +1272,7 @@ fields("sys_topics") ->
|
||||||
{"sys_event_messages",
|
{"sys_event_messages",
|
||||||
sc(
|
sc(
|
||||||
ref("event_names"),
|
ref("event_names"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"Whether to enable Client lifecycle event messages publish.<br/>\n"
|
|
||||||
"The following options are not only for enabling MQTT client event messages\n"
|
|
||||||
"publish but also for Gateway clients. However, these kinds of clients type\n"
|
|
||||||
"are distinguished by the Topic prefix:\n"
|
|
||||||
"- For the MQTT client, its event topic format is:<br/>\n"
|
|
||||||
" <code>$SYS/broker/<node>/clients/<clientid>/<event></code><br/>\n"
|
|
||||||
"- For the Gateway client, it is\n"
|
|
||||||
" <code>$SYS/broker/<node>/gateway/<gateway-name>/clients/<clientid>/<event></code>"
|
|
||||||
}
|
|
||||||
)}
|
)}
|
||||||
];
|
];
|
||||||
fields("event_names") ->
|
fields("event_names") ->
|
||||||
|
@ -1352,31 +1315,17 @@ fields("sysmon") ->
|
||||||
{"vm",
|
{"vm",
|
||||||
sc(
|
sc(
|
||||||
ref("sysmon_vm"),
|
ref("sysmon_vm"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"This part of the configuration is responsible for collecting\n"
|
|
||||||
" BEAM VM events, such as long garbage collection, traffic congestion in the inter-broker\n"
|
|
||||||
" communication, etc."
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{"os",
|
{"os",
|
||||||
sc(
|
sc(
|
||||||
ref("sysmon_os"),
|
ref("sysmon_os"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"This part of the configuration is responsible for monitoring\n"
|
|
||||||
" the host OS health, such as free memory, disk space, CPU load, etc."
|
|
||||||
}
|
|
||||||
)},
|
)},
|
||||||
{"top",
|
{"top",
|
||||||
sc(
|
sc(
|
||||||
ref("sysmon_top"),
|
ref("sysmon_top"),
|
||||||
#{
|
#{}
|
||||||
desc =>
|
|
||||||
"This part of the configuration is responsible for monitoring\n"
|
|
||||||
" the Erlang processes in the VM. This information can be sent to an external\n"
|
|
||||||
" PostgreSQL database. This feature is inactive unless the PostgreSQL sink is configured."
|
|
||||||
}
|
|
||||||
)}
|
)}
|
||||||
];
|
];
|
||||||
fields("sysmon_vm") ->
|
fields("sysmon_vm") ->
|
||||||
|
@ -1747,6 +1696,144 @@ base_listener() ->
|
||||||
sc(map("ratelimit's type", emqx_limiter_schema:bucket_name()), #{default => #{}})}
|
sc(map("ratelimit's type", emqx_limiter_schema:bucket_name()), #{default => #{}})}
|
||||||
].
|
].
|
||||||
|
|
||||||
|
desc("persistent_session_store") ->
|
||||||
|
"Settings for message persistence.";
|
||||||
|
desc("stats") ->
|
||||||
|
"Enable/disable statistic data collection.\n"
|
||||||
|
"Statistic data such as message receive/send count/rate etc. "
|
||||||
|
"It provides insights of system performance and helps to diagnose issues. "
|
||||||
|
"You can find statistic data from the dashboard, or from the '/stats' API.";
|
||||||
|
desc("authorization") ->
|
||||||
|
"Settings for client authorization.";
|
||||||
|
desc("mqtt") ->
|
||||||
|
"Global MQTT configuration.<br>\n"
|
||||||
|
"The configs here work as default values which can be overridden\n"
|
||||||
|
"in <code>zone</code> configs";
|
||||||
|
desc("cache") ->
|
||||||
|
"Settings for the authorization cache.";
|
||||||
|
desc("zone") ->
|
||||||
|
"A `Zone` defines a set of configuration items (such as the maximum number of connections)"
|
||||||
|
" that can be shared between multiple listeners.\n\n"
|
||||||
|
"`Listener` can refer to a `Zone` through the configuration item"
|
||||||
|
" <code>listener.<Protocol>.<Listener Name>.zone</code>.\n\n"
|
||||||
|
"The configs defined in the zones will override the global configs with the same key.\n\n"
|
||||||
|
"For example, given the following config:\n"
|
||||||
|
"```\n"
|
||||||
|
"a {\n"
|
||||||
|
" b: 1, c: 1\n"
|
||||||
|
"}\n"
|
||||||
|
"zone.my_zone {\n"
|
||||||
|
" a {\n"
|
||||||
|
" b:2\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"```\n\n"
|
||||||
|
"The global config `a` is overridden by the configs `a` inside the zone `my_zone`.\n\n"
|
||||||
|
"If there is a listener uses the zone `my_zone`, the value of config `a` will be: "
|
||||||
|
"`{b:2, c: 1}`.\n"
|
||||||
|
"Note that although the default value of `a.c` is `0`, the global value is used,"
|
||||||
|
" i.e. configs in the zone have no default values. To override `a.c` one must configure"
|
||||||
|
" it explicitly in the zone.\n\n"
|
||||||
|
"All the global configs that can be overridden in zones are:\n"
|
||||||
|
" - `stats.*`\n"
|
||||||
|
" - `mqtt.*`\n"
|
||||||
|
" - `authorization.*`\n"
|
||||||
|
" - `flapping_detect.*`\n"
|
||||||
|
" - `force_shutdown.*`\n"
|
||||||
|
" - `conn_congestion.*`\n"
|
||||||
|
" - `force_gc.*`\n\n";
|
||||||
|
desc("rate_limit") ->
|
||||||
|
"Rate limit settings.";
|
||||||
|
desc("flapping_detect") ->
|
||||||
|
"This config controls the allowed maximum number of `CONNECT` packets received\n"
|
||||||
|
"from the same clientid in a time frame defined by `window_time`.\n"
|
||||||
|
"After the limit is reached, successive `CONNECT` requests are forbidden\n"
|
||||||
|
"(banned) until the end of the time period defined by `ban_time`.";
|
||||||
|
desc("force_shutdown") ->
|
||||||
|
"When the process message queue length, or the memory bytes\n"
|
||||||
|
"reaches a certain value, the process is forced to close.\n\n"
|
||||||
|
"Note: \"message queue\" here refers to the \"message mailbox\"\n"
|
||||||
|
"of the Erlang process, not the `mqueue` of QoS 1 and QoS 2.";
|
||||||
|
desc("overload_protection") ->
|
||||||
|
"Overload protection mechanism monitors the load of the system and temporarily\n"
|
||||||
|
"disables some features (such as accepting new connections) when the load is high.";
|
||||||
|
desc("conn_congestion") ->
|
||||||
|
"Settings for `conn_congestion` alarm.\n\n"
|
||||||
|
"Sometimes the MQTT connection (usually an MQTT subscriber) may\n"
|
||||||
|
"get \"congested\", because there are too many packets to sent.\n"
|
||||||
|
"The socket tries to buffer the packets until the buffer is\n"
|
||||||
|
"full. If more packets arrive after that, the packets will be\n"
|
||||||
|
"\"pending\" in the queue and we consider the connection\n"
|
||||||
|
"congested.\n\n"
|
||||||
|
"Note: `sndbuf` can be set to larger value if the\n"
|
||||||
|
"alarm is triggered too often.\n"
|
||||||
|
"The name of the alarm is of format `conn_congestion/<ClientID>/<Username>`,\n"
|
||||||
|
"where the `<ClientID>` is the client ID of the congested MQTT connection,\n"
|
||||||
|
"and `<Username>` is the username or `unknown_user`.";
|
||||||
|
desc("force_gc") ->
|
||||||
|
"Force garbage collection in MQTT connection process after\n"
|
||||||
|
" they process certain number of messages or bytes of data.";
|
||||||
|
desc("listeners") ->
|
||||||
|
"MQTT listeners identified by their protocol type and assigned names";
|
||||||
|
desc("mqtt_tcp_listener") ->
|
||||||
|
"Settings for the MQTT over TCP listener.";
|
||||||
|
desc("mqtt_ssl_listener") ->
|
||||||
|
"Settings for the MQTT over SSL listener.";
|
||||||
|
desc("mqtt_ws_listener") ->
|
||||||
|
"Settings for the MQTT over WebSocket listener.";
|
||||||
|
desc("mqtt_wss_listener") ->
|
||||||
|
"Settings for the MQTT over WebSocket/SSL listener.";
|
||||||
|
desc("mqtt_quic_listener") ->
|
||||||
|
"Settings for the MQTT over QUIC listener.";
|
||||||
|
desc("ws_opts") ->
|
||||||
|
"WebSocket listener options.";
|
||||||
|
desc("tcp_opts") ->
|
||||||
|
"TCP listener options.";
|
||||||
|
desc("listener_ssl_opts") ->
|
||||||
|
"Socket options for SSL connections.";
|
||||||
|
desc("listener_wss_opts") ->
|
||||||
|
"Socket options for WebSocket/SSL connections.";
|
||||||
|
desc(ssl_client_opts) ->
|
||||||
|
"Socket options for SSL clients.";
|
||||||
|
desc("deflate_opts") ->
|
||||||
|
"Compression options.";
|
||||||
|
desc("broker") ->
|
||||||
|
"Message broker options.";
|
||||||
|
desc("broker_perf") ->
|
||||||
|
"Broker performance tuning parameters.";
|
||||||
|
desc("sys_topics") ->
|
||||||
|
"The EMQX Broker periodically publishes its own status, message statistics,\n"
|
||||||
|
"client online and offline events to the system topic starting with `$SYS/`.\n\n"
|
||||||
|
"The following options control the behavior of `$SYS` topics.";
|
||||||
|
desc("event_names") ->
|
||||||
|
"Enable or disable client lifecycle event publishing.\n\n"
|
||||||
|
"The following options affect MQTT clients as well as\n"
|
||||||
|
"gateway clients. The types of the clients\n"
|
||||||
|
"are distinguished by the topic prefix:\n\n"
|
||||||
|
"- For the MQTT clients, the format is:\n"
|
||||||
|
"`$SYS/broker/<node>/clients/<clientid>/<event>`\n"
|
||||||
|
"- For the Gateway clients, it is\n"
|
||||||
|
"`$SYS/broker/<node>/gateway/<gateway-name>/clients/<clientid>/<event>`\n";
|
||||||
|
desc("sysmon") ->
|
||||||
|
"Features related to system monitoring and introspection.";
|
||||||
|
desc("sysmon_vm") ->
|
||||||
|
"This part of the configuration is responsible for collecting\n"
|
||||||
|
" BEAM VM events, such as long garbage collection, traffic congestion in the inter-broker\n"
|
||||||
|
" communication, etc.";
|
||||||
|
desc("sysmon_os") ->
|
||||||
|
"This part of the configuration is responsible for monitoring\n"
|
||||||
|
" the host OS health, such as free memory, disk space, CPU load, etc.";
|
||||||
|
desc("sysmon_top") ->
|
||||||
|
"This part of the configuration is responsible for monitoring\n"
|
||||||
|
" the Erlang processes in the VM. This information can be sent to an external\n"
|
||||||
|
" PostgreSQL database. This feature is inactive unless the PostgreSQL sink is configured.";
|
||||||
|
desc("alarm") ->
|
||||||
|
"Settings for the alarms.";
|
||||||
|
desc("trace") ->
|
||||||
|
"Real-time filtering logs for the ClientID or Topic or IP for debugging.";
|
||||||
|
desc(_) ->
|
||||||
|
undefined.
|
||||||
|
|
||||||
%% utils
|
%% utils
|
||||||
-spec conf_get(string() | [string()], hocon:config()) -> term().
|
-spec conf_get(string() | [string()], hocon:config()) -> term().
|
||||||
conf_get(Key, Conf) ->
|
conf_get(Key, Conf) ->
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
file/0,
|
file/0,
|
||||||
cipher/0]).
|
cipher/0]).
|
||||||
|
|
||||||
-export([namespace/0, roots/0, fields/1, translations/0, translation/1, validations/0]).
|
-export([namespace/0, roots/0, fields/1, translations/0, translation/1, validations/0, desc/1]).
|
||||||
-export([conf_get/2, conf_get/3, keys/2, filter/1]).
|
-export([conf_get/2, conf_get/3, keys/2, filter/1]).
|
||||||
|
|
||||||
%% Static apps which merge their configs into the merged emqx.conf
|
%% Static apps which merge their configs into the merged emqx.conf
|
||||||
|
@ -73,34 +73,23 @@ roots() ->
|
||||||
emqx_schema_high_prio_roots() ++
|
emqx_schema_high_prio_roots() ++
|
||||||
[ {"node",
|
[ {"node",
|
||||||
sc(ref("node"),
|
sc(ref("node"),
|
||||||
#{ desc => "Node name, cookie, config & data directories "
|
#{ translate_to => ["emqx"]
|
||||||
"and the Erlang virtual machine (BEAM) boot parameters."
|
|
||||||
, translate_to => ["emqx"]
|
|
||||||
})}
|
})}
|
||||||
, {"cluster",
|
, {"cluster",
|
||||||
sc(ref("cluster"),
|
sc(ref("cluster"),
|
||||||
#{ desc => "EMQX nodes can form a cluster to scale up the total capacity.<br>"
|
#{ translate_to => ["ekka"]
|
||||||
"Here holds the configs to instruct how individual nodes "
|
|
||||||
"can discover each other."
|
|
||||||
, translate_to => ["ekka"]
|
|
||||||
})}
|
})}
|
||||||
, {"log",
|
, {"log",
|
||||||
sc(ref("log"),
|
sc(ref("log"),
|
||||||
#{ desc => "Configure logging backends (to console or to file), "
|
#{ translate_to => ["kernel"]
|
||||||
"and logging level for each logger backend."
|
|
||||||
, translate_to => ["kernel"]
|
|
||||||
})}
|
})}
|
||||||
, {"rpc",
|
, {"rpc",
|
||||||
sc(ref("rpc"),
|
sc(ref("rpc"),
|
||||||
#{ desc => "EMQX uses a library called <code>gen_rpc</code> for "
|
#{ translate_to => ["gen_rpc"]
|
||||||
"inter-broker communication.<br/>Most of the time the default config "
|
|
||||||
"should work, but in case you need to do performance "
|
|
||||||
"fine-turning or experiment a bit, this is where to look."
|
|
||||||
, translate_to => ["gen_rpc"]
|
|
||||||
})}
|
})}
|
||||||
, {"db",
|
, {"db",
|
||||||
sc(ref("db"),
|
sc(ref("db"),
|
||||||
#{ desc => "Settings of the embedded database."
|
#{
|
||||||
})}
|
})}
|
||||||
] ++
|
] ++
|
||||||
emqx_schema:roots(medium) ++
|
emqx_schema:roots(medium) ++
|
||||||
|
@ -148,24 +137,23 @@ fields("cluster") ->
|
||||||
})}
|
})}
|
||||||
, {"static",
|
, {"static",
|
||||||
sc(ref(cluster_static),
|
sc(ref(cluster_static),
|
||||||
#{ desc => "Service discovery via static nodes. The new node joins the cluster by
|
#{
|
||||||
connecting to one of the bootstrap nodes."
|
|
||||||
})}
|
})}
|
||||||
, {"mcast",
|
, {"mcast",
|
||||||
sc(ref(cluster_mcast),
|
sc(ref(cluster_mcast),
|
||||||
#{ desc => "Service discovery via UDP multicast."
|
#{
|
||||||
})}
|
})}
|
||||||
, {"dns",
|
, {"dns",
|
||||||
sc(ref(cluster_dns),
|
sc(ref(cluster_dns),
|
||||||
#{ desc => "Service discovery via DNS SRV records."
|
#{
|
||||||
})}
|
})}
|
||||||
, {"etcd",
|
, {"etcd",
|
||||||
sc(ref(cluster_etcd),
|
sc(ref(cluster_etcd),
|
||||||
#{ desc => "Service discovery using 'etcd' service."
|
#{
|
||||||
})}
|
})}
|
||||||
, {"k8s",
|
, {"k8s",
|
||||||
sc(ref(cluster_k8s),
|
sc(ref(cluster_k8s),
|
||||||
#{ desc => "Service discovery via Kubernetes API server."
|
#{
|
||||||
})}
|
})}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -420,9 +408,7 @@ a crash dump"
|
||||||
)}
|
)}
|
||||||
, {"cluster_call",
|
, {"cluster_call",
|
||||||
sc(ref("cluster_call"),
|
sc(ref("cluster_call"),
|
||||||
#{ desc => "Options for the 'cluster call' feature that allows to execute a callback
|
#{ 'readOnly' => true
|
||||||
on all nodes in the cluster."
|
|
||||||
, 'readOnly' => true
|
|
||||||
}
|
}
|
||||||
)}
|
)}
|
||||||
];
|
];
|
||||||
|
@ -742,6 +728,62 @@ fields("authorization") ->
|
||||||
emqx_schema:fields("authorization") ++
|
emqx_schema:fields("authorization") ++
|
||||||
emqx_authz_schema:fields("authorization").
|
emqx_authz_schema:fields("authorization").
|
||||||
|
|
||||||
|
|
||||||
|
desc("cluster") ->
|
||||||
|
"EMQX nodes can form a cluster to scale up the total capacity.<br>"
|
||||||
|
"Here holds the configs to instruct how individual nodes "
|
||||||
|
"can discover each other.";
|
||||||
|
desc(cluster_static) ->
|
||||||
|
"Service discovery via static nodes. The new node joins the cluster by "
|
||||||
|
"connecting to one of the bootstrap nodes.";
|
||||||
|
desc(cluster_mcast) ->
|
||||||
|
"Service discovery via UDP multicast.";
|
||||||
|
desc(cluster_dns) ->
|
||||||
|
"Service discovery via DNS SRV records.";
|
||||||
|
desc(cluster_etcd) ->
|
||||||
|
"Service discovery using 'etcd' service.";
|
||||||
|
desc(cluster_k8s) ->
|
||||||
|
"Service discovery via Kubernetes API server.";
|
||||||
|
desc("node") ->
|
||||||
|
"Node name, cookie, config & data directories "
|
||||||
|
"and the Erlang virtual machine (BEAM) boot parameters.";
|
||||||
|
desc("db") ->
|
||||||
|
"Settings for the embedded database.";
|
||||||
|
desc("cluster_call") ->
|
||||||
|
"Options for the 'cluster call' feature that allows to execute a callback "
|
||||||
|
"on all nodes in the cluster.";
|
||||||
|
desc("rpc") ->
|
||||||
|
"EMQX uses a library called <code>gen_rpc</code> for "
|
||||||
|
"inter-broker communication.<br/>Most of the time the default config "
|
||||||
|
"should work, but in case you need to do performance "
|
||||||
|
"fine-turning or experiment a bit, this is where to look.";
|
||||||
|
desc("log") ->
|
||||||
|
"EMQX logging supports multiple sinks for the log events."
|
||||||
|
" Each sink is represented by a _log handler_, which can be configured independently.";
|
||||||
|
desc("console_handler") ->
|
||||||
|
"Log handler that prints log events to the EMQX console.";
|
||||||
|
desc("log_file_handler") ->
|
||||||
|
"Log handler that prints log events to files.";
|
||||||
|
desc("log_rotation") ->
|
||||||
|
"By default, the logs are stored in `./log` directory (for installation from zip file)"
|
||||||
|
" or in `/var/log/emqx` (for binary installation).<br/>"
|
||||||
|
"This section of the configuration controls the number of files kept for each log handler.";
|
||||||
|
desc("log_overload_kill") ->
|
||||||
|
"Log overload kill feature an overload protection that activates when"
|
||||||
|
" the log handlers use too much memory or have too many buffered log messages.<br/>"
|
||||||
|
"When the overload is detected, the log handler is terminated and restarted after a"
|
||||||
|
" cooldown period.";
|
||||||
|
desc("log_burst_limit") ->
|
||||||
|
"Large bursts of log events produced in a short time can potentially cause problems, such as:\n"
|
||||||
|
" - Log files grow very large\n"
|
||||||
|
" - Log files are rotated too quickly, and useful information gets overwritten\n"
|
||||||
|
" - Overall performance impact on the system\n\n"
|
||||||
|
"Log burst limit feature can temporarily disable logging to avoid these issues.";
|
||||||
|
desc("authorization") ->
|
||||||
|
"Settings that control client authorization.";
|
||||||
|
desc(_) ->
|
||||||
|
undefined.
|
||||||
|
|
||||||
translations() -> ["ekka", "kernel", "emqx", "gen_rpc"].
|
translations() -> ["ekka", "kernel", "emqx", "gen_rpc"].
|
||||||
|
|
||||||
translation("ekka") ->
|
translation("ekka") ->
|
||||||
|
|
|
@ -21,7 +21,9 @@
|
||||||
|
|
||||||
-export([ namespace/0
|
-export([ namespace/0
|
||||||
, roots/0
|
, roots/0
|
||||||
, fields/1]).
|
, fields/1
|
||||||
|
, desc/1
|
||||||
|
]).
|
||||||
|
|
||||||
namespace() -> "prometheus".
|
namespace() -> "prometheus".
|
||||||
|
|
||||||
|
@ -45,4 +47,9 @@ fields("prometheus") ->
|
||||||
})}
|
})}
|
||||||
].
|
].
|
||||||
|
|
||||||
|
desc("prometheus") ->
|
||||||
|
"Settings for reporting metrics to Prometheus pushgateway.";
|
||||||
|
desc(_) ->
|
||||||
|
undefined.
|
||||||
|
|
||||||
sc(Type, Meta) -> hoconsc:mk(Type, Meta).
|
sc(Type, Meta) -> hoconsc:mk(Type, Meta).
|
||||||
|
|
2
build
2
build
|
@ -70,7 +70,7 @@ make_doc() {
|
||||||
local libs_dir1 libs_dir2
|
local libs_dir1 libs_dir2
|
||||||
libs_dir1="$("$FIND" "_build/default/lib/" -maxdepth 2 -name ebin -type d)"
|
libs_dir1="$("$FIND" "_build/default/lib/" -maxdepth 2 -name ebin -type d)"
|
||||||
libs_dir2="$("$FIND" "_build/$PROFILE/lib/" -maxdepth 2 -name ebin -type d)"
|
libs_dir2="$("$FIND" "_build/$PROFILE/lib/" -maxdepth 2 -name ebin -type d)"
|
||||||
libs_dir3="$("$FIND" "_build/$PROFILE/checkouts/" -maxdepth 2 -name ebin -type d)"
|
libs_dir3="$("$FIND" "_build/$PROFILE/checkouts/" -maxdepth 2 -name ebin -type d || true)"
|
||||||
case $PROFILE in
|
case $PROFILE in
|
||||||
emqx-enterprise)
|
emqx-enterprise)
|
||||||
SCHEMA_MODULE='emqx_enterprise_conf_schema'
|
SCHEMA_MODULE='emqx_enterprise_conf_schema'
|
||||||
|
|
Loading…
Reference in New Issue