了解數(shù)據(jù)庫的TPS、QPS是作為一個運維DBA是非常必要的,那什么是TPS、QPS呢,簡單的理解是:
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雙鴨山,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
QPS:每秒查詢數(shù),即對數(shù)據(jù)庫每秒的DML的操作數(shù)
TPS:每秒事物處理,即對數(shù)據(jù)庫每秒DDL操作數(shù)
通過了解他們,可以掌握一個實例的基本工作運行狀態(tài)
如何對于對他們進行頁面可視化,是DBA的一個裝逼神器,本章主要介紹通過時序數(shù)據(jù)庫(influxdb)+grafana+簡單的python代碼實現(xiàn)
時時監(jiān)控它們,什么是時序數(shù)據(jù)庫可以在其他章節(jié)了解,這里不做過多介紹
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,安裝后生成默認(rèn)的配置文件/etc/influxdb/influxdb.conf 暫不修改
2、ON/OF服務(wù)
service influxdb start/stop
3、influxdb數(shù)據(jù)庫網(wǎng)頁管理控制臺(默認(rèn)值),這個只是方便某些操作,具體操作還是到終端輸入命令influx,此通過http://IP:8083 通過頁面方式登錄添加
一個用戶名和密碼,為grafana連接INFLUXDB使用,用戶名密碼自己定義
選中create user再query 就會有CREATE USER "根據(jù)實際輸入用戶名" WITH PASSWORD '輸入你的密碼'
[root@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
這個就可以登錄,是不是很熟悉的,具體操作看博客的其他章節(jié)。
注意:數(shù)據(jù)庫url(默認(rèn)值):http://localhost:8086 ##這個在后面的grafana會被用到,數(shù)據(jù)傳輸使用
4、YUM安裝GRAFANA包
安裝后on/off服務(wù):/etc/init.d/grafana-server start/stop
5、GRAFANA的頁面登錄,默認(rèn)使用3000端口:
192.168.1.114:3000 登錄名和密碼默認(rèn)是admin
6、通過Python代碼實現(xiàn)對MySQL和influxdb的同時操作
#注意:python 操作MySQL需要安裝python-mysql的驅(qū)動包,自己百度下載個,一般在解壓后目錄里執(zhí)行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、連接數(shù)據(jù)庫的信息,是被監(jiān)控端的
2、MySQL的QPS統(tǒng)計收集的存儲的數(shù)據(jù)庫
3、收集的數(shù)據(jù)把字符串轉(zhuǎn)成JSON格式
json_body = [
{
"measurement":'my_tps', ###注意這個紅色位置不能用雙引號,估計是PYTHON的問題,JAVA用雙引號沒問題,是個坑哦~~~!這個可以設(shè)置你喜歡的,其他不要修改,直接使用
"tags":{
"host": "mycat"
},
"fields":{
"qps":aa
}
}
]
4、需要在influxdb添加一個數(shù)據(jù)庫,例子名字叫:test_influxdb (自定定義), client=InfluxDBClient(host='192.168.15.104', port=8086, username='root', password='root', database='telegraf'),可根據(jù)實際定義,后面的GRAFANA會用到這個名字
強烈建議對數(shù)據(jù)庫的操作通過終端來搞:
[root@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配置收集來的數(shù)據(jù)信息:
1、添加數(shù)據(jù)源與配置,點擊grafana的圖表的下拉單點data sources---》add data source
2、配置數(shù)據(jù)源信息
3、datshboards->news->左上小綠格->add panel->graph
4、選擇metrics配置如下:
解釋:1、為剛才創(chuàng)建的數(shù)據(jù)源名字
2、添加個 query
3、展開query
4、這里根據(jù)前面的json格式 "measurement":'my_tps' 這個my_tps,可以理解為時序數(shù)據(jù)庫的表。
5、選擇HOST
6、選擇JSON的tags標(biāo)簽的值mycat
"tags":{
"host": "mycat"
7、為JSON的"qps":aa的qsp,相當(dāng)于字段,為field
8、為統(tǒng)計方式,看其INFLUXDB的基礎(chǔ)介紹
9、統(tǒng)計時常
10、為曲線的標(biāo)志,可以在一個圖里添加多個query ,這樣每個名字對應(yīng)不同的顏色
最后點擊保存按鈕,在最上方有個圖標(biāo),保存后選擇有4個方塊里的剛才定義的general的名字
最后效果圖:
##這里多提點:通過這樣的定義,可以收集業(yè)務(wù)上一些常規(guī)的數(shù)據(jù),可以在線的時時統(tǒng)計,比如在游戲里的DAU\PCU\ACU....網(wǎng)站的PV 等等都可以數(shù)據(jù)收集可視化展示。。。。。完畢
這個PYTHON腳本可以優(yōu)化,INFLUXDB可以批量插入數(shù)據(jù),可靠消息次是2-3W寫入是沒問題的。
PYTHON腳本啟動 python mysql_qps.py & 不加后臺符會一直卡著,
網(wǎng)站題目:influxdb+grafana可視化
文章來源:http://jinyejixie.com/article44/jjisee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、靜態(tài)網(wǎng)站、網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)