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的调用状况

相关文章
相关标签/搜索