一、物联网消息队列Emqx日志配置及日志追踪
EMQX支持将日志输出到控制台或者日志文件,或者同时使用两者。使用 Docker 部署 EMQX,默认只能通过 docker logs 命令查看 EMQX 日志。EMQX 的默认日志级别为 warning,默认在单日志文件超过10MB(log.rotation.size配置)的情况下,滚动日志文件。emqx.log.N 文件里面,包含了 warning 以及 warning 以上的日志消息。可在 emqx.conf 中修改,emqx.conf相关日志配置如下:
log.to = file
log.level = warning
log.dir = /var/log/emqx
log.file = emqx.log
log.rotation.size = 10MB
log.rotation.count = 5
可以使用EMQX命令行工具emqx_ctl在运行时修改emqx的日志级别,示例如下:
#将全局日志级别primary log level 以及所有 log handlers 的级别设置为debug:
emqx_ctl log set-level debug
#将主日志primary log level 设置为 debug:
$ emqx_ctl log primary-level debug
#修改某个 log handler的日志级别,如将log handler file设置为 debug:
emqx_ctl log handlers set-level file debug
#启动和停止某个已经的 log handler:
$ emqx_ctl log handlers start default
$ emqx_ctl log handlers stop default
log handler 是负责日志处理和输出的工作进程,它由 log handler id 唯一标识,并负责接收什么级别的日志、如何过滤日志消息、将日志输出到什么地方三项任务。可以使用命令emqx_ctl log handlers list 查看当前的EMQX服务有哪些日志处理进程。emqx 4.3中安装的 log handlers如下:
$ emqx_ctl log handlers list
LogHandler(id=ssl_handler, level=debug, destination=console, status=started)
LogHandler(id=file, level=warning, destination=/var/log/emqx/emqx.log, status=started)
关于EMQX日志追踪,EMQX支持针对ClientID或Topic过滤日志并输出到文件。即我们可以将某个用户或某个主题的日志分离出来统计到指定日志文件中,在使用日志追踪功能之前,必须将 primary log level设置为debug,然后可以开始指定日志追踪规则。日志追踪的原理是给 emqx 安装一个新的 log handler,并设置 handler 的过滤条件。在 日志级别和 log handlers 小节,我们讨论过 log handler 的细节。示例如下:
#开启ClientID日志追踪,将所有ClientID为 'my_client' 的日志都输出到log/my_client.log:
$ emqx_ctl log primary-level debug
debug
$ emqx_ctl trace start client my_client log/my_client.log
trace clientid my_client successfully
#开启Topic日志追踪,将主题能匹配到 't/#' 的消息发布日志输出到 log/topic_t.log:
$ emqx_ctl log primary-level debug
debug
$ emqx_ctl trace start topic 't/#' log/topic_t.log
trace topic t/# successfully
#查询已经开启的日志追踪:
$ emqx_ctl trace list
查询已经开启的日志追踪,可以看到多了两条追踪的逻辑,并且在日志文件中也能看到增加了my_client.log,tail查看其中的内容可以一目了然地看到用户发送接收的指令数据。
最后:EMQX除了可以通过管理后台修改密码之外,还可通过在服务器上执行命令修改密码。使用命令: emqx_ctl admins passwd admin
二、Centos7上的rc.local开机不执行及git提交时的报错:warning: LF will be replaced by CRLF in..问题
在Centos7上的开机启动文件/etc/rc.local里添加了一些启动命令,但几次服务器重启后发现服务并没有启动起来。今天排查看了一下,在/etc/rc.local文件中有明确写到需要对此文件有执行权限。
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
lrwxrwxrwx 1 root root 13 Jan 12 2022 /etc/rc.local -> rc.d/rc.local
而直接查看的话,这个文件路径也确实加了可执行权限,但这个文件是个软链接,其执行的文件进一步查看没有添加执行权限,这就是问题所在。加上执行权限就可以了。
另在git提交时遇到报错:warning: LF will be replaced by CRLF in,原因是存在符号转义问题,windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法:
git config --global core.autocrlf false