前言:php
作運維的很重要的基礎工做就是監控,以前都是統計數據入庫,而後前端js圖表插件出圖,費時費力,可定製性差html
前幾天接觸到了ELK(logstash, elasticsearch, kibana)這套日誌收集展現工具集,的確很方便,可是手頭沒有那麼大的存儲啊前端
也不是全部的日誌數據都須要,而後就發現了grafana + influxdb的解決方案python
簡介:mysql
先給出這兩個工具的官網nginx
http://grafana.org/web
http://influxdb.com/sql
建議各位看官先大致瀏覽下這兩個工具的介紹和文檔shell
grafana是前端展現界面,要放到apache或nginx下,不須要php環境奧數據庫
influxdb是一個時間序列的數據庫,你插入的每條數據會自動附加上兩個字段,一個時間,一個序列號(用來做爲主鍵的)
ps: influxdb的0.8版本不支持centos 5,只能是centos6以上,因此centos5的仍是用0.7的版本
安裝:
influxdb就一個rpm包,沒有其餘依賴,是用go語言寫的,go發展很迅猛啊
influxdb會監聽4個端口
tcp 0 0 0.0.0.0:8099 0.0.0.0:* LISTEN 29458/influxdb
tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 29458/influxdb
tcp 0 0 0.0.0.0:8086 0.0.0.0:* LISTEN 29458/influxdb
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 29458/influxdb
其中單機使用只須要用到兩個,另外兩個是分佈式部署時採用的
8083 web管理端 http://ip:8083 用戶名和密碼都是 root
8086 api接口調用端
配置
grafana配置
重命名配置文件
mv config-sample.js config.js
// InfluxDB example setup (the InfluxDB databases specified need to exist) datasources: { influxdb: { type: 'influxdb', url: "http://10.75.25.103:8086/db/directmessage", username: 'root', password: 'root', }, grafana: { type: 'influxdb', url: "http://10.75.25.103:8086/db/grafana", username: 'root', password: 'root', grafanaDB: true }, },
這裏配置了兩個數據源,第一個是你要存儲的監控數據,第二個是grafana用的
固然了你須要提早在influxdb的界面裏創建好這兩個庫(這裏就不演示influxdb web界面的登錄和建庫操做了)
如今瀏覽器打開grafana
這個界面是我配置好的,你看到的樣子是黑色的官網上那個樣子,界面自帶黑白兩個主題
爲了便於理解grafana的配置方法
這裏要說明一下收集數據的過程,我用的python收集
從日誌中收集了兩個字段 status和type
python腳本以下
#!/usr/bin/python # push log to influxdb on 10.75.25.103 import time from influxdb import client as influxdb host = '10.75.25.103' port = 8086 username = 'root' password = 'root' database = 'directmessage' db = influxdb.InfluxDBClient(host, port, username, password, database) log_fn = '/data1/multimedia/logs/scribe.log' f = open(log_fn) f.seek(0,2) while True: line = f.readline() try: lines = line.split('\t') post_data=[("name","multimedia"),("columns" ,["status", "type"]),("points",[[lines[5], lines[6]]])] data = [ {"name":"multimedia", "columns" : ["status", "type"], "points" : [[lines[5], lines[6]]] } ] db.write_points(data) except: f.close() f = open(log_fn) f.seek(0,2) time.sleep(5)
influxdb提供了python的模塊,用pip安裝便可,若是不以爲麻煩也能夠用shell的curl
下面是grafana最主要的配置項,其他本身摸索下就能夠了
若是grafana的config.js配置沒問題,點擊輸入框會自動提示字段的
這裏就至關於你要展現那些字段,相似sql語法
第一個multimedia是python腳本中的name,至關於mysql中的表
select後面的 count(type) 是你要在圖表中展現那些數據
後面的漏斗至關於 sql的where status = ‘succ'
group by time 60s 至關於你用cron一分鐘收集一次數據
後面的type 就是 group by type
好了其他都是頁面展現的微調。
收工。