You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Azure Monitoring Agent MDSD监听AF_INET TCP套接字

问题:如何让mdsd监听AF_INET TCP套接字而非AF_UNIX套接字?

当前启动命令

我们使用以下命令启动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)

问题现象

  1. 虽指定了-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

  1. 进程可正常启动,但跨主机创建客户端时无法收到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
}
  1. 当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:05:05