美文网首页
一个 Ganglia 不可用问题的定位

一个 Ganglia 不可用问题的定位

作者: xudong1991 | 来源:发表于2021-09-05 11:19 被阅读0次

    问题背景

    在使用 Ganglia 的过程中,发现以下错误:ganglia 监控进程频繁报出下面的错误,导致现网几乎所有 NN 监控都不可用,严重影响问题定位:

    这个错误的意思是:

    1. ganglia 在解析 xml 消息时出错。
    2. 具体错误是 not well-formed (invalid token),即 xml 格式错误。

    需要尽快找到 ganglia 出错的原因,并修复。

    ganglia 日志打印

    ganglia 的两个主要进程(即 gmetad、gmond),在正常运行起来之后,都不会打印日志,这给问题定位带来了困难。可以通过 nohup 手动运行的方式,将进程的日志重定向到文件中查看,注意 -d 选项是日志级别,越高则打印得越详细:

    nohup /usr/sbin/gmond -d 10 > /data4/gmond_log.txt &
    nohup /usr/sbin/gmetad -d 1 > /data4/gmetad_log.txt &
    

    定位过程

    第一步,重新编译 ganglia 源码,加入 debug 逻辑

    从 ganglia 官网下载源码,阅读并分析,最后,修改 ganglia 的 gmetad 组件的 process_xml.c 源码(这就是报错的代码位置),重新编译,目标是:当 ganglia 发现非法的 xml 消息时,将该消息的内容整个 dump 到磁盘文件中,这样就能查到到底是哪一行的格式不对,效果类似下面这样:

    第二步,精确到 xml 消息中出错的行

    dump 得到错误的 xml 文件后,查看错误的行,发现确实是 xml 格式不对,且类似下面这样,注意:tdw_hongboliu 前面是不应该出现这个多余的双引号的,就是这个双引号导致 xml 格式非法

    下面这种才是正确的 xml 格式(用户名前面没有多余的双引号):

    第三步. 找到原因

    从 dump 的 xml 文件中,找到发送这个错误消息的 NameNode,查看审计日志,最终发现原因是:这个 ugi 本身就不合法,它竟然包含了一个双引号,如下:

    下面这种才是合法的 ugi:

    四. 根本原因

    问题的根本原因是用户错误的使用了一个内部配置项,并在指定 ugi 时,错误的戴上了双引号,导致:

    1. NameNode 的审计日志里,打印的 ugi 不对,打成了 ugi="xxx 这种错误的形式。
    2. ganglia 收集 NameNode 的监控信息时,将数据导出为 xml 格式,这个多余的双引号会导致整个 xml 文件的格式非法,最终导致 ganglia 异常。

    五. 解决方案

    1. NameNode 自动将用户 ugi userName 中的单引号、双引号全部替换为空,可以解决问题。
    2. 更加建议的方案是,NameNode 在向 ganglia 上报监控项时,最好过滤掉 Caller* 这类监控项,这些监控项的个数可能会非常多(达到数千个),但又没有特别大的用途。

    相关文章

      网友评论

          本文标题:一个 Ganglia 不可用问题的定位

          本文链接:https://www.haomeiwen.com/subject/icwxwltx.html