分析数据库连接使用情况

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用EntityManager有没有更有效的习惯用法?   Android上的java Google应用程序引擎(GAE)响应代码和cookie   如何在Java中创建单元测试?   java从DB获取特定列的最新行   java替换所有悬空元字符   java使用Hibernate删除SQL表中的数据   swing显示JComponent对象Java   java在确认内容类型后如何将URL保存到文件?   javascript如何从段落中选择大量单词?(硒)   java在Linux上使用BundleEnableTiveCode不起作用   java使用日志似然性来比较不同的mallet主题模型?   java无法在Tomcat7上运行Spring Boot 2.0:“由于缺少ServletWebServerFactory bean,无法启动ServletWebServerApplicationContext。”   java有办法显式引用非静态内部类实例吗?   java如何使用Spring的NamedParameterJdbcTemplate在MySQL数据库中创建和删除表?