監控系統通常分幾塊:數據採集、數據存儲、數據展現、告警。 對應服務以下:採集數據(Telegraf)-> 存儲數據(InfluxDB) -> 顯示數據(Grafana)git
Telegraf: 是一個用 Go 編寫的代理程序,可收集系統和服務的統計數據,並寫入到 InfluxDB 數據庫。Telegraf 具備內存佔用小的特色,經過插件系統開發人員可輕鬆添加支持其餘服務的擴展。github
InfluxDB: 是一個開源分佈式時序、事件和指標數據庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分佈式和水平伸縮擴展。golang
Grafana: 是用於可視化大型測量數據的開源程序,他提供了強大和優雅的方式去建立、共享、瀏覽數據。dashboard中顯示了你不一樣metric數據源中的數據。web
訪問portal.influxdata.com/downloads , 點擊InfluxDB shell
這時,會出現彈框 數據庫
會有各系統下InfluxDB的安裝方法後端
如centos, 輸入如下兩行命令進行安裝centos
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2.x86_64.rpm
sudo yum localinstall influxdb-1.5.2.x86_64.rpm
複製代碼
#啓動
sudo systemctl start influxdb
#配置開機啓動
sudo systemctl enable influxdb
複製代碼
啓動influx cli瀏覽器
$ influx
Connected to http://localhost:8086 version 1.5.2
InfluxDB shell version: 1.5.2
複製代碼
建立用戶bash
CREATE USER influx WITH PASSWORD '123456' WITH ALL PRIVILEGES
#查看用戶
SHOW USERS
複製代碼
建立數據庫
#建立數據庫
CREATE DATABASE golang123
#查看數據庫
SHOW DATABASES
複製代碼
打開/etc/influxdb/influxdb.conf
, 把 [http] 標籤下的 auth-enabled 選項值改成 true
[http]
bind-address = ":8086"
auth-enabled = true
複製代碼
重啓influxdb
systemctl restart influxdb
複製代碼
點擊Telegraf, 出現彈框, 會有各系統下Telegraf的安裝方法, 如centos, 輸入如下兩行命令進行安裝
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.6.0-1.x86_64.rpm
sudo yum localinstall telegraf-1.6.0-1.x86_64.rpm
複製代碼
安裝完後,暫時不要啓動,先編輯/etc/telegraf/telegraf.conf,打開StatsD相關注釋:
[[inputs.statsd]]
protocol = "udp"
service_address = ":8125"
複製代碼
而後,配置InfluxDB的信息:
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "golang123"
username = "influx"
password = "123456"
複製代碼
啓動telegraf服務:
systemctl start telegraf
netstat -naup|grep 8125 #確認端口已監聽
複製代碼
訪問grafana.com/grafana/dow… ,查看各系統的安裝方法
若是是centos的話,輸入如下兩行命令
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_64.rpm
sudo yum localinstall grafana-5.0.4-1.x86_64.rpm
複製代碼
啓動grafana服務
$ systemctl daemon-reload
$ systemctl start grafana-server
$ systemctl status grafana-server
複製代碼
設置開機啓動
systemctl enable grafana-server.service
複製代碼
經過瀏覽器訪問 http://127.0.0.1:3000 來登錄grafana的web界面,輸入默認的用戶名 admin,密碼 admin。 點擊按鈕 Add data source來添加數據源, 以下圖所示
配置項 | 說明 |
---|---|
Name | 數據源名稱 |
Type | 數據源類型, 這裏咱們使用的是InfluxDB |
URL | 填寫InfluxDB對應的API地址便可,若是Grafana跟InfluxDB不在同一臺機器,將localhost換成IP便可 |
Access | API訪問方式,一共有Direct和Proxy兩個選項。建議選擇Proxy Direct: 瀏覽器直連數據源API,而後由Grafana解析返回的數據 Proxy: Grafana後端經過API訪問數據源,而後返回給瀏覽器展現 |
Database | InfluxDB數據源對應數據庫名稱 |
User | InfluxDB數據源帳號 |
Password | InfluxDB數據源密碼 |
CentOS7中Grafana配置文件位置是: /etc/grafana/grafana.ini CentOS7中Grafana日誌文件位置是: /var/log/grafana/grafana.log
先安裝go-statsd-client
go get github.com/cactus/go-statsd-client
複製代碼
再編寫代碼,收集統計數據
import (
"fmt"
"log"
"time"
"github.com/cactus/go-statsd-client/statsd"
)
func main() {
// 第一個參數是鏈接地址,
// 第二個參數是statsd客戶端前綴,這裏咱們不要前綴,直接設爲""
// 第三個參數是發送數據包的最大時間間隔,這裏設爲300毫秒
// 第四個參數是數據包最大達到多少時,就發送,這裏設爲512字節
client, err := statsd.NewBufferedClient("127.0.0.1:8125", "", 300*time.Millisecond, 512)
if err != nil {
log.Fatal(err)
}
defer client.Close()
for {
time.Sleep(300 * time.Millisecond)
if err := client.Timing("get_article", 100, 1); err != nil {
fmt.Println(err)
} else {
fmt.Println("Your Send operation was successful")
}
}
}
複製代碼
儀表盤(Dashboard),就是管理各類圖表的地方。 儀表盤由 行(Row)+ 圖表面板(Panel)組成。
點擊New建立Dashboard
而後點擊Graph來添加曲線圖
點擊Panel Title,再點擊Edit
在General中填寫Title
在Metrics中選擇數據源爲golang123,而後依下圖箭頭處填寫
配置項 | 說明 |
---|---|
Data Source | 選擇Grafana已配置的數據源 |
FROM default | 默認Schema |
FROM measurement | 對應的InfluxDB的表名 |
WHERE | WHERE條件,根據本身需求選擇 |
SELECT field | 對應選的字段,可根據需求增減 |
SELECT mean() | 選擇的字段對應的InfluxDB的函數 |
GROUP BY time() | 根據時間分組 |
GROUP BY fill() | 當不存在數據時,以null爲默認值填充 |
最後,咱們點擊右上角查看近半小時內get_article的調用狀況