分析数据库连接使用情况
connmon的Python项目详细描述
一个类似于“top”的工具,可以监视跨多个进程的数据库连接 和服务器。最初的用例是跟踪大量数据 但是,openstack使用的python进程和数据库连接 系统可以与任何sqlalchemy应用程序一起工作。
设置
首先,用pip安装connmon
connmon有一个默认位于/etc/connmon.cfg中的配置文件。 一个简单的文件看起来像:
# sample config, listen on 0.0.0.0:5800 and clients # will connect to 192.168.1.205:5800 [connmon_service_default] name: default nodes: node1 hostname=192.168.1.205:5800
此文件由connmon守护进程以及所有客户端连接查阅 以便确定守护进程正在运行的位置。
如果只在一台主机上测试,则可以不使用配置文件使用connmon; 如果文件不存在,则默认配置如下 使用:
# default config if no /etc/connmon.cfg and no # --config <file> option is passed [connmon_service_default] name: default nodes: node1 hostname=localhost:5800 bind=0.0.0.0
然后,可以启动connmon守护进程:
connmond
这个守护进程监听客户机,这些客户机将向它提供关于 他们正在使用的连接。它将此状态存储在内存中,然后可以报告 在上面。如果守护进程已停止或对客户端不可用,则每个客户端 在本地跟踪其状态,并将继续尝试重新连接 给守护者。当它这样做时,它将使守护进程与它的 连接状态
为了配置stats客户机,connmon为SQLAlchemy提供了一个插件 引擎。使插件能够在对话的应用程序中使用 对于数据库,请使用如下URL:
mysql+pymysql_connmon://root:sa@127.0.0.1/neutron?charset=utf8&connmon_service=default
上面的url格式在sqlalchemy 1.1中会变得简单一些 添加一些更可移植的方法,将“插件”与数据库url捆绑在一起。
最后,我们可以使用控制台查看当前连接:
connmon
然后启动使用数据库的应用程序。 每个有配置的人都将建立一个TCP 在“192.168.1.205:5800”连接到控制台。
请参见包含的screenshot.png。
无配置连接
url还可以指定特定的主机/端口:
mysql+pymysql_connmon://root:sa@127.0.0.1/neutron?charset=utf8&connmon_addr=192.168.1.205:5800
配置ha集群
可以将多个节点配置为每次运行connmon listen,以便 它们形成一个集群;在每个节点上启动一个服务器 connmond --node <nodename>:
[connmon_service_default] name: default nodes: node1 hostname=192.168.1.205:5800 node2 hostname=192.168.1.206:5800 node3 hostname=192.168.1.207:5800
在上述模型中,所有节点相互联系并共享所有事件。连接 没有节点名的“默认”服务名将导致客户端连接 到云中的一个随机节点。它将尝试每个节点,直到找到一个 有联系。
与devstack一起使用
下面是将connmon添加到devstack设置中的魔法咒语。弗斯特 全局安装connmon。然后在local.conf中(注意双斜杠转义):
[[post-config|$NOVA_CONF]] [database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/nova?charset=utf8\\&connmon_service=default [api_database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/nova_api?charset=utf8\\&connmon_service=default [[post-config|$NEUTRON_CONF]] [database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/neutron?charset=utf8\\&connmon_service=default [[post-config|$KEYSTONE_CONF]] [database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/keystone?charset=utf8\\&connmon_service=default [[post-config|$CINDER_CONF]] [database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/cinder?charset=utf8\\&connmon_service=default [[post-config|$GLANCE_API_CONF]] [database] connection = mysql+pymysql_connmon://root:sa@127.0.0.1/glance?charset=utf8\\&connmon_service=default