欢迎加入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展示的更多相关文章

  1. python 学习笔记二十 django项目bbs论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...

  2. SpringCloud笔记二:搭建项目基础框架

    目录 搭建框架 新建父工程 新建子工程api 新建子工程提供者provider 新建消费者consumer 总结 搭建框架 我们的SpringCloud微服务框架是父子工程,有一个父工程,剩下的都是子 ...

  3. Beego 学习笔记二:第一个项目

    第一个MVC项目 1>     使用beego命令,创建一个项目 首先切换到创建项目的位置,输入bee new firstweb命令,创建成功之后会出现一个名为firstweb的文件夹 2> ...

  4. Prometheus笔记(一)metric type

    欢迎加入go语言学习交流群 636728449 Prometheus笔记(二)监控go项目实时给grafana展示 Prometheus笔记(一)metric type 文章目录 Prometheus ...

  5. Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践

    0x00 初衷 最近参与的几个项目,无一例外对监控都有极强的要求,需要对项目中各组件进行详细监控,如服务端API的请求次数.响应时间.到达率.接口错误率.分布式存储中的集群IOPS.节点在线情况.偏移 ...

  6. amazeui学习笔记二(进阶开发1)--项目结构structure

    amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...

  7. prometheus监控java项目(jvm等):k8s外、k8s内

    前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...

  8. Grafana+Prometheus通过node_exporter监控Linux服务器信息

    Grafana+Prometheus通过node_exporter监控Linux服务器信息 一.Grafana+Prometheus通过node_exporter监控Linux服务器信息 1.1nod ...

  9. mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

随机推荐

  1. introduce new products

    Today's the day. I'm giving you the heads up. Our company is rolling up its new line of cell phones. ...

  2. php pdo mysql存入转义

    php pdo mysql存入转义 因为存入html都是自动转义 相当于PHP的htmlspecialchars 所以读取的时候要加htmlspecialchars_decode

  3. 创建基于OData的Web API - Knowledge Builder API, Part II:Project Setup

    本篇为Part II:Project Setup 查看第一篇<Part I:  Business Scenario> 第一步,准备步骤. 准备步骤一,下载.NET Core 2.2 SDK ...

  4. 【Java】面向对象初探

    前段时间经历了一段心态浮躁期,这让我想起了自己最初的计划,要提升自己知识体系的广度.前几年一直做的是web前端这一块的工作,但我希望通过自己在学习Java这样的过程来提升自己的知识广度. 面向对象概述 ...

  5. python-语言元素

    变量命令 对于每个变量我们需要给它取一个名字.在python中,变量命名需要遵循一下这些必须遵守硬性规则和强烈建议遵守的非硬性规则. 硬性规则 变量名由字母(广义的Unicode字符,不包括特殊字符) ...

  6. flex盒子布局

    看过很多对于弹性盒子flex的简介,但还是觉得阮一峰大神的解析和张鑫旭大神(旧版flex)的解析比较容易理解,下面,我以自己的理解来叙述关于flex弹性布局! 1.概念(容器和项目) 在flex中,有 ...

  7. Swoft源码之Swoole和Swoft的分析

    这篇文章给大家分享的内容是关于Swoft 源码剖析之Swoole和Swoft的一些介绍(Task投递/定时任务篇),有一定的参考价值,有需要的朋友可以参考一下. 前言 Swoft的任务功能基于Swoo ...

  8. 扛把子组20191107-4 beta week 2/2 Scrum立会报告+燃尽图 03

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9956 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩 ...

  9. 题解 P3954 【成绩】

    题目评级: ★ (水题) 内容及算法: 无,简单模拟计算即可 代码: /** *@author little_frog */ #include <bits/stdc++.h> using ...

  10. 插入节点(appendChild())

    appendChild():方法将给元素节点追加一个子节点: reference = element.appendChild(newChild); 如上所示,给定节点newChild将成为给定元素节点 ...