开源grafana可视化监控+influxdb_DBASpace的博客-程序员信息网

技术标签: grafana  开源grafana可视化监控+influ  开源监控  DB  

了解数据库的TPS、QPS是作为一个运维DBA是非常必要的,那什么是TPS、QPS呢,简单的理解是:

QPS:每秒查询数,即对数据库每秒的DML的操作数

TPS:每秒事物处理,即对数据库每秒DDL操作数

通过了解他们,可以掌握一个实例的基本工作运行状态

如何对于对他们进行页面可视化,是DBA的一个装逼神器,本章主要介绍通过时序数据库(influxdb)+grafana+简单的python代码实现

时时监控它们,什么是时序数据库可以在其他章节了解,这里不做过多介绍

Let's go.....3个包的下载

http://down.51cto.com/data/2287378

http://down.51cto.com/data/2287380

http://down.51cto.com/data/2287379

1、直接YUM安装influxdb,安装后生成默认的配置文件/etc/influxdb/influxdb.conf 暂不修改

2、ON/OF服务

  service influxdb start/stop

3、influxdb数据库网页管理控制台(默认值),这个只是方便某些操作,具体操作还是到终端输入命令influx,此通过http://IP:8083 通过页面方式登录添加

一个用户名和密码,为grafana连接INFLUXDB使用,用户名密码自己定义

wKioL1hKvFqipzqHAADpKCXGSYI319.png-wh_50

选中create user 再query 就会有CREATE USER "根据实际输入用户名" WITH PASSWORD '输入你的密码'

  [[email protected] ~]# influx

Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.

Connected to http://localhost:8086 version 0.13.0

InfluxDB shell version: 0.13.0

这个就可以登录,是不是很熟悉的,具体操作看博客的其他章节。

注意:数据库url(默认值):http://localhost:8086 ##这个在后面的grafana会被用到,数据传输使用

4、YUM安装GRAFANA包

安装后on/off服务:/etc/init.d/grafana-server start/stop

5、GRAFANA的页面登录,默认使用3000端口:

192.168.1.114:3000 登录名和密码默认是admin

6、通过Python代码实现对MySQL和influxdb的同时操作

#注意:python 操作MySQL需要安装python-mysql的驱动包,自己百度下载个,一般在解压后目录里执行1、python setup.py build 2、python setup.py install 

       python 操作INFLUXDB也需要python-influxdb            

$ pip install influxdb
$ pip install --upgrade influxdb
$ pip uninstall influxdb  ##注意如果没有安装PIP自己百度安装吧。

7、python 脚本:

#!/usr/bin/env python

#_*_ coding:utf-8 _*_

import MySQLdb

import datetime

import json

#qps

import time

from influxdb import InfluxDBClient

#import influxdb 

try:

    conn=MySQLdb.connect(host="192.168.15.104",user="dlan",passwd="root123",port=3306)

    client=InfluxDBClient(host='192.168.15.104', port=8086, username='root', password='root', database='telegraf')

    cur=conn.cursor()

    while True:

        sql = '''show global status where variable_name in('com_select','com_insert','com_delete','com_update','com_insert_select','uptime')'''

        cur.execute(sql)

        aa = cur.fetchall()

        aa=list(aa)

        delete = int(aa[0][1])

        insert1 = int(aa[1][1])

        insert2 = int(aa[2][1])

        select = int(aa[3][1])

        update = int(aa[4][1])

        uptime1 = int(aa[5][1])

        qps1=delete+insert1+insert2+select+update

        time.sleep(1)

        while True:

            sql = '''show global status where variable_name in('com_select','com_insert','com_delete','com_update','com_insert_select','uptime')'''

            cur.execute(sql)

            aa = cur.fetchall()

            aa = list(aa)

            delete_2 = int(aa[0][1])

            insert_2 = int(aa[1][1])

            insert2_2 = int(aa[2][1])

            select_2 = int(aa[3][1])

            update_2 = int(aa[4][1])

            uptime2_2 = int(aa[5][1])

            qps2 = delete_2 + insert_2 + insert2_2 + select_2 + update_2

            commit=qps2 -qps1

            uptime=uptime2_2-uptime1

   aa =(commit/uptime)

   json_body = [

        {

            "measurement":'my_tps',

            "tags":{

                "host": "mycat"

            },

            "fields":{

"influxdb":"qps1",

                "qps":aa

            }

        }

    ]


            #aa ="query_per_sec  host=mycat,role=db,influxdb=qps qps=%d "% (commit/uptime)

            #aa =(commit/uptime)

    #print aa,json_body


   client.write_points(json_body) 

            break

except MySQLdb.Error,e:

    print "MySQL error%d:%s"%(e.args[0],e.args[1])

##脚本需要注意4个地方:1、连接数据库的信息,是被监控端的

                       2、MySQL的QPS统计收集的存储的数据库

                       3、收集的数据把字符串转成JSON格式

                    

 json_body = [

        {

            "measurement":'my_tps',   ###注意这个红色位置不能用双引号,估计是PYTHON的问题,JAVA用双引号没问题,是个坑哦~~~!这个可以设置你喜欢的,其他不要修改,直接使用

            "tags":{

                "host": "mycat"

            },

            "fields":{

                "qps":aa

            }

        }

    ]

                       4、需要在influxdb添加一个数据库,例子名字叫:test_influxdb (自定定义), client=InfluxDBClient(host='192.168.15.104', port=8086, username='root', password='root', database='telegraf'),可根据实际定义,后面的GRAFANA会用到这个名字

强烈建议对数据库的操作通过终端来搞:

[[email protected] ~]# influx

Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.

Connected to http://localhost:8086 version 0.13.0

InfluxDB shell version: 0.13.0

> create database test_influxdb

> show databases;

name: databases

---------------

name

telegraf

_internal

mytab

mydb

stress

test_influxdb

8、在grafana配置收集来的数据信息:

      1、添加数据源与配置,点击grafana的图表的下拉单点data sources---》add data source

      2、配置数据源信息

wKiom1hKxMzBp18UAAELp-fNRD8798.png

     3、datshboards->news->左上小绿格->add panel->graph

wKiom1hKxZbjX76lAADP7jWJmn8978.png-wh_50

    4、选择metrics配置如下:

wKiom1hKxpnQa-PzAACwIdjGL_g174.png

解释:1、为刚才创建的数据源名字

      2、添加个 query

      3、展开query

      4、这里根据前面的json格式 "measurement":'my_tps' 这个my_tps,可以理解为时序数据库的表。

      5、选择HOST

      6、选择JSON的tags标签的值mycat

"tags":{

                "host": "mycat"

      7、为JSON的"qps":aa的qsp,相当于字段,为field

      8、为统计方式,看其INFLUXDB的基础介绍

      9、统计时常

      10、为曲线的标志,可以在一个图里添加多个query ,这样每个名字对应不同的颜色

最后点击保存按钮,在最上方有个图标,保存后选择有4个方块里的刚才定义的general的名字


最后效果图:

wKioL1hKyWjD55gxAADBrrEudhs918.png

##这里多提点:通过这样的定义,可以收集业务上一些常规的数据,可以在线的时时统计,比如在游戏里的DAU\PCU\ACU....网站的PV 等等都可以数据收集可视化展示。。。。。完毕
   这个PYTHON脚本可以优化,INFLUXDB可以批量插入数据,可靠消息次是2-3W写入是没问题的。

PYTHON脚本启动 python mysql_qps.py & 不加后台符会一直卡着,

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36135773/article/details/78789402

智能推荐

软件测试的几个误区_Test-wang的博客-程序员信息网_软件不间断运行测试

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识,这将会进一步的影响软件测试活动的开展,并且阻碍软件测试质量的提高。下面简单列举了几种有代表性的对软件测试的认识误区,并作了相应的分析和解释。误区1:软件开发完成后才进行测试  在传统

你可能是个假程序员,不信测一下_深圳IT好职汇的博客-程序员信息网

程序员,我叫你一声你敢答应吗?孙悟空有真假,现在程序员也有真假。伪程序员冒充真程序员四处装逼。如何辨别“伪大神”程序员,不是就事看他是不是脱发、格子衫、粗黑框眼镜、黑色双肩包吗?

尚硅谷谷粒学院学习笔记4--前端知识总结,讲师列表前端实现_向天再借500年的博客-程序员信息网_尚硅谷vue-admin-template-master

es6和vue基础知识点es6语法新特性博客链接vue基础知识点博客链接axios博客链接npm,webpack博客链接vue-element-admin而vue-element-admin是基于element-ui 的一套后台管理系统集成方案。功能:https://panjiachen.github.io/vue-element-admin-site/zh/guide/#功能GitHub地址:https://github.com/PanJiaChen/vue-element-admin项

【ros_problems】编译velodyne_poiontcloud提示yaml-cpp出错解决办法_Eba_的博客-程序员信息网

【ros_problems】编译velodyne_poiontcloud提示yaml-cpp出错解决办法最近在测试Velodyne,从GitHub上源码安装最新的velodyne_poiontcloud包,它依赖yaml-cpp,从GitHub上可以找到,下载后用Cmake编译安装。编译velodyne_poiontcloud时发生错误,提示如下: /usr/bin/ld: /us

java:Applet布局问题,如何添加按钮,标签问题总结_萧湘易水寒的博客-程序员信息网

今天学习了applet布局问题:按钮、标签是怎样加入到applet程序(容器)当中去的呢?需要用到布局容器管理器(LayoutManager):它用于协助容器确定加入的组件(按钮等)应该放置的位置awt提供了4中常用的布局容器管理器>>FlowLayout>>BorderLayout>>GridLayout>>CardLayoutapplet默认使用FlowLayout

flutter的RaisedButton按钮的onPressed事件的写法_安卓AndroidQ的博客-程序员信息网_onpressed

onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (context) => WebSocketRoute())),),onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => WebSocketRoute()));),lamuda写法逗号结尾大括号写...

随便推点

MyEclipse创建SSH项目(Java web由maven管理)_王小雷-多面手的博客-程序员信息网

JavaEE后台开发,MyEclipse创建SSH项目,MyEclipse创建Java web 由maven管理的SSH项目。1、创建SSH项目1、创建web工程 2、勾选maven支持 3、下一步 4、两个都勾选 5、选择maven 6、取消勾选,不选择依赖,因为pom.xml会引入所有需要的依赖 7、创建初步完成 8、完善pom.xml文件,引入依赖,源码在最后2、创建测试类9、

深度学习ACGan学习笔记,keras版_姚贤贤的博客-程序员信息网_keras acgan分类

一.ACGAN(Auxiliary Classifier GAN)依旧有Generator,Discriminator,可使用MNSIT训练生成图片。和DCGAN的不同: 1.增加了class类别标签参与训练,可以生成指定类别的图片代码引用的《Web安全之强化学习与GAN》,位置: https://github.com/duoergun0729/3book/code/keras-a...

matlab linux脚本文件,【matlab】【linux】ssh 远程运行matlab脚本文件的方法:nohup_赵小王的博客-程序员信息网

form:http://hi.baidu.com/yilinghl/item/f7f395d10555ce866dce3fd0ssh 远程运行matlab脚本文件的方法:nohup服务器安装matlab软件。ssh能正常运行。实现功能:1. 字符环境下运行matlab.2.字符环境下运行matlab脚本文件,脚本文件无图像的屏幕输出。3.脚本文件需长时间运行,运行结果输出到文件。matlab的标准...

动态路由协议:EIGRP_bashui2708的博客-程序员信息网

动态路由协议:EIGRPEIGRP--增强型的内部网关协议,针对IGRP进行增强,是一个距离矢量协议,直接工作在IP层上面,协议号是88。思科私有的协议。EIGRP的特点:①是一个高级距离矢量协议。高级体现在其运行的算法上,运行DUAL算法,使得EIGRP同时具备距离矢量协议和链路状态协议的部分特点。②快速收敛:收敛:设备从开机到达正常运行(开始转发数据包)的过程或者从网络发生变化到达恢复正常...

【Unity开发小技巧】iOS APP下载安装时,如果出现此时无法下载安装APP的字样时,一些解决思路_幻世界的博客-程序员信息网_ios无法安装app

在iosAPP下载安装时,如果出现此时无法下载安装APP的字样时,可能是苹果系统进行了支持更新,并需要我们确认条约。至于如何判断是否是苹果系统进行了更改,只需要我们进入开发者账号,进入我的账户(Account)如出现以下视图,则说明苹果系统进行了更新。此时只需要点击Review Agreement 按钮,进入查看其具体条款,勾选服从其条约,然后单击同意即可。然后可以再重新将APP打包上传到公司网站,然后即可进行下载安装操作。如果不是手机版本最新版本,可以尝试更新到最新版本试一下。...

Jrebel热部署插件的安装与使用_coder chen的博客-程序员信息网

安装与基本的配置:https://blog.csdn.net/lianghecai52171314/article/details/105637251https://www.jianshu.com/p/52e698c57131使用:使用debug模式运行,之后每次修改代码Build-reCompile就行,或者ctrl+shift+F9

推荐文章

热门文章

相关标签