调用 /render 时石墨错误“'ParseResults' 对象没有属性 'raw'”

graphite error "'ParseResults' object has no attribute 'raw'" when call /render

我用 pip 方法安装了 graphite ( whisper - carbon - graphite-web )。

我将它连接到我的 puppetserver 实例(需要 graphite 来获取 jrubies 信息)。

但是当我尝试将数据从 Graphite 导出到我的 grafana 时出现错误:AttributeError: ParseResults object has no attribute raw 当我添加数据源时。

在 graphite-web 日志文件中我有:

2021-11-08,16:11:04.396 :: Exception encountered in <POST http://localhost:9091/render>
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/graphite/webapp/graphite/errors.py", line 101, in new_f
    return f(*args, **kwargs)
  File "/opt/graphite/webapp/graphite/render/views.py", line 130, in renderView
    data.extend(evaluateTarget(requestContext, targets))
  File "/opt/graphite/webapp/graphite/render/evaluator.py", line 18, in evaluateTarget
    pathExpressions = extractPathExpressions(requestContext, targets)
  File "/opt/graphite/webapp/graphite/render/evaluator.py", line 205, in extractPathExpressions
    target = grammar.parseString(target)
  File "/opt/graphite/webapp/graphite/render/grammar.py", line 12, in parseString
    return _grammar.parseString(instring)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 1097, in parse_string
    loc, tokens = self._parse(instring, 0)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 5094, in parseImpl
    return super().parseImpl(instring, loc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 4265, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 5094, in parseImpl
    return super().parseImpl(instring, loc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 4265, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 4265, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
 File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 3781, in parseImpl
    instring, loc, doActions, callPreParse=False
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 4017, in parseImpl
    instring, loc, doActions,
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 824, in _parseNoCache
    tokens = fn(instring, tokensStart, retTokens)
  File "/usr/local/lib/python3.6/site-packages/pyparsing/core.py", line 282, in wrapper
    ret = func(*args[limit:])
  File "/opt/graphite/webapp/graphite/render/grammar_unsafe.py", line 83, in setRaw
    toks[0].raw = s[toks[0].start:toks[0].end]
AttributeError: 'ParseResults' object has no attribute 'raw'

有没有人可以帮助我理解为什么会出现此错误以及如何解决? 提前致谢

+1 今天在新的 Graphite 安装上遇到了完全相同的错误......否则探索指标和检索数据似乎工作正常。

2021-11-10,18:31:03.882 :: Exception encountered in <POST https://10.224.115.43:3001/render>
Traceback (most recent call last):
  File "/opt/graphite/lib/python3.9/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/graphite/webapp/graphite/errors.py", line 101, in new_f
    return f(*args, **kwargs)
  File "/opt/graphite/webapp/graphite/render/views.py", line 129, in renderView
    data.extend(evaluateTarget(requestContext, targets))
  File "/opt/graphite/webapp/graphite/render/evaluator.py", line 18, in evaluateTarget
    pathExpressions = extractPathExpressions(requestContext, targets)
  File "/opt/graphite/webapp/graphite/render/evaluator.py", line 205, in extractPathExpressions
    target = grammar.parseString(target)
  File "/opt/graphite/webapp/graphite/render/grammar.py", line 12, in parseString
    return _grammar.parseString(instring)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 1097, in parse_string
    loc, tokens = self._parse(instring, 0)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 5098, in parseImpl
    return super().parseImpl(instring, loc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 4267, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 5098, in parseImpl
    return super().parseImpl(instring, loc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 4267, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 4267, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 3780, in parseImpl
    loc, resultlist = self.exprs[0]._parse(
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 787, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 4016, in parseImpl
    return e._parse(
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 824, in _parseNoCache
    tokens = fn(instring, tokensStart, retTokens)
  File "/opt/graphite/lib/python3.9/site-packages/pyparsing/core.py", line 282, in wrapper
    ret = func(*args[limit:])
  File "/opt/graphite/webapp/graphite/render/grammar_unsafe.py", line 83, in setRaw
    toks[0].raw = s[toks[0].start:toks[0].end]
AttributeError: 'ParseResults' object has no attribute 'raw'

更新:重新安装 pyparsing 版本 2.4.7(我在另一个工作环境中使用的版本)而不是 3.0.4(出现错误的版本)似乎可以解决问题。

我今天也遇到了。 Graphite 可以很好地显示标准数据,但我无法 运行 任何针对数据的函数(averageSeries、sumSeries 等)。这些请求都会在浏览器中导致错误 500,并具有您在上面发布的相同堆栈。 pyparsing==3.0.4 的 release notes 将此描述为预期行为:

result = Word(alphas).parseString("abc") result.xyz = 100

now raises this Python exception:

AttributeError: 'ParseResults' object has no attribute 'xyz'

To add new attribute values to ParseResults object in 3.0.0 and later, you must assign them using indexed notation:

result["xyz"] = 100

如果您检查堆栈中引用的行(grammar_unsafe.py 第 83 行),您会发现 Graphite 确实试图在不使用索引符号的情况下分配 'raw' 属性。我试图用不同的结果编辑这一行。一些图表会呈现,但 apache 重启还有其他问题,因此简单地更新设置 toks[0].raw 中使用的符号只会使问题复杂化。我已经记录了 graphite-web 的问题,在此期间,按照推荐答案中的建议将我的 pyparsing 降级为 2.4.7。