Prometheus笔记(二)监控go项目实时给grafana展示
欢迎加入go语言学习交流群 636728449
Prometheus笔记(二)监控go项目实时给grafana展示
Prometheus笔记(一)metric type
文章目录
一、prometheus和grafana安装
1、promethues安装
先写好配置文件,保存为prometheus.yml,
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus' //服务的名称,后续要监控我们自己的服务时只需要按照这个格式再添加上
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090'] //这个为服务的ip和port
更多配置文件写法请参考:https://prometheus.io/docs/operating/configuration/
官方给出供参考的配置文件:https://github.com/prometheus/prometheus/blob/release-2.3/config/testdata/conf.good.yml
然后利用docker启动。
docker run -p 9090:9090 --network=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
启动之后,可以先测试一下是否可以用。
[root@localhost ~]# curl http://localhost:9090/api/v1/label/job/values
{
"status":"success",
"data":["prometheus"]
}
如果是用上面我给出来的默认配置,返回值应该是和这里给出来的一样。说明promethues服务端启动好了。
2、grafana安装
这篇文章只是演示基本用法,所以用到的grafana的配置都是默认的。直接使用下面的命令启动就可以了。
$ docker run -d -p 3000:3000 grafana/grafana
如果需要更多功能则需要更复杂的配置了,更多配置方法请参考:http://docs.grafana.org/installation/docker/
docker镜像起来后,用浏览器登入 127.0.0.0:3000 ,会弹出来登入界面,用户名和密码为admin/admin,第一次会提示修改密码,按照提示操作即可。这样就完成了安装。
二、获取监控数据
这一步我主要写一个简单的go项目,用来获取内存的实时使用率数据,然后在grafana展示。
代码下载地址:https://github.com/Zhanben/goproject/tree/master/gomemory
package main
import (
"net/http"
"log"
"time"
"os"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/client_golang/prometheus"
"github.com/shirou/gopsutil/mem"
)
func main (){
//初始化日志服务
logger := log.New(os.Stdout, "[Memory]", log.Lshortfile | log.Ldate | log.Ltime)
//初始一个http handler
http.Handle("/metrics", promhttp.Handler())
//初始化一个容器
diskPercent := prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "memeory_percent",
Help: "memeory use percent",
},
[]string {"percent"},
)
prometheus.MustRegister(diskPercent)
// 启动web服务,监听1010端口
go func() {
logger.Println("ListenAndServe at:localhost:1010")
err := http.ListenAndServe("localhost:1010", nil)
if err != nil {
logger.Fatal("ListenAndServe: ", err)
}
}()
//收集内存使用的百分比
for {
logger.Println("start collect memory used percent!")
v, err := mem.VirtualMemory()
if err != nil {
logger.Println("get memeory use percent error:%s", err)
}
usedPercent := v.UsedPercent
logger.Println("get memeory use percent:", usedPercent)
diskPercent.WithLabelValues("usedMemory").Set(usedPercent)
time.Sleep(time.Second*2)
}
}
程序跑起来的输出如下:
[root@localhost demoproject]# go run memory.go
[Memory]2018/07/14 11:43:12 memory.go:42: start collect memory used percent!
[Memory]2018/07/14 11:43:12 memory.go:48: get memeory use percent: 41.22097449562238
[Memory]2018/07/14 11:43:12 memory.go:33: ListenAndServe at:locahost:1010
[Memory]2018/07/14 11:43:14 memory.go:42: start collect memory used percent!
[Memory]2018/07/14 11:43:14 memory.go:48: get memeory use percent: 41.219733205342514
[Memory]2018/07/14 11:43:16 memory.go:42: start collect memory used percent!
[Memory]2018/07/14 11:43:16 memory.go:48: get memeory use percent: 41.219733205342514
^Csignal: interrupt
此时可以查询的到promethues监控到的数据。
[root@localhost ~]# curl http://localhost:1010/metrics
...
# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations.
# TYPE go_memstats_sys_bytes gauge
go_memstats_sys_bytes 3.346432e+06
//这个为代码添加的字段,其余为promethues默认监控字段
# HELP memeory_percent memeory use percent
# TYPE memeory_percent gauge
memeory_percent{percent="usedMemory"} 41.16718525016137
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 0.01
....
三、配置grafana展示数据
1、修改配置重启promethues和grafana
先将监控服务注册到promethues服务端,修改配置文件:promethues.yml
... //和前面的配置文件一样
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'memory' //给你的服务取的名字
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:1010'] //改成你自己代码里面使用的端口号
暂停掉之前启动的promethues和grafana
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
650cb5891e56 grafana/grafana "/run.sh" 19 hours ago Up 19 hours 0.0.0.0:3000->3000/tcp brave_ride
850a44d18dfe prom/prometheus "/bin/prometheus -..." 21 hours ago Up 21 hours 0.0.0.0:9090->9090/tcp zen_keller
[root@localhost ~]# docker stop 850a44d18dfe
850a44d18dfe
[root@localhost ~]# docker stop 650cb5891e56
650cb5891e56
修改好配置文件之后重新启动promethues和grafana
[root@localhost ~]# docker run -d -p 9090:9090 --network=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
[root@localhost ~]# docker run -d -p 3000:3000 grafana/grafana
检验promethues服务端是否注册到了我们自己的服务。
[root@localhost demoproject]# curl http://localhost:9090/api/v1/targets
{
"status": "success",
"data": {
"activeTargets": [{
"discoveredLabels": {
"__address__": "localhost:1010",
"__metrics_path__": "/metrics",
"__scheme__": "http",
"job": "memory"
},
"labels": {
"instance": "localhost:1010",
"job": "memory"
//这个memory即我们在promethues的配置文件填写的名字
},
"scrapeUrl": "http://localhost:1010/metrics",
"lastError": "",
"lastScrape": "2018-07-14T07:39:26.127284982Z",
"health": "up"
//注意上面这个字段要为up,要不然后续grafana查询不到数据
}
],
"droppedTargets": []
}
}
2、创建数据源
- 打开grafana界面,登入后如下图所示:
- 创建数据源
按照图片里面的填写的填好。其中memory为数据源名字,可以自己随便取一个。类型需要选择promethues。下面的URL需要填写promethues的服务端的URL,access选择不使用代理的Browser。填好之后点击下面的保存,完成创建数据源。
3、创建dashboard
第一步如图所示,按照图中的三步操作。
操作完成之后会进入下图所示的界面,然后再次按照图中提示操作即可。
完成之后会弹出来一个panle,单击下拉框,点击Edit。
点击Edit之后会pane下方会得到下图展示的界面:
在查询字段的地方填入,代码缩写的字段prometheus.NewGaugeVec创建时填写的name字段,本示例代码为memory_percent。填好之后点击下option旁边的query inspector,就可以在上面的表中查看到数据了。
最后查询到的数据如下图所示:
欢迎加入go语言学习交流群 636728449
参考资料
1、 https://godoc.org/github.com/prometheus/client_golang/prometheus
2、 https://prometheus.io/docs/introduction/overview/
Prometheus笔记(二)监控go项目实时给grafana展示的更多相关文章
- python 学习笔记二十 django项目bbs论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- SpringCloud笔记二:搭建项目基础框架
目录 搭建框架 新建父工程 新建子工程api 新建子工程提供者provider 新建消费者consumer 总结 搭建框架 我们的SpringCloud微服务框架是父子工程,有一个父工程,剩下的都是子 ...
- Beego 学习笔记二:第一个项目
第一个MVC项目 1> 使用beego命令,创建一个项目 首先切换到创建项目的位置,输入bee new firstweb命令,创建成功之后会出现一个名为firstweb的文件夹 2> ...
- Prometheus笔记(一)metric type
欢迎加入go语言学习交流群 636728449 Prometheus笔记(二)监控go项目实时给grafana展示 Prometheus笔记(一)metric type 文章目录 Prometheus ...
- Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践
0x00 初衷 最近参与的几个项目,无一例外对监控都有极强的要求,需要对项目中各组件进行详细监控,如服务端API的请求次数.响应时间.到达率.接口错误率.分布式存储中的集群IOPS.节点在线情况.偏移 ...
- amazeui学习笔记二(进阶开发1)--项目结构structure
amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...
- prometheus监控java项目(jvm等):k8s外、k8s内
前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...
- Grafana+Prometheus通过node_exporter监控Linux服务器信息
Grafana+Prometheus通过node_exporter监控Linux服务器信息 一.Grafana+Prometheus通过node_exporter监控Linux服务器信息 1.1nod ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
随机推荐
- JVM 中你不得不知的一些参数
有的同学虽然写了一段时间 Java 了,但是对于 JVM 却不太关注.有的同学说,参数都是团队规定好的,部署的时候也不用我动手,关注它有什么用,而且,JVM 这东西,听上去就感觉很神秘很高深的样子,还 ...
- redis 数据库主从不一致问题解决方案
在聊数据库与缓存一致性问题之前,先聊聊数据库主库与从库的一致性问题. 问:常见的数据库集群架构如何? 答:一主多从,主从同步,读写分离. 如上图: (1)一个主库提供写服务 (2)多个从库提供读服务 ...
- Linux 解决ntfs文件系统问题,支持外设(U盘等设备)的即插即拔
# rpm -q fuse //查看这个软件有没有安装,一般安装系统都会装(最小安装例外) fuse-2.9.2-10.el7.x86_64 # yum -y install gcc # wget h ...
- 腾讯Techo开发者大会PPT分享
腾讯云年度的开发者大会已经落幕,大会包括1场前沿技术主峰会,18个技术专场,150位海内外技术专家,28个互动展区,8场动手实验室,23小时小程序云开发极限编程,1场数据库诊断大赛. 内容上涵盖了最新 ...
- Mirantis 收购 Docker | 云原生生态周报 Vol. 28
作者 | 禅鸣.进超.心水.心贵 业界要闻 Docker 将 Docker Enterprise 卖给 Mirantis Mirantis 是一家扎根于 OpenStack 的云公司,最近专注于 Ku ...
- 用安全密钥验证ssh
1.需要打开两台虚拟机,并保证两台虚拟机可以ping通: 本地主机IP:192.168.8.120 远程主机IP:192.168.8.100 2.在本地主机生成密钥对,输入命令“ssh-keygen” ...
- Java描述设计模式(21):状态模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为,身体也会随着环境的变化而变化出适应环境的颜色 ...
- gdb(ddd,kdevelop等)调试ZeroIce开发的应用程序,中断信号引起的问题
不作文,只记要点. 1.Ice::Application的程序框架默认对SIGHUP, SIGINT, SIGTERM进行处理.目的就是捕捉Ctrl+C发出信号有序地结束程序.这个功能扰乱了我们使用g ...
- Condition对象以及ArrayBlockingQueue阻塞队列的实现(使用Condition在队满时让生产者线程等待, 在队空时让消费者线程等待)
Condition对象 一).Condition的定义 Condition对象:与锁关联,协调多线程间的复杂协作. 获取与锁绑定的Condition对象: Lock lock = new Reentr ...
- 笔记本进入BIOS设置
转眼间,到大三了. 在学习<Red Hat Linux 服务器搭建与管理>这门课时,刚开学第一节,就是虚拟机,但是最烦恼的是我们笔记本电脑的默认设置,它把虚拟化给禁止了. 1,首先,我们需 ...