go可以通过 github.com/prometheus/client_golang 所提供的api给prometheus暴露一指标信息,prometheus通过采集这些指标达到对应用服务的监控记录、告警等操作。
下面我介绍如何通过prometheus来采集您的go怎么的metrics信息,并展示在grafana界面上。
golang 配置
go的基础代码:
// 导入包
import (
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/gorilla/mux"
)
func main () {
r := mux.NewRouter()
// prometheus metrics
r.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8082", r)
}
展示效果:
prometheus 配置
prometheus 需要增加一个rules
- job_name: {your job name}
honor_timestamps: true
scrape_interval: 1m
scrape_timeout: 1m
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- {you service ip and port}
增加完成之后 reload prometheus配置一会就能搜索到了。
Prometheus配置后的效果:
Grafana 配置
配置grafana指标展示前需要把prometheus 数据源给添加上
添加prometheus数据源
如果您的prometheus不需要验证,直接保存就好,然后进行下一步配置。
有两种方案:
- 官网找一个现成的模版json下载然后导入进去,选择prometheus数据库
- 自己根据需求自己画
Grafana配置后的效果:
指标对应含义
metrics | 含义 |
---|---|
go_gc_duration_seconds | 持续时间秒 |
go_gc_duration_seconds_sum | gc-持续时间-秒数-总和 |
go_memstats_alloc_bytes | Go内存统计分配字节 |
go_memstats_alloc_bytes_total | Go内存统计分配字节总数 |
go_memstats_buck_hash_sys_bytes | 用于剖析桶散列表的堆空间字节 |
go_memstats_frees_total | 内存释放统计 |
go_memstats_gc_cpu_fraction | 垃圾回收占用服务CPU工作的时间总和 |
go_memstats_gc_sys_bytes | 圾回收标记元信息使用的内存字节 |
go_memstats_heap_alloc_bytes | 服务分配的堆内存字节数 |
go_memstats_heap_idle_bytes | 申请但是未分配的堆内存或者回收了的堆内存(空闲)字节数 |
go_memstats_heap_inuse_bytes | 正在使用的堆内存字节数 |
go_memstats_heap_objects | 堆内存块申请的量 |
go_memstats_heap_released_bytes | 返回给OS的堆内存 |
go_memstats_heap_sys_bytes | 系统分配的作为运行栈的内存 |
go_memstats_last_gc_time_seconds | 持续时间秒 |
go_gc_duration_seconds | 垃圾回收器最后一次执行时间 |
go_memstats_lookups_total | 被runtime监视的指针数 |
go_memstats_mallocs_total | 服务malloc的次数 |
go_memstats_mcache_inuse_bytes | mcache结构体申请的字节数(不会被视为垃圾回收) |
go_memstats_mcache_inuse_bytes | mcache结构体申请的字节数(不会被视为垃圾回收) |
go_memstats_mcache_sys_bytes | 操作系统申请的堆空间用于mcache的字节数 |
go_memstats_mspan_inuse_bytes | 用于测试用的结构体使用的字节数 |
go_memstats_next_gc_bytes | 垃圾回收器检视的内存大小 |
go_memstats_other_sys_bytes | golang系统架构占用的额外空间 |
go_memstats_stack_inuse_bytes | 正在使用的栈字节数 |
go_memstats_stack_sys_bytes | 系统分配的作为运行栈的内存 |
go_memstats_sys_bytes | 服务现在系统使用的内 |
go_threads | 线程 |
go_goroutines | 协程数量 |
go_info | go编译器版本 |
- | - |
process_cpu_seconds_total | 进程用户和系统 CPU 总时间(以秒为单位)。 |
process_max_fds | 进程打开文件描述符的最大数量。 |
process_open_fds | 进程打开文件描述符的数量。 |
process_resident_memory_bytes | 进程驻留内存大小(以字节为单位)。 |
process_start_time_seconds | 进程的开始时间,以秒为单位(时间戳)。 |
process_virtual_memory_bytes | 进程以字节为单位的虚拟内存大小。 |
process_virtual_memory_max_bytes | 可用的最大虚拟内存量(以字节为单位)。 |
promhttp_metric_handler_requests_in_flight | 当前提供的抓取次数。 |
promhttp_metric_handler_requests_total | 按 HTTP 状态代码的抓取总数。 |
尾巴
不用多说了,懂的都懂。