【问题标题】:Mongo's stats not showing on muninMongo 的统计数据未显示在 munin 上
【发布时间】:2023-04-03 06:58:01
【问题描述】:

我正在尝试将 MongoDB 的插件添加到 munin。我按照这个来安装插件:

sudo apt-get install git munin-node
git clone git://github.com/erh/mongo-munin.git /home/ubuntu/mongo-munin
sudo ln -sf /home/ubuntu/mongo-munin/mongo_btree /etc/munin/plugins/mongo_btree
sudo ln -sf /home/ubuntu/mongo-munin/mongo_conn /etc/munin/plugins/mongo_conn
sudo ln -sf /home/ubuntu/mongo-munin/mongo_lock /etc/munin/plugins/mongo_lock
sudo ln -sf /home/ubuntu/mongo-munin/mongo_mem /etc/munin/plugins/mongo_mem
sudo ln -sf /home/ubuntu/mongo-munin/mongo_ops /etc/munin/plugins/mongo_ops
sudo service munin-node restart

(来自https://ivan-site.com/2013/06/monitoring-mongodb-in-munin-on-ubuntu-1304

但是没有任何东西发送到 munin 的服务器(仅适用于 Mongo,来自服务器的所有其他日期在 Munin 上都可以)。

然后我发现运行插件时出现错误:

# sudo -u munin python /usr/share/munin/plugins/mongo_ops
Traceback (most recent call last):
  File "/usr/share/munin/plugins/mongo_ops", line 56, in <module>
    doData()
  File "/usr/share/munin/plugins/mongo_ops", line 33, in doData
    ss = getServerStatus()
  File "/usr/share/munin/plugins/mongo_ops", line 28, in getServerStatus
    raw = urllib2.urlopen(req).read()
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 400, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 418, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1177, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>

我已经检查了这个问题:Munin Mongodb Plugin Not Showing. . .? 但问题不一样,我正在运行 pyhton 2,如上面的输出所示:

File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen

因此,插件处于活动状态:

# munin-node-configure | grep "mongo"
mongo_btree                | yes   |
mongo_conn                 | yes   |
mongo_lock                 | yes   |
mongo_mem                  | yes   |
mongo_ops                  | yes   |

这是 Mongo 的许可吗?也许我需要为 Munin 设置一个用户?你知道如何解决这个问题吗?

【问题讨论】:

  • 您是否将插件复制到/usr/share/munin/plugins 并从那里符号链接到/etc/munin/plugins
  • 是的,插件在/usr/share/munin/plugins/etc/munin/plugins 的simlink:mongo_btree -&gt; /usr/share/munin/plugins/mongo_btreemongo_conn -&gt; /usr/share/munin/plugins/mongo_connmongo_lock -&gt; /usr/share/munin/plugins/mongo_lockmongo_mem -&gt; /usr/share/munin/plugins/mongo_memmongo_ops -&gt; /usr/share/munin/plugins/mongo_ops
  • 我现在编辑了我的问题,插件处于活动状态,但 python 错误仍然存​​在。
  • 据我所知,不是mongo连接导致了问题。您不应该直接运行插件,但它们是通过 munin-node 调用的。启动那个,通过 telnet 从 localhost 连接到它,并显示 listcommand 的输出。
  • 感谢您的回答,但如果我运行 munin 的插件:$ munin-run mongo_conn 我会收到完全相同的错误消息。

标签: python mongodb monitoring munin


【解决方案1】:

好的,所以首先 - 这些插件是很久以前编写的,并且已经有几年没有更新了,所以它们现在可能工作也可能不工作。其次,他们使用 MongoDB 的HTTP console 来收集数据。因为现在defaults to disabled 它可能根本没有为您的实例运行(通常不建议用于生产系统 - 如果您确实运行它,您应该将其关闭)。

编辑: 经过一番检查,插件需要的不仅仅是控制台,它们需要启用REST interface,默认情况下肯定是关闭的,同样不推荐用于生产。

最后,插件被硬编码为连接到端口 28017(MongoDB 的默认端口 +1000),因此如果您自定义了运行 MongoDB 的端口,则需要手动调整每个插件以连接到正确的端口.

检查所有这些的最简单方法是将浏览器指向主机上的端口 28017 (http://hostame/28017) 或任何适当的端口,然后查看您是否可以访问控制台。

更新

我分叉了 Eliot 的插件,看看移植到 pymongo 有多么困难,消除了对 REST API 的依赖,我设法相当容易地做到了(还没有身份验证支持)。您可以在此处找到该版本,您链接的页面的相同安装和测试命令对我有用:

https://github.com/comerford/mongo-munin

事实证明,自编写插件以来对serverStatus() command 的更改意味着它们中的一些不再适用于当前版本的 MongoDB,因此我不得不返回并修复它们以适应 2.4及以后(这与新的 pymongo 依赖项一起列在自述文件中)。

【讨论】:

  • 谢谢 Adam,你知道 Mongo 的另一个 Munin 插件吗?这个旧的就是Mongo Doc 中建议的那个:(
  • 我重构(非常基本)fork 中的插件以使用 pymongo 而不是 REST API 并更新了答案。我将进一步研究它以添加身份验证和其他一些指标,然后向 Eliot 询问合并两者。
  • 非常感谢!很有用。我刚刚向您的 fork 发出了拉取请求,以添加基本设置指南和插件来监控文档数量。如果您认为这可能是一个很好的补充:)
【解决方案2】:

使用凭据时这似乎损坏或无法正常工作:

$ munin-run -d mongo_docs 
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Setting /rgid/ruid/ to /126/65534/
# Setting /egid/euid/ to /126 126/65534/
# Setting up environment
# Environment MONGO_DB_URI = mongodb://MY_USER:MY_PASSWORD@localhost:27017/admin
# About to run '/etc/munin/plugins/mongo_docs'
Traceback (most recent call last):
  File "/etc/munin/plugins/mongo_docs", line 53, in <module>
    doData()
  File "/etc/munin/plugins/mongo_docs", line 20, in doData
    ss = getServerStatus()
  File "/etc/munin/plugins/mongo_docs", line 14, in getServerStatus
    return c.admin.command('serverStatus', workingSet=True)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/database.py", line 733, in command
    codec_options, session=session, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/database.py", line 630, in _command
    client=self.__client)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/network.py", line 167, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 159, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: not authorized on admin to execute command { serverStatus: 1, workingSet: true, $db: "admin", $readPreference: { mode: "primaryPreferred" } }

但手动执行时效果很好:

$ mongo -u MY_USER admin --eval 'db.serverStatus().metrics.document'
MongoDB shell version v3.6.16
Enter password: 
connecting to: mongodb://127.0.0.1:27017/admin?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b2d5afa5-8bc9-4ed7-9a6e-a52e8d660876") }
MongoDB server version: 3.6.15
{
    "deleted" : NumberLong(1137),
    "inserted" : NumberLong(342220),
    "returned" : NumberLong(3429651),
    "updated" : NumberLong(1364343)
}
$

可能是pymongo 错误?

另外两个由于缺少键而失败:

$ munin-run mongo_btree
Traceback (most recent call last):
  File "/etc/munin/plugins/mongo_btree", line 59, in <module>
    doData()
  File "/etc/munin/plugins/mongo_btree", line 22, in doData
    for k,v in get().iteritems():
  File "/etc/munin/plugins/mongo_btree", line 19, in get
    return getServerStatus()["indexCounters"]
KeyError: 'indexCounters'

$  munin-run mongo_lock 
Traceback (most recent call last):
  File "/etc/munin/plugins/mongo_lock", line 52, in <module>
    doData()
  File "/etc/munin/plugins/mongo_lock", line 21, in doData
    print name + ".value " + str( 100 * (getServerStatus()["globalLock"]["lockTime"]/getServerStatus()["globalLock"]["totalTime"]) )
KeyError: 'lockTime'

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 2011-04-26
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多