Golang监控(Telegraf + InfluxDB + Grafana)

发布于 2018-04-19 作者 shen100 5241次 浏览 版块 分享

监控系统一般分几块:数据采集、数据存储、数据展示、告警。
对应服务如下:采集数据(Telegraf)-> 存储数据(InfluxDB) -> 显示数据(Grafana)

Telegraf: 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。

InfluxDB: 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

Grafana: 是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据。

第一步: 安装InfluxDB

访问https://portal.influxdata.com/downloads , 点击InfluxDB

这时,会出现弹框

会有各系统下InfluxDB的安装方法

如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

创建用户

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

访问https://grafana.com/grafana/download ,查看各系统的安装方法

如果是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的调用情况

收藏
5回复
Charlotte1楼•2018-04-20

这个厉害了 收藏了

sky33802楼•2018-04-23

和Prometheus比有什么优势?

7910251963楼•2018-11-30
sky33802楼回复

优势很大 哈哈哈哈

shukui2164楼•4天前
7910251963楼回复

测试

shukui2165楼•4天前
sky33802楼回复

测试