如何配置Azure Monitoring Agent MDSD监听AF_INET TCP套接字
当前启动命令
我们使用以下命令启动mdsd进程:
start("mdsd", "-a", "-C", "-j", "-T", "0x100000", "0x200000", "0x40000", "0x4000", "0x2002", "-c", "/etc/mdsd.d/mdsd.xml", "-r", MDSD_ROLE_PREFIX, "-e", MDSD_LOG+"/mdsd.err", "-w", MDSD_LOG+"/mdsd.warn", "-o", MDSD_LOG+"/mdsd.info", "-q", MDSD_LOG+"/mdsd.qos", "-L", MDSD_EVENTS_PERSIST_PATH, "-p", MDSD_PORT)
问题现象
- 虽指定了
-p选项,但日志显示仅启用json协议(而非tcp_json协议):
2024-01-30T14:30:12.6149880Z:
virtual void Subscription::execute(const MdsTime&) (.../mdsd/Subscription.cc +83) Start time 2024-01-30T14:25:00.0000000Z, end time 2024-01-30T14:30:00.0000000Z
2024-01-30T14:30:12.6200070Z: virtual void Subscription::execute(const MdsTime&) (.../mdsd/Subscription.cc +119) Processed 0 lines for 0x2de06c0 (Event [Bond]azurenfsaasfileaccesslogsver1v0, interval 300)
2024-01-30T14:30:15.4814710Z: void ProtocolListener::run() (.../mdsd/ProtocolListener.cc +168) New connection is ready for protocol 'json' on fd=22
- 进程可正常启动,但跨主机创建客户端时无法收到mdsd的ACK,进程卡在Read操作:
conn, err = net.Dial("tcp", "127.0.0.1:9001") chunk := make([]byte, 10) read, err := conn.Read(chunk) if err != nil { //return received, buffer.Bytes(), err }
- 当前mdsd监听的是AF_UNIX套接字:
root@20034a5fbc49:/var/run/mdsd# ls default.lock default.pidport default_bond.socket default_djson.socket default_fluent.socket default_influx.socket default_json.socket default_syslog.socket
解决方案
要让mdsd监听AF_INET TCP套接字,需要调整启动参数:
- 移除
-j参数:该参数用于启用UNIX域套接字的json协议,会生成类似default_json.socket的本地套接字文件 - 添加
-J参数:该参数用于启用TCP套接字的json协议(即tcp_json),配合-p指定监听的TCP端口 - 保留
-p MDSD_PORT参数:确保指定要监听的TCP端口号
修改后的启动命令示例
start("mdsd", "-a", "-C", "-J", "-T", "0x100000", "0x200000", "0x40000", "0x4000", "0x2002", "-c", "/etc/mdsd.d/mdsd.xml", "-r", MDSD_ROLE_PREFIX, "-e", MDSD_LOG+"/mdsd.err", "-w", MDSD_LOG+"/mdsd.warn", "-o", MDSD_LOG+"/mdsd.info", "-q", MDSD_LOG+"/mdsd.qos", "-L", MDSD_EVENTS_PERSIST_PATH, "-p", MDSD_PORT)
验证方式
启动后查看日志,应该会出现类似如下的日志行,说明已启用tcp_json协议:
2024-xx-xxTxx:xx:xx.xxxxxZ: void ProtocolListener::run() (.../mdsd/ProtocolListener.cc +168) New connection is ready for protocol 'tcp_json' on fd=xx
同时可以用netstat -tulpn | grep mdsd命令查看mdsd是否在指定的TCP端口上监听,而非仅生成UNIX套接字文件。
内容的提问来源于stack exchange,提问作者DHRUV GUPTA

