Skip to main content

golang

golang metrics集成

golang metrics集成到prometheus中,然后通过grafana展示出来

go client集成

package main
import (
"net/http"

"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}
gin 集成
func PrometheusHandler(c *gin.Context) {
promhttp.Handler().ServeHTTP(c.Writer, c.Request)
}

func main() {
router := gin.Default()
router.GET("/metrics", PrometheusHandler)
// ...
}

使用helm封装,然后部署

Prometheus pull方式采集数据

kubekey已将prometheus-operator部署好,可以直接使用ServiceMonitor

基于PodMonitor来进行数据采集

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: go-server # 填写一个唯一名称
spec:
podMetricsEndpoints:
- interval: 30s
port: http # 填写pod yaml中Prometheus Exporter对应的Port的Name
path: /metrics # 填写Prometheus Exporter对应的Path的值,不填默认/metrics
namespaceSelector: # 选择要监控pod所在的namespace
matchNames:
- default
selector: # 填写要监控pod的Label值,以定位目标pod
matchLabels:
k8s-app: redis-exporter

也可以基于ServiceMonitor来进行数据采集

service_monitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: go-demo # 填写一个唯一名称
spec:
endpoints:
- interval: 30s
# 填写service yaml中Prometheus Exporter对应的Port的Name
port: http
# 填写Prometheus Exporter对应的Path的值,不填默认/metrics
path: /metrics
# 选择要监控service所在的namespace
namespaceSelector:
matchNames:
- default
# 填写要监控service的Label值,以定位目标service
selector:
matchLabels:
app.kubernetes.io/instance: go-demo-server
# 执行service monitor
k apply -f service_monitor.yaml

# 在Prometheus里查看是否抓取成功
kubectl --namespace kubesphere-monitoring-system port-forward prometheus-k8s-0 7890:9090

进入http://127.0.0.1:7890/targets页面,发现这个Endpoint,说明数据抓取成功

golang

Prometheus push方式采集数据

Grafana 显示

可以使用默认的granafa dashboard进行展示,然后在此基础上进行扩展

dashboard地址 https://grafana.com/grafana/dashboards/10826-go-metrics/

json文件下载 https://grafana.com/api/dashboards/10826/revisions/1/download

可以根据实际情况更改默认的json文件,显示效果如下图所示:

golang_1

参考文档

https://prometheus.io/docs/guides/go-application/