logger无法发送消息的问题排查

背景

logger是一个在Linux和Unix操作系统中使用的命令行工具,可以直接向系本地syslog文件或远程Syslog服务器发送消息。logger为写日志提供了不同的选项,如设置优先级、指定远程系统或指定Syslog端口。

在调试rsyslog收发功能的时候,突然出现logger无法向本地及远程任何地方发送消息的情况,在对该问题的排查定位中使用的手段和思路,对于深入调查linux上同类问题有一定的参考价值。

问题描述

常规使用,logger无法给本地系统日志和远端发送消息,无显式报错,而在这之前能够正常工作。

具体复现如下:

logger -p local1.info "my name is Hanmeimei"
# -p, --priority priority_level,指定输入消息的优先级
# 在执行命令后,本地的syslog收不到信息;

排查与定位

  1. 首先排除rsyslog升级、配置等原因,因为之前一直正常运行,没人修改这些配置。

  2. 如果重启该机器,可以立即解决这个问题,logger -p local1.info "msg"可以正常使用。重启机器是一个重操作,代价很大,一般不作首要处理方案,需要进一步定位原因,减轻影响。

  3. 我现在有3台机器都出现这个问题,我重启了2台,留下一台做对比研究使用(后分别称作对照机与问题机)。

  4. 因为logger命令本身无法直接查看,没有找到日志,暂无法追踪,要想其他办法去查——了解到可以使用strace指令跟踪logger命令的调用栈情况,如下:

  5. 执行strace -f logger -p local1.info "123"

    strace介绍:
    顾名思义,strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。strace底层使用内核的ptrace特性来实现其功能。
    strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。

    这里,-f 表示跟踪由fork调用所产生的子进程,后面跟的是原始命令。

  6. 分别获取到对照机与问题机的上述指令的输出。使用Compare或者IDEA进行内容的对比:

image.png
  1. 左侧是对照机正常的输出,右侧是有问题的。通过对比,两个文件内容只有一处实质不同,即正常输出比问题机多了一行内容②,而这一行就是实际要发送的内容(“123”)。

  2. 问题发生在①处,正常的这里返回了0,异常的这里返回-1,(报错...-1 ECONNREFUSED (Connection refused))——因为连接被拒绝,①处门都没打开,当然也就没有后面发送消息的②了。

    image.png

  1. 综上,关键信息出现——指向了/dev/log,错误为:连接被拒绝!因此没有成功发出消息。我们顺藤摸瓜:这个/dev/log是个特殊文件,它的属性是srw-rw-rw-s代表Unix domain socket,也称为网络套接字
image.png
  1. 继续追溯到/dev/logsystemd-journald.socket有关系。

    systemd-journald的补充:

    systemd-journald 是一个收集并存储各类日志数据的系统服务。如果在启动期间存在 /var/log/journal/ 目录,那么日志将会被持久存储在此目录中, 否则将会临时存储在 /run/log/journal/ 目录中(关机即丢失)。

    以 ".socket" 为后缀的单元文件, 封装了一个用于进程间通信的套接字(socket)或管道(FIFO), 以支持基于套接字的启动。

    systemd-journald将监听以下这些套接字和路径,在文件系统中可见:

    /dev/kmsg, /dev/log, /run/systemd/journal/dev-log, /run/systemd/journal/socket, /run/systemd/journal/stdout

解决方案

使用systemctl restart systemd-journald.socket重启端口(并不是systemd-journald.service),仅此一步就可以解决问题,logger能够成功发送消息了。

注意:没有重新启动rsyslogd。

小结

本文通过strace来跟踪比较两个执行路径,直接获取到了关键报错,再据此线索解决问题。此外,开启rsyslogdebug级别日志也许能看到更详细的信息,但在可能的情况下strace更利于发现问题的真相。

在定位到/dev/log之后问题被解决,但解决方案与socket“拒绝连接”的原因之间尚有链条缺失,由于测试环境已经销毁,无法追踪了。有其他老师提到可能是system启动的systemd-journaldrsyslog sock有冲突,导致rsyslog套接字无法正常发送数据,但问题的概率特征与本文有出入。另有提及配置修改导致不记录日志的现象,将/etc/systemd/journald.conf中的配置ForwardToSyslog,修改为yes即可(针对的是systemd-journald.service)。

对于/dev/log丢失的情况,论坛提到使用手动链接也可以:ln -s /run/systemd/journal/dev-log /dev/log

参考

如何在systemd + rsyslog主机中还原/ dev / log?

Ubuntu18.04系统rsyslog不记录日志问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容