resp = json.loads(resp_body)
# For debug
# print(resp)
if resp.get('response') == 'success':
result = True
else:
print('Got error from Zabbix: %s' % resp)
result = False
except:
print('Error while sending data to Zabbix')
result = False
finally:
return result
def _recv_all(sock, count):
buf = ''
while len(buf) < count:
chunk = sock.recv(count - len(buf))
if not chunk:
return buf
buf += chunk
return buf
def main():
if mysql_hostname and args.metric:
client = pymysql.connect(host=mysql_hostname, user=args.mysql_user, password=args.mysql_pass)
cursor = client.cursor()
cursor.execute("show status")
data = cursor.fetchall()
dict_local = {}
for k, v in data:
dict_local[k] = v
cursor.execute("select SCHEMA_NAME from information_schema.schemata ")
db = cursor.fetchall()
dblist = []
for i in db:
dblist.append(i[0])
if args.metric:
def list_db():
if args.db in dblist:
print(dblist)
else:
print('database_detect')
def default():
if args.metric in dict_local.keys():
print(dict_local[args.metric])
{
'list_db': list_db
}.get(args.metric, default)()
else:
print('Not selected metric')
else:
client = pymysql.connect(host=mysql_hostname, user=args.mysql_user, password=args.mysql_pass)
cursor = client.cursor()
cursor.execute("show status")
data = cursor.fetchall()
a = []
for k, v in data:
k = k.lower()
v = value_format(v)
a.append(Metric(mysql_hostname, ('azuremysql[%s]' % k), v))
# cursor.execute("show processlist;")
cursor.execute("select count(*) from information_schema.processlist;")
processdata = cursor.fetchall()
# process_count = len(processdata)
process_count = processdata[0][0]
a.append(Metric(mysql_hostname, 'azuremysql[process_count]', process_count))
cursor.execute(
"select table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema;")
spacedata = cursor.fetchall()
totalspace = 0
for k, v in spacedata:
a.append(Metric(mysql_hostname, ('azuremysql[%s]' % k), float(v)))
totalspace += float(v)
a.append(Metric(mysql_hostname, 'azuremysql[totalspace]', totalspace))
# Send packet to zabbix
send_to_zabbix(a, zabbix_host, zabbix_port)
# for i in a:
# print(i)
cursor.close()
client.close()
if __name__ == '__main__':
main()
zbx_mysql_stats.py可以到Linux公社资源站下载:
------------------------------------------分割线------------------------------------------
具体下载目录在 /2017年资料/10月/10日/通过修改Zabbix官方redis模板监控微软云Azure上多台MySQL实例/
------------------------------------------分割线------------------------------------------
4> 测试脚本是否可以正常连接到微软云上MySQL并获取参数:
/etc/zabbix/script/mysql/zbx_mysql_status.py -u mysqluser -a mysqlpasswd test.mysqldb.chinacloudapi.cn list_db
5> 添加crontab,定期执行脚本发送数据给zabbix,注意若密码中含有%需要用 \ 进行转义 (\%)。
若要监控多台MySQL,则添加多个crontab:
*/1 * * * * /etc/zabbix/script/mysql/zbx_mysql_status.py -u mysqluser -a mysqlpasswd test.mysqldb.chinacloudapi.cn
6> 创建MySQL监控模板,注意监控项类型应选择"zabbix采集器",若使用的脚本,键值为"azuremysql[xxxxxxx]",否则请使用自己脚本定义的键值。
附件是我创建的一个模板,添加了一些监控项,并不完整,可以在此基础上再添加需要的监控项。
zbx_Azure_MySQL_template.xml (下载见上面的Linux公社资源站)
7> 使用MySQL hostname创建主机,链接模板,即可实现zabbix监控。
更多Zabbix相关教程集合: