influxdb+grafana業務資料視覺效果

來源:互聯網
上載者:User

標籤:grafana   influxdb   

瞭解資料庫的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使用,使用者名稱密碼自己定義

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/8B/5C/wKioL1hKvFqipzqHAADpKCXGSYI319.png-wh_500x0-wm_3-wmp_4-s_291862535.png" title="19.png" alt="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、配置資料來源資訊

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/8B/5F/wKiom1hKxMzBp18UAAELp-fNRD8798.png" title="2222.png" alt="wKiom1hKxMzBp18UAAELp-fNRD8798.png" />

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

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8B/60/wKiom1hKxZbjX76lAADP7jWJmn8978.png-wh_500x0-wm_3-wmp_4-s_1858480114.png" title="333.png" alt="wKiom1hKxZbjX76lAADP7jWJmn8978.png-wh_50" />

    4、選擇metrics配置如下:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/8B/60/wKiom1hKxpnQa-PzAACwIdjGL_g174.png" title="33333.png" alt="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的名字


最後:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/8B/5C/wKioL1hKyWjD55gxAADBrrEudhs918.png" title="44444.png" alt="wKioL1hKyWjD55gxAADBrrEudhs918.png" />

##這裡多提點:通過這樣的定義,可以收集業務上一些常規的資料,可以線上的時時統計,比如在遊戲裡的DAU\PCU\ACU....網站的PV 等等都可以資料收集可視化展示。。。。。完畢
   這個PYTHON指令碼可以最佳化,INFLUXDB可以批量插入資料,可靠訊息次是2-3W寫入是沒問題的。

PYTHON指令碼啟動 python mysql_qps.py & 不加後台符會一直卡著,

本文出自 “DBSpace” 部落格,請務必保留此出處http://dbspace.blog.51cto.com/6873717/1881371

influxdb+grafana業務資料視覺效果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.