0%

grafana介绍和使用

grafana介绍和使用

1 简介

  • grafana是监控数据的可视化分析工具,可以将数据以非常美观直接的图形展示出来,可以配置多种数据源,包括:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch。

2 安装

2.1 下载压缩包

1
$ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.0.linux-amd64.tar.gz

2.2 解压、移动

1
2
$ tar -zxf grafana-enterprise-8.2.0.linux-amd64.tar.gz
$ mv grafana-8.2.0/ /opt/grafana-8.2.0

2.3 设置环境变量

  • 在 ~/.bashrc 文件末尾添加如下几行,
1
2
export GRAFANA=/opt/grafana-8.2.0                                                                                         
export PATH=$PATH:$GRAFANA/bin
  • 使环境变量生效,
1
source ~/.bashrc

3 使用(以CPU使用率展示为例)

3.1 启动grafana服务

1
$ grafana-server -homepath $GRAFANA

img

3.2 打开grafana web页面

img

  • 输入用户名和密码,默认都为admin,然后可以修改用户名、密码,也可以选择跳过

3.3 添加InfluxDB数据源

  • 点击设置 -> 添加数据源,

img

  • 选择 InfluxDB,

img

  • 填写配置,

img

  • 保存并测试

img

3.4 打点

3.4.1 获取CPU使用率信息

1
2
3
4
5
6
7
func GetCPUPercentInfo() (info []float64, err error) {
info, err = cpu.Percent(time.Second, true)
if err != nil {
return info, fmt.Errorf("get cpu usage info error: %w", err)
}
return info, nil
}
  • 以slice的形式返回本机所有CPU的使用率信息

3.4.2 连接InfluxDB

1
2
3
4
5
6
7
8
9
import influxdb2 "github.com/influxdata/influxdb-client-go/v2"

var (
client influxdb2.Client
)

func Connect(userName, password string) {
client = influxdb2.NewClient("http://localhost:8086", fmt.Sprintf("%s:%s", userName, password))
}

3.4.3 写入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func WritePoint(database string, point *write.Point) error {
writeAPI := client.WriteAPIBlocking("", database+"/autogen")
err := writeAPI.WritePoint(context.Background(), point)
if err != nil {
return fmt.Errorf("write to influxdb error: %w", err)
}
return nil
}

func WriteCPUPercentInfo(usage []float64) error {
for id, percent := range usage {
point := influxdb2.NewPoint("cpu_usage",
map[string]string{"cpu_id": strconv.FormatInt(int64(id), 10)},
map[string]interface{}{"usage_percent": percent},
time.Now())
err := WritePoint("monitor", point)
if err != nil {
return fmt.Errorf("write cpu usage percent to influxdb error: %w", err)
}
}
return nil
}

3.4.4 主函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func main() {
// 连接 influxdb
influx.Connect("admin", "")
// 获取实时CPU利用率,存储到influxdb
ticker := time.Tick(time.Second)
for _ = range ticker {
info, err := gopsutil.GetCPUPercentInfo()
if err != nil {
logrus.Errorf("get cpu usage info error: %w", err)
os.Exit(1)
}
err = influx.WriteCPUPercentInfo(info)
if err != nil {
logrus.Errorf("write cpu usage info to influxdb error: %w", err)
os.Exit(1)
}
logrus.Infof("write success, cpu usage percent: %v", info)
}
}
  • 每秒采集1次CPU使用率数据,写入时序数据库InfluxDB中

img

3.5 前端展示

3.5.1 新建 Dashboard

img

3.5.2 添加 panel

img

3.5.3 获取时序数据

img

  • InfluxDB 1.x 兼容 sql 语句,上图表示从 cpu_usage 表中选取 usage_percent 字段展示,别名为 cpu0