前言:
做運維的很重要的基礎工作就是監控,之前都是統計資料入庫,然後前端js圖表外掛出圖,費時費力,可定製性差
前幾天接觸到了ELK(logstash, elasticsearch, kibana)這套日誌收集展示工具集,的確很方便,但是手頭沒有那麼大的儲存啊
也不是所有的日誌資料都需要,然後就發現了grafana + influxdb的解決方案
簡介:
先給出這兩個工具的官網
http://grafana.org/
http://influxdb.com/
建議各位看官先大體瀏覽下這兩個工具的介紹和文件
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
好了其餘都是頁面展示的微調。
收工。