使用Golang可以开发出高性能的HTTP、GRPC服务。一般项目运行后,我们也需要监控服务的性能或者进行调试。除了打日志,还有没有其他可视化的方案呢?答案是有的。

本文将会介绍几种常用的监控方案。

pprof

这个是go语言自带的。启用很简单:

_ "net/http/pprof"

仅需显式的在 main 包的 import 里增加上面一行即可。完整使用示例:

package main

import (
"net/http"
_ "net/http/pprof"
) func main(){
//提供给负载均衡探活以及pprof调试
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
}) http.ListenAndServe(":10108", nil)
}

运行之后,在浏览器打开 http://127.0.0.1:10108/debug/pprof/就能看到监控的一些信息了:

注:生产环境一般不会按上面那么写,都是开个协程:

go http.ListenAndServe(":10108", nil)

如何启动 PProf 可视化界面?

需要graphviz支持,可以到 http://www.graphviz.org/download/ 下载,并把bin加入到环境变量。Mac可以使用brew安装。

下面以heap为例:

方法一:

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/heap

方法二:

go tool pprof http://localhost:10108/debug/pprof/heap

然后在交互式命令行输入web即可跳转到默认浏览器:

查看协程信息:

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/goroutine

debugcharts

一个可以实时查看golang程序内存、CPU、GC、协程等变化情况的可视化工具。

debugcharts 监控占用内存大,生产环境不建议开启。

跟pprof一样, import引入, 然后开端口监听就行了:

_ "github.com/mkevac/debugcharts"
//省略其它代码...
http.ListenAndServe(":10108", nil)

运行后,浏览器打开 http://localhost:10108/debug/charts/ 就能看到了:

prometheus

prometheus是grafana的插件,支持go监控的可视化。

首先需要代码里引入包:

"github.com/prometheus/client_golang/prometheus/promhttp"

然后增加路由:

//prometheus
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":10108", nil)

配置grafana后,效果图:

一个端口开启 pprof+charts+prometheus

如果每一个监控都开一个端口就有点浪费端口了。可以在一个端口里开启 pprof+charts+prometheus 。

1、入口文件增加代码:

//监控
go func() {
//提供给负载均衡探活
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok")) }) //prometheus
http.Handle("/metrics", promhttp.Handler()) //pprof, go tool pprof -http=:8081 http://$host:$port/debug/pprof/heap
http.ListenAndServe(":10108", nil)
}()

2、import增加

_ "github.com/mkevac/debugcharts"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
_ "net/http/pprof"

参考

1、Golang pprof详解

https://studygolang.com/articles/14519

2、mkevac/debugcharts: Very simple charts with some debug data for Go programs

https://github.com/mkevac/debugcharts

3、prometheus/client_golang: Prometheus instrumentation library for Go applications

https://github.com/prometheus/client_golang/

Go服务监控的更多相关文章

  1. 运维架构服务监控Open-Falcon

    一. 介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚 ...

  2. wamp 服务监控和启动

    近日我的 wamp 莫名其妙的崩溃重启,apache 能自动起来, mysql 却悲剧了. 于是有了下面的wamp服务监控和启动的批处理文件 @echo off rem define loop tim ...

  3. SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)

    1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的 ...

  4. 如何做自己的服务监控?spring boot 2.x服务监控揭秘

    Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

  5. 如何做自己的服务监控?spring boot 1.x服务监控揭秘

    1.准备 下载可运行程序:http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/ 2.添加服务监控依赖 <d ...

  6. 微服务监控zipkin+asp.net core

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...

  7. 基于Nginx+Keepalived的LB服务监控(邮件报警)

    IDC两台机器上部署了Nginx+Keepalived主从模式的LB代理负载层,现在需要对LB进行每日巡检和服务监控,利用SendEmail邮件监控. 0)SendEmail部署 参考:http:// ...

  8. 深入详解美团点评CAT跨语言服务监控(七)消息分析器与报表(二)

    CrossAnalyzer-调用链分析 在分布式环境中,应用是运行在独立的进程中的,有可能是不同的机器,或者不同的服务器进程.那么他们如果想要彼此联系在一起,形成一个调用链,在Cat中,CrossAn ...

  9. 深入详解美团点评CAT跨语言服务监控(六)消息分析器与报表(一)

    大众点评CAT微服务监控架构对于消息的具体处理,是由消息分析器完成的,消息分析器会轮训读取PeriodTask中队列的消息来处理,一共有12类消息分析器,处理后的结果就是生成各类报表. 消息分析器的构 ...

  10. 深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署

    前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring.MyBatis.Dubbo 等框架以及Log4j 等结合,支持P ...

随机推荐

  1. 函数的return和参数

    1.函数 将一些代码进行封装 def 函数名 括号 冒号:#创建 函数体(代码块) 函数名 + 小括号 #调用 1.1函数的返回值 return return 不写返回的是None,return写了不 ...

  2. Thinkphp5.0第三篇

    批量插入数据 //新增一条数据的方法 public function add() { /*$user =new UserModel(); $user->id=1; $user->name= ...

  3. React 项目引入 Dva

    背景 现在手上在做的 React 项目因为年代久远,用的 Redux,写代码的体验不太好,所以想升级一下引入 dva.以往使用 dva 都是使用 dva-cli 直接生成 dva 项目,或者在使用 a ...

  4. wsgi相关的

    目录 web 本质 http协议 请求方式 响应状态码 请求与响应文本格式 目录 web 本质   本质就是浏览器和服务器进行通信, http协议   也叫超文本传输协议(英文:HyperText T ...

  5. vue-cli脚手架项目本地阅览和在线阅览

    一.需求 开发环境:当然啦,前提是你要完整检测整个项目无错误的运行:npm run dev 后项目在本地预览问题没有问题 二.服务器本地阅览 生产环境:项目制作完成后需执行npm run build操 ...

  6. Python数据分析入门与实践 ✌✌

    Python数据分析入门与实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开 ...

  7. Unreal Engine 4 系列教程 Part 4:UI教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  8. JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控

    一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...

  9. 代码审计-MetInfo CMS变量覆盖漏洞

    0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...

  10. python-函数相关

    一.函数: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print(). 但你也可以自 ...