监控系统一般分几块:数据采集、数据存储、数据展示、告警。
对应服务如下:采集数据(Telegraf)-> 存储数据(InfluxDB) -> 显示数据(Grafana)
Telegraf : 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。
InfluxDB : 是一个开源 分布式 时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
Grafana : 是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。 Dashboard 中显示了你不同metric数据源中的数据。
第一步: 安装InfluxDB
访问 , 点击InfluxDB
这时,会出现弹框
会有各系统下 InfluxDB 的安装方法
如 centos , 输入以下两行命令进行安装
#启动 sudo systemctl start influxdb #配置开机启动 sudo systemctl enable influxdb
启动influx cli
$ influx Connected to 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
把 [http] 标签下的 auth-enabled 选项值改为 true
[http] bind-address = ":8086" auth-enabled = true
重启influxdb
systemctl restart influxdb
第二步: 安装Telegraf
点击Telegraf, 出现弹框, 会有各系统下 Telegraf 的安装方法, 如centos, 输入以下两行命令进行安装
wget 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 = [""] database = "golang123" username = "influx" password = "123456"
启动telegraf服务:
systemctl start telegraf netstat -naup|grep 8125 #确认端口已监听
第三步 安装Grafana
访问 ,查看各系统的安装方法
如果是centos的话,输入以下两行命令
wget 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
通过浏览器访问 来登陆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的调用情况
本文由 shen100 原创, Golang中文社区 首发。欢迎转载, 请在正文中标明原文链接及作者,谢谢。也欢迎来 Golang中文社区 学习、交流。