- 论坛徽章:
- 1
|
本帖最后由 MrQing 于 2017-10-28 10:31 编辑
已解决,这里简单记录下(如有不对,欢迎指出)
1、unix domain socket类型有datagram(udp)、stream(tcp),通过 第三列可以看出来
- # netstat -nux
- Active UNIX domain sockets (w/o servers)
- Proto RefCnt Flags Type State I-Node Path
- unix 3 [ ] DGRAM 14961 /var/ossec/queue/alerts/execq
- unix 6 [ ] DGRAM 2154526970 /dev/log
复制代码 显然 /dev/log 是datagram UDP数据报类型
2、rsyslog imuxsock模块 是基于 DGRAM(udp) 的
3、logger -u /tmp/sock.path 提供了简单接口,将日志信息提交到 指定socket文件,而该命令默认基于stream(tcp)
- # strace logger -u /dev/log "123"
- 提示connect: Protocol wrong type for socket.
- # strace logger -u /dev/log "123"
- socket(PF_LOCAL, SOCK_STREAM, 0) = 3
- connect(3, {sa_family=AF_LOCAL, sun_path="/dev/log"}, 110) = -1 EPROTOTYPE (Protocol wrong type for socket)
复制代码 注意此处socket(PF_LOCAL, SOCK_STREAM, 0)
4、logger使用-d 参数,可以基于datagram(udp)方式,因此
- # logger -d -u /dev/log "123"
- 执行成功
- # strace logger -d -u /dev/log "123"
- socket(PF_LOCAL, SOCK_DGRAM, 0) = 3
- connect(3, {sa_family=AF_LOCAL, sun_path="/dev/log"}, 110) = 0
复制代码 注意此处socket(PF_LOCAL, SOCK_DGRAM, 0)
因此,当使用python、java也好,和套接字通信时,应该指明sock_dgram(udp)才能被 rsyslog imuxsock模块正确加载
|
|