通过修改Zabbix官方redis模板监控微软云Azure上多台(2)

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官方redis模板监控微软云Azure上多台

更多Zabbix相关教程集合: 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4eb13dcb01427a86d30a41c1b039d6d6.html