Sonunda vazgeçtim ve kendim hata ayıklamaya gittim.
@ SelivanovPavel'in cevabına dayanarak hata ayıklamayı açtım zencommandve bekledim ve yeterince eminim ZenPack başarısız oluyordu.
2012-08-16 18:16:14,092 INFO zen.zencommand: Datasource MySQL/mysql command: /opt/zenoss/ZenPacks/ZenPacks.zenoss.MySqlMonitor-2.2.0-py2.7.egg/ZenPacks/zenoss/MySqlMonitor/libexec/check_mysql_stats.py -H 2001:db8:81:2c::2 -p 3306 -u zenoss -w 'password' -g
2012-08-16 18:16:14,100 DEBUG zen.zencommand: Running /opt/zenoss/ZenPacks/ZenPacks.zenoss.MySqlMonitor-2.2.0-py2.7.egg/ZenPacks/zenoss/MySqlMonitor/libexec/check_mysql_stats.py
2012-08-16 18:16:14,544 DEBUG zen.zencommand: Datasource: mysql Received exit code: 1 Output: 'MySQL Error: (2003, "Can\'t connect to MySQL server on \'2001:db8:81:2c::2\' (-9)")\n'
2012-08-16 18:16:14,545 DEBUG zen.zencommand: Process MySQL/mysql stopped (1), 0.43 seconds elapsed
Bu yüzden ZenPack'e girdim ve (görünüşte eski bir sürümü) ' pymysqlden ithal ettiğini öğrendim /opt/zenoss/lib/python.
Python komut satırından test yaparken, istisnanın nereden atıldığını keşfettim:
>>> sys.path.insert(0, "/opt/zenoss/lib/python");
>>> import pymysql
>>> pymysql.install_as_MySQLdb()
>>> import MySQLdb
>>> self.conn = MySQLdb.connect(host="2001:db8:81:2c::2", port=3306, db='', user='zenoss', passwd='password')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/zenoss/lib/python/pymysql/__init__.py", line 93, in Connect
return Connection(*args, **kwargs)
File "/opt/zenoss/lib/python/pymysql/connections.py", line 504, in __init__
self._connect()
File "/opt/zenoss/lib/python/pymysql/connections.py", line 673, in _connect
raise OperationalError(2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e.args[0]))
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '2001:db8:81:2c::2' (-9)")
Ve connections.pyo genel çevrede teftiş ederken, korkularıma bir AF_INETsoket açmaya çalıştığını keşfettim ve bir soket açmak için hiçbir yerde kod yoktu AF_INET6. Boom, anında başarısız.
Mevcut sürümü pymysqlde bu eksikliği içeriyor gibi görünüyor; hiçbir IPv6 desteği yok.
Yani "cevap", düzeltmem gerekecek pymysql. Öğleden sonramı nasıl harcamak istediğimi değil.
Kötü bir hackery bu bit işler (Python 2.6 ihtiyacınız olsa da) alır. 660 numaralı hattı açın /opt/zenoss/lib/python/pymysql/connections.pyve AF_INETardından şu değişikliği yapın:
if DEBUG: print 'connected using unix_socket'
else:
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- t = sock.gettimeout()
- sock.settimeout(self.connect_timeout)
- sock.connect((self.host, self.port))
- sock.settimeout(t)
+ sock = socket.create_connection((self.host, self.port), self.connect_timeout)
self.host_info = "socket %s:%d" % (self.host, self.port)
if DEBUG: print 'connected using socket'
O zamandan beri bu , yukarı akım pymysql'de düzeltilmiştir ve gelecekteki bir sürümde mevcut olmalıdır.