在微服务中,系统监控和仪表盘的重要性就不bb了。
详细信息参考官网:https://prometheus.io/
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。对,前面章节中的opentracing是紧随其后,第三个加入cncf的。
官网: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确实做到了从多个数据源采取数据,几乎囊括了所有的主流源。
先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
可以看到一串如下图数据,说明程序正常
首先在服务中创建一个配置文件
更多配置参考: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 就可以看到下图界面
还是docker安装
docker run --name=grafana -itd -p 3000:3000 grafana/grafana
完成后访问 访问 http://192.168.10.10:3000/
点击load 出现如下界面,选择我们上面创建的源,然后import
然后可以看到我们的监控信息
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.下图就是新创建的表盘
未完待续。。。