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

    技术2024-03-24  9

    目录

    前言prometheusgrafana 简单栗子go程序安装prometheus安装grafana diy一个仪表go服务设置制作仪表模板导出

    前言

    在微服务中,系统监控和仪表盘的重要性就不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

    引用模板

    这里模板编号写10826,随便找了一个更多模板参考:https://grafana.com/grafana/dashboards

    点击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 重新导入

    未完待续。。。

    Processed: 0.012, SQL: 8