Mosquitto服务器的日志分析

启动Mosquitto后,我们可以看到Mosquitto的启动日志:

1515307521: mosquitto version 1.4.12 (build date 2017-06-01 13:03:46+0000) starting
1515307521: Config loaded from /mosquitto/conf/mosquitto.conf.
1515307521: Opening ipv4 listen socket on port 1883.
1515307521: Opening ipv6 listen socket on port 1883.

Mosquitto服务器的日志格式:第一列数字(例如1515307521)表示该条日志打印的Unix时间戳;第二列则是具体的日志信息。根据启动日志的最后两行信息,我们可以很清楚地知道,我们所启动的Mosquitto服务器正在监听的TCP端口为1883,这是Mosquitto服务器默认监听的TCP端口。

客户端建立连接、订阅消息的日志

现在使用MQTT客户端连接Mosquitto服务器(1883端口)并向服务器发起消息订阅,正常情况下我们可以看到Mosquitto服务器输出的日志如下所示:

1515309375: New connection from 172.17.0.1 on port 1883.
1515309375: New client connected from 172.17.0.1 as mqtt-client-NWq09wrg (c0, k60).
1515309375: Sending CONNACK to mqtt-client-NWq09wrg (0, 0)
1515309375: Received SUBSCRIBE from mqtt-client-NWq09wrg
1515309375: 	topic/sub/test (QoS 2)
1515309375: mqtt-client-NWq09wrg 2 topic/sub/test
1515309375: Sending SUBACK to mqtt-client-NWq09wrg

第1行日志表示MQTT客户端成功与Mosquitto服务器建立TCP连接,客户端IP为 172.17.0.1,连接TCP端口为1883。

第2行日志显示了MQTT客户端向Mosquitto服务器提交建立连接的请求(客户端调用connect接口)。日志中包含了客户端请求建立连接的一些参数,如:

  • mqtt-client-NWq09wrg —— 表示客户端ID(clientId)
  • c0 —— 表示客户端将cleanSession标识设置为false,即不清除session
  • k60 —— 表示客户端将keep alive设置为60秒,即MQTT客户端与Mosquitto服务器的心跳时间间隔为60秒

第3行日志表示Mosquitto服务器接受了客户端的建立连接请求,并向客户端返回建立连接请求的响应。

第4~5行日志表示Mosquitto服务器收到了来自客户端mqtt-client-NWq09wrg订阅消息的请求,订阅的消息主题为topic/sub/test,消息质量为QoS 2。

第6~7行日志表示Mosquitto服务器接受了客户端的消息订阅请求,并向客户端返回订阅请求的响应。

特别注意:Mosquitto服务器不允许有多个客户端同时使用同一个客户端ID(clientId)与其保持连接,如果有多个客户端使用了同一个客户端ID来与Mosquitto建立连接,Mosquitto服务器只保留最新的一个客户端连接并关闭旧的连接。具体日志如下所示:2~4行即为Mosquitto服务器关闭旧连接,接受新连接的过程。

1515314560: New connection from 172.17.0.1 on port 1883.
1515314560: Client mqtt-client-NWq09wrg already connected, closing old connection.
1515314560: Client mqtt-client-NWq09wrg disconnected.
1515314560: New client connected from 172.17.0.1 as mqtt-client-NWq09wrg (c1, k60).
1515314560: Sending CONNACK to mqtt-client-NWq09wrg (0, 0)
1515314560: Received SUBSCRIBE from mqtt-client-NWq09wrg
1515314560: 	topic/sub/test (QoS 2)
1515314560: mqtt-client-NWq09wrg 2 topic/sub/test
1515314560: Sending SUBACK to mqtt-client-NWq09wrg

客户端与Mosquitto保持心跳的日志

MQTT客户端成功与Mosquitto服务器建立连接后,会按照连接时设置的keep alive时间间隔定时向服务器发送心跳请求数据包——PINGREQ;服务器收到客户端的心跳请求数据包后,正常情况下会向客户端回复心跳响应数据包——PINGRESP。心跳日志如下所示:

1515313742: Received PINGREQ from mqtt-client-NWq09wrg
1515313742: Sending PINGRESP to mqtt-client-NWq09wrg

客户端主动取消订阅、断开连接的日志

MQTT客户端分别调用unsubscribe接口和disconnect接口来向服务器发送取消消息主题订阅的请求(UNSUBSCRIBE)和请求断开与服务器连接的请求(DISCONNECT)时,Mosquitto服务器输出的日志如下所示:

1515315086: Received UNSUBSCRIBE from mqtt-client-NWq09wrg
1515315086: 	topic/sub/test
1515315086: mqtt-client-NWq09wrg topic/sub/test
1515315086: Received DISCONNECT from mqtt-client-NWq09wrg
1515315086: Client mqtt-client-NWq09wrg disconnected.

发布消息的日志

MQTT客户端调用publish接口向Mosquitto服务器发布消息(使用QoS 2),服务器输出的日志如下所示:

1515317711: Received PUBLISH from mqtt-client-NWq09wrg (d0, q2, r0, m1, ‘topic/pub/test‘, ... (62 bytes))
1515317711: Sending PUBREC to mqtt-client-NWq09wrg (Mid: 1)
1515317711: Received PUBREL from mqtt-client-NWq09wrg (Mid: 1)
1515317711: Sending PUBCOMP to mqtt-client-NWq09wrg (Mid: 1)

QoS 2为MQTT协议最高等级的消息服务质量,这意味着每条发布的消息都会先存储在发送方和接收方本地,直到已处理此消息为止。消息的发送方和接收方通过一系列的来回握手的过程来确认消息是否已经被成功处理,以上的日志就表示着这个握手的过程:

第1行日志:表示Mosquitto服务器接收到了客户端mqtt-client-NWq09wrg发布的消息,日志包含了一些与发布的消息相关的参数:

  • d —— 表示MQTT协议报头的DUP字段
  • q —— 表示MQTT的消息服务质量QoS,这里q2即所发布消息的QoS为2
  • r —— 表示MQTT的retain标识
  • m —— 表示消息ID(messageId:MQTT发布的每条消息都有一个唯一的messageId,亦即Mid),这里所发布消息的ID为1
  • topic/pub/test —— 所发布消息的主题
  • (62 bytes) —— 表示所发布消息的大小,单位字节

第2行日志:表示Mosquitto服务器向客户端(消息发布方)回复收到发布消息的响应(PUBREC),告诉客户端此条消息已经成功收到并暂时缓存在Mosquitto服务器本地。

第3行日志:表示客户端成功收到服务器的发布消息响应(PUBREC),并向Mosquitto服务器发起释放消息的请求(PUBREL)。
第4行日志:表示Mosquitto服务器收到客户端的释放消息请求(PUBREL)后,向客户端返回消息成功发布的响应(PUBCOMP),客户端收到此响应后,才会认为该条消息成功发布并删除该条消息的本地缓存。

对于QoS为2的消息,其发布过程都会经历以上四个阶段:消息预发布(PUBLISH)-> 消息预发布确认(PUBREC)-> 消息释放(PUBREL)-> 消息成功发布(PUBCOMP);而对于QoS0或QoS1的消息,其发布过程则比较简单,没有这么复杂的过程,所以QoS2的消息是最耗时也是最耗资源的。

客户端连接超时,服务器主动清除连接信息

1403336671: Client 33303A33393A3236003V0 has exceeded timeout, disconnecting.

客户端Socket异常时的日志

终止客户端程序(异常网络断开),服务器将提示:Socket Error

1403337602: Socket error on client 351BBJKFX62C1, disconnecting.
1403337602: Socket error on client 351BBJKFX62C0, disconnecting.

原文地址:https://www.cnblogs.com/xi-jie/p/10859472.html

时间: 2024-11-12 21:56:11

Mosquitto服务器的日志分析的相关文章

Linux服务器access_log日志分析及配置详解(二)

默认nginx / Linux日志在哪个文件夹? 一般在 xxx.xxx.xxxx.com/home/admin 路径下面的error.log文件和access.log文件error_log logs/error.log; #错误日志access_log logs/access.log; #访问日志 1. access_log 访问日志 access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志

Linux服务器access_log日志分析及配置详解(一)

nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日志 错误日志的形式如下: 1 2 201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.007 0.007 MX pythontab.com GET /html/test.html HTTP/1.

对nginx服务器进行日志分析并且封IP

简单的日志分析排除命令,不过建议使用goacess日志分析视图化观察比较好,面对一些爬虫攻击,可以在nginx.conf配置文件里调用limit requst模块来限制连接数,如限制每秒钟的请求数:rate=10r/s,这是要依据业务情况来设置的. 1  分析日志封IP cd /nginx/logs [[email protected]]# awk '{print $1}' blog-access_log |sort|uniq -c|sort -rn -k1 280 "192.168.183.1

linux下搭建HTTP网站服务器和网站日志分析工具AWStats的使用

服务器IP地址:192.168.4.5 服务器主机名:srv5.tarena.com 1.在服务器端安装httpd软件包 [[email protected] /]# yum -y install httpd [[email protected] /]# service httpd start [[email protected] /]# chkconfig httpd on 2.在客户机端验证 在浏览器中输入192.168.4.5 如果显示欢迎页面表示服务器搭建成功 3.部署网页文档 首先将欢

日志分析-1.rsyslog 基础配置(服务器/客户端)

日志分析-1.rsyslog 基础配置(服务器/客户端)centos6起/etc/syslog.conf不再有!而是/etc/rsyslog.conf代替!rsyslog是syslog的多线程增强版,现在Fedora.Ubuntu,.rhel6.centos6默认的日志系统都是rsyslog了.rsyslog主要用来收集系统产生的各种日志,日志默认放在/var/log/目录下.日志收集工具,不仅仅可以收集本机的日志,还可以收集其他机器的日志 在客户端/服务器架构的配置下,rsyslog同时扮演了

squid缓存服务器 ACL访问控制 传统代理 透明代理 squid日志分析 反向代理

缓存代理概述 Squid提供了强大的代理控制机制,通过合理的设置ACL,并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等条件进行过滤.作为应用层的代理服务器软件,Sqiod主要提供了缓存加速和引用层过滤控制能力 代理的工作机制 当客户机通过代理来请求 Web 页面时,指定的代理服务器,会先检查自己的缓存如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中没有客户机需要访问的页面,则用代理服务器向Internet 发送访问请求. 由于客户机的W

scrapydweb:实现 Scrapyd 服务器集群监控和交互,Scrapy 日志分析和可视化

功能特性 Scrapyd 服务器集群监控和交互 支持通过分组和过滤选中特定服务器节点 一次点击,批量执行 Scrapy 日志分析 统计信息展示 爬虫进度可视化 关键日志分类 支持所有 Scrapyd API Deploy project, Run Spider, Stop job List projects/versions/spiders/running_jobs Delete version/project GitHub scrapydweb 欢迎 Star 和提交 Issue 安装 通过

CentOS7下Elastic Stack 5.0日志分析系统搭建

一.概述 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash是一个开源的用于收集,分析和存储日志的工具. Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以汇总.分析和搜索重要数据日志. Beats是elasticsearch公司开源的一款采集系统监控数据的代理ag

AWStats日志分析工具

awstats官方网站:http://awstats.sourceforge.net/ perl官方网站:http://www.perl.com/ Awstats是一个非常简洁而且强大的统计工具.它可以统计您站点的如下信息: 一:访问量,访问次数,页面浏览量,点击数,数据流量等精确到每月.每日.每小时的数据二:访问者国家.访问者IP.操作系统.浏览器等三:Robots/Spiders的统计四:纺客持续时间五:对不同Files type 的统计信息六:Pages-URL的统计七:其它信息(搜索关键