## NOTE: The configurations in this file will be overridden by ## `/data/emqx_overrides.conf` ##================================================================== ## Node ##================================================================== node { ## Node name. ## See: http://erlang.org/doc/reference_manual/distributed.html ## ## @doc node.name ## ValueType: NodeName ## Default: emqx@127.0.0.1 name = "emqx@127.0.0.1" ## Cookie for distributed node communication. ## ## @doc node.cookie ## ValueType: String ## Default: emqxsecretcookie cookie = emqxsecretcookie ## Data dir for the node ## ## @doc node.data_dir ## ValueType: Folder ## Default: "{{ platform_data_dir }}/" data_dir = "{{ platform_data_dir }}/" ## Dir of crash dump file. ## ## @doc node.crash_dump_dir ## ValueType: Folder ## Default: "{{ platform_log_dir }}/" crash_dump_dir = "{{ platform_log_dir }}/" ## Global GC Interval. ## ## @doc node.global_gc_interval ## ValueType: Duration ## Default: 15m global_gc_interval = 15m ## Sets the etc directory etc_dir = "{{ platform_etc_dir }}" ## Sets the net_kernel tick time in seconds. ## Notice that all communicating nodes are to have the same ## TickTime value specified. ## ## See: http://www.erlang.org/doc/man/kernel_app.html#net_ticktime ## ## @doc node.dist_net_ticktime ## ValueType: Number ## Default: 2m dist_net_ticktime = 2m ## Sets the port range for the listener socket of a distributed ## Erlang node. ## Note that if there are firewalls between clustered nodes, this ## port segment for nodes’ communication should be allowed. ## ## See: http://www.erlang.org/doc/man/kernel_app.html ## ## @doc node.dist_listen_min ## ValueType: Integer ## Range: [1024,65535] ## Default: 6369 dist_listen_min = 6369 ## Sets the port range for the listener socket of a distributed ## Erlang node. ## Note that if there are firewalls between clustered nodes, this ## port segment for nodes’ communication should be allowed. ## ## See: http://www.erlang.org/doc/man/kernel_app.html ## ## @doc node.dist_listen_max ## ValueType: Integer ## Range: [1024,65535] ## Default: 6369 dist_listen_max = 6369 ## Sets the maximum depth of call stack back-traces in the exit ## reason element of 'EXIT' tuples. ## The flag also limits the stacktrace depth returned by ## process_info item current_stacktrace. ## ## @doc node.backtrace_depth ## ValueType: Integer ## Range: [0,1024] ## Default: 23 backtrace_depth = 23 cluster_call { ## Time interval to retry after a failed call ## ## @doc node.cluster_call.retry_interval ## ValueType: Duration ## Default: 1s retry_interval = 1s ## Retain the maximum number of completed transactions (for queries) ## ## @doc node.cluster_call.max_history ## ValueType: Integer ## Range: [1, 500] ## Default: 100 max_history = 100 ## Time interval to clear completed but stale transactions. ## Ensure that the number of completed transactions is less than the max_history ## ## @doc node.cluster_call.cleanup_interval ## ValueType: Duration ## Default: 5m cleanup_interval = 5m } } ##================================================================== ## Cluster ##================================================================== cluster { ## Cluster name. ## ## @doc cluster.name ## ValueType: String ## Default: emqxcl name = emqxcl ## Enable cluster autoheal from network partition. ## ## @doc cluster.autoheal ## ValueType: Boolean ## Default: true autoheal = true ## Autoclean down node. A down node will be removed from the cluster ## if this value > 0. ## ## @doc cluster.autoclean ## ValueType: Duration ## Default: 5m autoclean = 5m ## Node discovery strategy to join the cluster. ## ## @doc cluster.discovery_strategy ## ValueType: manual | static | mcast | dns | etcd | k8s ## - manual: Manual join command ## - static: Static node list ## - mcast: IP Multicast ## - dns: DNS A Record ## - etcd: etcd ## - k8s: Kubernetes ## ## Default: manual discovery_strategy = manual ##---------------------------------------------------------------- ## Cluster using static node list ##---------------------------------------------------------------- static { ## Node list of the cluster ## ## @doc cluster.static.seeds ## ValueType: Array ## Default: [] seeds = ["emqx1@127.0.0.1", "emqx2@127.0.0.1"] } ##---------------------------------------------------------------- ## Cluster using IP Multicast ##---------------------------------------------------------------- mcast { ## IP Multicast Address. ## ## @doc cluster.mcast.addr ## ValueType: IPAddress ## Default: "239.192.0.1" addr = "239.192.0.1" ## Multicast Ports. ## ## @doc cluster.mcast.ports ## ValueType: Array ## Default: [4369, 4370] ports = [4369, 4370] ## Multicast Iface. ## ## @doc cluster.mcast.iface ## ValueType: IPAddress ## Default: "0.0.0.0" iface = "0.0.0.0" ## Multicast Ttl. ## ## @doc cluster.mcast.ttl ## ValueType: Integer ## Range: [0,255] ## Default: 255 ttl = 255 ## Multicast loop. ## ## @doc cluster.mcast.loop ## ValueType: Boolean ## Default: true loop = true } ##---------------------------------------------------------------- ## Cluster using DNS A records ##---------------------------------------------------------------- dns { ## DNS name. ## ## @doc cluster.dns.name ## ValueType: String ## Default: localhost name = localhost ## The App name is used to build 'node.name' with IP address. ## ## @doc cluster.dns.app ## ValueType: String ## Default: emqx app = emqx } ##---------------------------------------------------------------- ## Cluster using etcd ##---------------------------------------------------------------- etcd { ## Etcd server list, seperated by ','. ## ## @doc cluster.etcd.server ## ValueType: URL ## Required: true server = "http://127.0.0.1:2379" ## The prefix helps build nodes path in etcd. Each node in the cluster ## will create a path in etcd: v2/keys/// ## ## @doc cluster.etcd.prefix ## ValueType: String ## Default: emqxcl prefix = emqxcl ## The TTL for node's path in etcd. ## ## @doc cluster.etcd.node_ttl ## ValueType: Duration ## Default: 1m node_ttl = 1m ## Path to the file containing the user's private PEM-encoded key. ## ## @doc cluster.etcd.ssl.keyfile ## ValueType: File ## Default: "{{ platform_etc_dir }}/certs/key.pem" ssl.keyfile = "{{ platform_etc_dir }}/certs/key.pem" ## Path to a file containing the user certificate. ## ## @doc cluster.etcd.ssl.certfile ## ValueType: File ## Default: "{{ platform_etc_dir }}/certs/cert.pem" ssl.certfile = "{{ platform_etc_dir }}/certs/cert.pem" ## Path to the file containing PEM-encoded CA certificates. The CA certificates ## are used during server authentication and when building the client certificate chain. ## ## @doc cluster.etcd.ssl.cacertfile ## ValueType: File ## Default: "{{ platform_etc_dir }}/certs/cacert.pem" ssl.cacertfile = "{{ platform_etc_dir }}/certs/cacert.pem" } ##---------------------------------------------------------------- ## Cluster using Kubernetes ##---------------------------------------------------------------- k8s { ## Kubernetes API server list, seperated by ','. ## ## @doc cluster.k8s.apiserver ## ValueType: URL ## Required: true apiserver = "http://10.110.111.204:8080" ## The service name helps lookup EMQ nodes in the cluster. ## ## @doc cluster.k8s.service_name ## ValueType: String ## Default: emqx service_name = emqx ## The address type is used to extract host from k8s service. ## ## @doc cluster.k8s.address_type ## ValueType: ip | dns | hostname ## Default: ip address_type = ip ## The app name helps build 'node.name'. ## ## @doc cluster.k8s.app_name ## ValueType: String ## Default: emqx app_name = emqx ## The suffix added to dns and hostname get from k8s service ## ## @doc cluster.k8s.suffix ## ValueType: String ## Default: "pod.local" suffix = "pod.local" ## Kubernetes Namespace ## ## @doc cluster.k8s.namespace ## ValueType: String ## Default: default namespace = default } db_backend = mnesia rlog { # role: core # core_nodes: [] } } ##================================================================== ## Log ##================================================================== log { ##---------------------------------------------------------------- ## The console log handler send log messages to emqx console ##---------------------------------------------------------------- console_handler { ## Log to single line ## @doc log.console_handler..enable ## ValueType: Boolean ## Default: false enable = false ## The log level of this handler ## All the log messages with levels lower than this level will ## be dropped. ## ## @doc log.console_handler..level ## ValueType: debug | info | notice | warning | error | critical | alert | emergency ## Default: warning level = warning ## Timezone offset to display in logs ## ## @doc log.console_handler..time_offset ## ValueType: system | utc | String ## - "system" use system zone ## - "utc" for Universal Coordinated Time (UTC) ## - "+hh:mm" or "-hh:mm" for a specified offset ## Default: system time_offset = system ## Limits the total number of characters printed for each log event. ## ## @doc log.console_handler..chars_limit ## ValueType: unlimited | Integer ## Range: [0, +Inf) ## Default: unlimited chars_limit = unlimited ## Maximum depth for Erlang term log formatting ## and Erlang process message queue inspection. ## ## @doc log.console_handler..max_depth ## ValueType: unlimited | Integer ## Default: 100 max_depth = 100 ## Log formatter ## @doc log.console_handler..formatter ## ValueType: text | json ## Default: text formatter = text ## Log to single line ## @doc log.console_handler..single_line ## ValueType: Boolean ## Default: true single_line = true ## The max allowed queue length before switching to sync mode. ## ## Log overload protection parameter. If the message queue grows ## larger than this value the handler switches from anync to sync mode. ## ## @doc log.console_handler..sync_mode_qlen ## ValueType: Integer ## Range: [0, ${log.console_handler..drop_mode_qlen}] ## Default: 100 sync_mode_qlen = 100 ## The max allowed queue length before switching to drop mode. ## ## Log overload protection parameter. When the message queue grows ## larger than this threshold, the handler switches to a mode in which ## it drops all new events that senders want to log. ## ## @doc log.console_handler..drop_mode_qlen ## ValueType: Integer ## Range: [${log.console_handler..sync_mode_qlen}, ${log.console_handler..flush_qlen}] ## Default: 3000 drop_mode_qlen = 3000 ## The max allowed queue length before switching to flush mode. ## ## Log overload protection parameter. If the length of the message queue ## grows larger than this threshold, a flush (delete) operation takes place. ## To flush events, the handler discards the messages in the message queue ## by receiving them in a loop without logging. ## ## @doc log.console_handler..flush_qlen ## ValueType: Integer ## Range: [${log.console_handler..drop_mode_qlen}, infinity) ## Default: 8000 flush_qlen = 8000 ## Kill the log handler when it gets overloaded. ## ## Log overload protection parameter. It is possible that a handler, ## even if it can successfully manage peaks of high load without crashing, ## can build up a large message queue, or use a large amount of memory. ## We could kill the log handler in these cases and restart it after a ## few seconds. ## ## @doc log.console_handler..overload_kill.enable ## ValueType: Boolean ## Default: true overload_kill.enable = true ## The max allowed queue length before killing the log hanlder. ## ## Log overload protection parameter. This is the maximum allowed queue ## length. If the message queue grows larger than this, the handler ## process is terminated. ## ## @doc log.console_handler..overload_kill.qlen ## ValueType: Integer ## Range: [0, 1048576] ## Default: 20000 overload_kill.qlen = 20000 ## The max allowed memory size before killing the log hanlder. ## ## Log overload protection parameter. This is the maximum memory size ## that the handler process is allowed to use. If the handler grows ## larger than this, the process is terminated. ## ## @doc log.console_handler..overload_kill.mem_size ## ValueType: Size ## Default: 30MB overload_kill.mem_size = 30MB ## Restart the log hanlder after some seconds. ## ## Log overload protection parameter. If the handler is terminated, ## it restarts automatically after a delay specified in seconds. ## ## @doc log.console_handler..overload_kill.restart_after ## ValueType: Duration ## Default: 5s overload_kill.restart_after = 5s ## Controlling Bursts of Log Requests. ## ## Log overload protection parameter. Large bursts of log events - many ## events received by the handler under a short period of time - can ## potentially cause problems. By specifying the maximum number of events ## to be handled within a certain time frame, the handler can avoid ## choking the log with massive amounts of printouts. ## ## Note that there would be no warning if any messages were ## dropped because of burst control. ## ## @doc log.console_handler..burst_limit.enable ## ValueType: Boolean ## Default: false burst_limit.enable = false ## This config controls the maximum number of events to handle within ## a time frame. After the limit is reached, successive events are ## dropped until the end of the time frame defined by `window_time`. ## ## @doc log.console_handler..burst_limit.max_count ## ValueType: Integer ## Default: 10000 burst_limit.max_count = 10000 ## See the previous description of burst_limit_max_count. ## ## @doc log.console_handler..burst_limit.window_time ## ValueType: duration ## Default: 1s burst_limit.window_time = 1s } ##---------------------------------------------------------------- ## The file log handlers send log messages to files ##---------------------------------------------------------------- ## file_handlers. file_handlers.default { ## The log level filter of this handler ## All the log messages with levels lower than this level will ## be dropped. ## ## @doc log.file_handlers..level ## ValueType: debug | info | notice | warning | error | critical | alert | emergency ## Default: warning level = warning ## The log file for specified level. ## ## If `rotation` is disabled, this is the file of the log files. ## ## If `rotation` is enabled, this is the base name of the files. ## Each file in a rotated log is named .N, where N is an integer. ## ## Note: Log files for a specific log level will only contain all the logs ## that higher than or equal to that level ## ## @doc log.file_handlers..file ## ValueType: File ## Required: true file = "{{ platform_log_dir }}/emqx.log" ## Enables the log rotation. ## With this enabled, new log files will be created when the current ## log file is full, max to `rotation_count` files will be created. ## ## @doc log.file_handlers..rotation.enable ## ValueType: Boolean ## Default: true rotation.enable = true ## Maximum rotation count of log files. ## ## @doc log.file_handlers..rotation.count ## ValueType: Integer ## Range: [1, 2048] ## Default: 10 rotation.count = 10 ## Maximum size of each log file. ## ## If the max_size reached and `rotation` is disabled, the handler ## will stop sending log messages, if the `rotation` is enabled, ## the file rotates. ## ## @doc log.file_handlers..max_size ## ValueType: Size | infinity ## Default: 10MB max_size = 10MB ## Timezone offset to display in logs ## ## @doc log.file_handlers..time_offset ## ValueType: system | utc | String ## - "system" use system zone ## - "utc" for Universal Coordinated Time (UTC) ## - "+hh:mm" or "-hh:mm" for a specified offset ## Default: system time_offset = system ## Limits the total number of characters printed for each log event. ## ## @doc log.file_handlers..chars_limit ## ValueType: unlimited | Integer ## Range: [0, +Inf) ## Default: unlimited chars_limit = unlimited ## Maximum depth for Erlang term log formatting ## and Erlang process message queue inspection. ## ## @doc log.file_handlers..max_depth ## ValueType: unlimited | Integer ## Default: 100 max_depth = 100 ## Log formatter ## @doc log.file_handlers..formatter ## ValueType: text | json ## Default: text formatter = text ## Log to single line ## @doc log.file_handlers..single_line ## ValueType: Boolean ## Default: true single_line = true ## The max allowed queue length before switching to sync mode. ## ## Log overload protection parameter. If the message queue grows ## larger than this value the handler switches from anync to sync mode. ## ## @doc log.file_handlers..sync_mode_qlen ## ValueType: Integer ## Range: [0, ${log.file_handlers..drop_mode_qlen}] ## Default: 100 sync_mode_qlen = 100 ## The max allowed queue length before switching to drop mode. ## ## Log overload protection parameter. When the message queue grows ## larger than this threshold, the handler switches to a mode in which ## it drops all new events that senders want to log. ## ## @doc log.file_handlers..drop_mode_qlen ## ValueType: Integer ## Range: [${log.file_handlers..sync_mode_qlen}, ${log.file_handlers..flush_qlen}] ## Default: 3000 drop_mode_qlen = 3000 ## The max allowed queue length before switching to flush mode. ## ## Log overload protection parameter. If the length of the message queue ## grows larger than this threshold, a flush (delete) operation takes place. ## To flush events, the handler discards the messages in the message queue ## by receiving them in a loop without logging. ## ## @doc log.file_handlers..flush_qlen ## ValueType: Integer ## Range: [${log.file_handlers..drop_mode_qlen}, infinity) ## Default: 8000 flush_qlen = 8000 ## Kill the log handler when it gets overloaded. ## ## Log overload protection parameter. It is possible that a handler, ## even if it can successfully manage peaks of high load without crashing, ## can build up a large message queue, or use a large amount of memory. ## We could kill the log handler in these cases and restart it after a ## few seconds. ## ## @doc log.file_handlers..overload_kill.enable ## ValueType: Boolean ## Default: true overload_kill.enable = true ## The max allowed queue length before killing the log hanlder. ## ## Log overload protection parameter. This is the maximum allowed queue ## length. If the message queue grows larger than this, the handler ## process is terminated. ## ## @doc log.file_handlers..overload_kill.qlen ## ValueType: Integer ## Range: [0, 1048576] ## Default: 20000 overload_kill.qlen = 20000 ## The max allowed memory size before killing the log hanlder. ## ## Log overload protection parameter. This is the maximum memory size ## that the handler process is allowed to use. If the handler grows ## larger than this, the process is terminated. ## ## @doc log.file_handlers..overload_kill.mem_size ## ValueType: Size ## Default: 30MB overload_kill.mem_size = 30MB ## Restart the log hanlder after some seconds. ## ## Log overload protection parameter. If the handler is terminated, ## it restarts automatically after a delay specified in seconds. ## ## @doc log.file_handlers..overload_kill.restart_after ## ValueType: Duration ## Default: 5s overload_kill.restart_after = 5s ## Controlling Bursts of Log Requests. ## ## Log overload protection parameter. Large bursts of log events - many ## events received by the handler under a short period of time - can ## potentially cause problems. By specifying the maximum number of events ## to be handled within a certain time frame, the handler can avoid ## choking the log with massive amounts of printouts. ## ## Note that there would be no warning if any messages were ## dropped because of burst control. ## ## @doc log.file_handlers..burst_limit.enable ## ValueType: Boolean ## Default: false burst_limit.enable = false ## This config controls the maximum number of events to handle within ## a time frame. After the limit is reached, successive events are ## dropped until the end of the time frame defined by `window_time`. ## ## @doc log.file_handlers..burst_limit.max_count ## ValueType: Integer ## Default: 10000 burst_limit.max_count = 10000 ## See the previous description of burst_limit_max_count. ## ## @doc log.file_handlers..burst_limit.window_time ## ValueType: duration ## Default: 1s burst_limit.window_time = 1s } } ##================================================================== ## RPC ##================================================================== rpc { ## RPC Mode. ## ## @doc rpc.mode ## ValueType: sync | async ## Default: async mode = async ## Max batch size of async RPC requests. ## ## NOTE: RPC batch won't work when rpc.mode = sync ## Zero value disables rpc batching. ## ## @doc rpc.async_batch_size ## ValueType: Integer ## Range: [0, 1048576] ## Default: 0 async_batch_size = 256 ## RPC port discovery ## ## The strategy for discovering the RPC listening port of ## other nodes. ## ## @doc cluster.discovery_strategy ## ValueType: manual | stateless ## - manual: discover ports by `tcp_server_port`. ## - stateless: discover ports in a stateless manner. ## If node name is `emqx@127.0.0.1`, where the `` is ## an integer, then the listening port will be `5370 + ` ## ## Default: `stateless`. port_discovery = stateless ## TCP server port for RPC. ## ## Only takes effect when `rpc.port_discovery` = `manual`. ## ## @doc rpc.tcp_server_port ## ValueType: Integer ## Range: [1024-65535] ## Defaults: 5369 tcp_server_port = 5369 ## Number of outgoing RPC connections. ## ## Set this to 1 to keep the message order sent from the same ## client. ## ## @doc rpc.tcp_client_num ## ValueType: Integer ## Range: [1, 256] ## Defaults: 1 tcp_client_num = 1 ## RCP Client connect timeout. ## ## @doc rpc.connect_timeout ## ValueType: Duration ## Default: 5s connect_timeout = 5s ## TCP send timeout of RPC client and server. ## ## @doc rpc.send_timeout ## ValueType: Duration ## Default: 5s send_timeout = 5s ## Authentication timeout ## ## @doc rpc.authentication_timeout ## ValueType: Duration ## Default: 5s authentication_timeout = 5s ## Default receive timeout for call() functions ## ## @doc rpc.call_receive_timeout ## ValueType: Duration ## Default: 15s call_receive_timeout = 15s ## Socket idle keepalive. ## ## @doc rpc.socket_keepalive_idle ## ValueType: Duration ## Default: 900s socket_keepalive_idle = 900s ## TCP Keepalive probes interval. ## ## @doc rpc.socket_keepalive_interval ## ValueType: Duration ## Default: 75s socket_keepalive_interval = 75s ## Probes lost to close the connection ## ## @doc rpc.socket_keepalive_count ## ValueType: Integer ## Default: 9 socket_keepalive_count = 9 ## Size of TCP send buffer. ## ## @doc rpc.socket_sndbuf ## ValueType: Size ## Default: 1MB socket_sndbuf = 1MB ## Size of TCP receive buffer. ## ## @doc rpc.socket_recbuf ## ValueType: Size ## Default: 1MB socket_recbuf = 1MB ## Size of user-level software socket buffer. ## ## @doc rpc.socket_buffer ## ValueType: Size ## Default: 1MB socket_buffer = 1MB }