前言:
做運維的很重要的基礎工作就是監控,之前都是統計數據入庫,然后前端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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// InfluxDB example setup (the InfluxDB databases specified need to exist)
datasources: {
influxdb: {
type: 'influxdb',
username: 'root',
password: 'root',
},
grafana: {
type: 'influxdb',
username: 'root',
password: 'root',
grafanaDB: true
},
},
|
這里配置了兩個數據源,第一個是你要存儲的監控數據,第二個是grafana用的
當然了你需要提前在influxdb的界面里建立好這兩個庫(這里就不演示influxdb web界面的登陸和建庫操作了)
現在瀏覽器打開grafana
這個界面是我配置好的,你看到的樣子是黑色的官網上那個樣子,界面自帶黑白兩個主題
為了便於理解grafana的配置方法
這里要說明一下收集數據的過程,我用的python收集
從日志中收集了兩個字段 status和type
python腳本如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/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
好了其余都是頁面展示的微調。
收工。