微服务,系统监控和仪表盘,prometheus+grafana(七)

前言

在微服务中,系统监控和仪表盘的重要性就不bb了。

prometheus

详细信息参考官网:https://prometheus.io/

Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。对,前面章节中的opentracing是紧随其后,第三个加入cncf的。

grafana

官网:https://grafana.com/
中文文档:https://icopy.site/#_1

Grafana项目由TorkelÖdegaard于2014年发起,最近几年成为GitHub上最受欢迎的开源项目之一。它使您可以查询,可视化指标并记录警报,无论它们存储在何处。

Grafana具有可插拔的数据源模型,并捆绑了对许多最流行的时间序列数据库(如Graphite,Prometheus,Elasticsearch,OpenTSDB和InfluxDB)的丰富支持。它还对Google Stackdriver,Amazon Cloudwatch,Microsoft Azure和SQL数据库(如MySQL和Postgres)等云监控供应商提供内置支持。Grafana是唯一可以将来自多个地方的数据组合到一个仪表板中的工具。

以上吹得牛逼来自官网

Grafana是用于时间序列分析的事实软件,可以用于显示prometheus的数据,虽然prometheus也有图形显示的功能。Grafana确实做到了从多个数据源采取数据,几乎囊括了所有的主流源。

简单栗子

go程序

先down prometheus的开发包

github.com/prometheus/client_golang

然后写一个简单的小服务

package main

import (
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"log"
	"net/http"
)

func main(){
    //此url用于 prometheus 检测程序指标
	http.Handle("/metrics", promhttp.Handler())
	log.Fatal(http.ListenAndServe("192.168.10.106:1010", nil))
}

go build 并运行 访问 http://192.168.10.106:1010/metrics
可以看到一串如下图数据,说明程序正常

在这里插入图片描述

安装prometheus

首先在服务中创建一个配置文件
更多配置参考:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
官方配置参考:https://github.com/prometheus/prometheus/blob/release-2.3/config/testdata/conf.good.yml

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  external_labels:
    monitor: 'codelab-monitor'
scrape_configs:
  - job_name: 'go' #服务的名称
    scrape_interval: 5s
    metrics_path: /metrics  #获取指标的url
    static_configs:
      - targets: ['192.168.10.106:1010'] # 这个为服务的ip和port

写好配置文件后,使用docker安装,将下面命令中的文件替换为你创建的文件

docker run -itd --name=prometheus --network=host -v /home/wd/share/promstheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus

完成后,浏览器访问 http://192.168.10.10:9090 就可以看到prometheus界面
在status中选择targets 就可以看到下图界面
在这里插入图片描述

  • up 表示服务正常被检测
  • 红框中的内容为服务ip和端口 job表示服务名字,这里为go

安装grafana

还是docker安装

docker run --name=grafana -itd -p 3000:3000 grafana/grafana

完成后访问 访问 http://192.168.10.10:3000/

  • 账户密码都是admin,登录后会先修改密码

新建数据源
在这里插入图片描述
选择prometheus源
在这里插入图片描述

  • name 随意给源起一个名字
  • url 你安装的prometheus 的地址,后面不要带 /
    在这里插入图片描述
  • 点击保存,出现两个绿条,说明源ok

引用模板
在这里插入图片描述

点击load 出现如下界面,选择我们上面创建的源,然后import
在这里插入图片描述
然后可以看到我们的监控信息
在这里插入图片描述

diy一个仪表

go服务设置

  • 这里用到一个脚手架 需要 go get gitee.com/yutiandou/wdtools
  • 参考文档 使用方法可以参考文档,或者函数注释,注释是中文的,简单易懂
package main

import (
	"fmt"
	"gitee.com/yutiandou/wdtools/wdsys"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"log"
	"net/http"
	"time"
)
func main(){
	http.Handle("/metrics", promhttp.Handler())
	//新建一个容器,设置name
	diskPercent := prometheus.NewGaugeVec(prometheus.GaugeOpts{
		Name: "cpu_percent",
		Help: "cpu use percent",
	},
		[]string {"percent"},
	)
	//将容器注入到prometheus中
	prometheus.MustRegister(diskPercent)

	go func(){
		log.Fatal(http.ListenAndServe("192.168.10.106:1010", nil))
	}()

	for true{
		//获取cpu使用百分比
		percent,_ := wdsys.GetCpuPercent()
		//设置到容器中
		diskPercent.WithLabelValues("usedCPU").Set(percent)
		fmt.Println("cpu usd percent:",percent)
		<-time.After(time.Second*3)
	}
}

重新运行程序后,从浏览器,访问服务 /metrics
在这里插入图片描述
此处可以看到,我们再代码中新建的容器已经添加上来,并且名称叫cpu_percent

制作仪表

1.打开之前导入的模板,或者自己新建一个模板,然后new panel
在这里插入图片描述
2.选择形状,将字段cpu_percent填入到query中,如图
在这里插入图片描述
3.修改field,设置最大最小值
在这里插入图片描述
4.开启labels,然后apply应用,一个简单的仪表就制作完成了。
在这里插入图片描述
5.下图就是新创建的表盘
在这里插入图片描述

模板导出

  • 选择要导出的dashboard
  • 点击左上角的分享,export -> save to file
  • 导出到本地为json文件
  • 可以通过import 重新导入
    在这里插入图片描述

未完待续。。。

猜你喜欢

转载自blog.csdn.net/qq_25490573/article/details/107112103