Golang監控(Telegraf + InfluxDB + Grafana)

監控系統通常分幾塊:數據採集、數據存儲、數據展現、告警。 對應服務以下:採集數據(Telegraf)-> 存儲數據(InfluxDB) -> 顯示數據(Grafana)git

Telegraf: 是一個用 Go 編寫的代理程序,可收集系統和服務的統計數據,並寫入到 InfluxDB 數據庫。Telegraf 具備內存佔用小的特色,經過插件系統開發人員可輕鬆添加支持其餘服務的擴展。github

InfluxDB: 是一個開源分佈式時序、事件和指標數據庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分佈式和水平伸縮擴展。golang

Grafana: 是用於可視化大型測量數據的開源程序,他提供了強大和優雅的方式去建立、共享、瀏覽數據。dashboard中顯示了你不一樣metric數據源中的數據。web

第一步: 安裝InfluxDB

訪問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, 出現彈框, 會有各系統下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

訪問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

第四步 集成statsd client

先安裝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)

儀表盤(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的調用狀況

相關文章
相關標籤/搜索