開源監控利器grafana

曲珂發表於2014-09-16

前言:

做運維的很重要的基礎工作就是監控,之前都是統計資料入庫,然後前端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

好了其餘都是頁面展示的微調。

收工。

相關文章