设为首页 收藏本站
查看: 1615|回复: 0

[经验分享] influxdb+grafana业务数据可视化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-12 11:24:51 | 显示全部楼层 |阅读模式
了解数据库的TPS、QPS是作为一个运维DBA是非常必要的,那什么是TPS、QPS呢,简单的理解是:
QPS:每秒查询数,即对数据库每秒的DML的操作数
TPS:每秒事物处理,即对数据库每秒DDL操作数
通过了解他们,可以掌握一个实例的基本工作运行状态
如何对于对他们进行页面可视化,是DBA的一个装逼神器,本章主要介绍通过时序数据库(influxdb)+grafana+简单的python代码实现
时时监控它们,什么是时序数据库可以在其他章节了解,这里不做过多介绍
Let's go.....
1、直接YUM安装influxdb,安装后生成默认的配置文件/etc/influxdb/influxdb.conf 暂不修改
2、ON/OF服务
  service influxdb start/stop
3、influxdb数据库网页管理控制台(默认值),这个只是方便某些操作,具体操作还是到终端输入命令influx,此通过http://IP:8083 通过页面方式登录添加
一个用户名和密码,为grafana连接INFLUXDB使用,用户名密码自己定义
QQ截图20161212112457.jpg
选中create user 再query 就会有CREATE USER "根据实际输入用户名" WITH PASSWORD '输入你的密码'
  [iyunv@mycat ~]# 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会用到这个名字
强烈建议对数据库的操作通过终端来搞:
[iyunv@mycat ~]# 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.jpg
     3、datshboards->news->左上小绿格->add panel->graph
QQ截图20161212112507.jpg
    4、选择metrics配置如下:
wKiom1hKxpnQa-PzAACwIdjGL_g174.jpg
解释: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.jpg
##这里多提点:通过这样的定义,可以收集业务上一些常规的数据,可以在线的时时统计,比如在游戏里的DAU\PCU\ACU....网站的PV 等等都可以数据收集可视化展示。。。。。完毕
   这个PYTHON脚本可以优化,INFLUXDB可以批量插入数据,可靠消息次是2-3W写入是没问题的。
PYTHON脚本启动 python mysql_qps.py & 不加后台符会一直卡着,


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-313257-1-1.html 上篇帖子: centos下安装cx_oracle 源码安装 64位 下篇帖子: RHEL5.8系统安装及Kickstart
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表