go 搭配 prometheus ,grafana 实现 监控 图表 报警 功能

配置 prometheus

先去这个网站下载 对应版本 的 prometheus prometheus 下载
然后

tar xvfz prometheus-*.tar.gz
cd prometheus-*

启动之前 先配置 vim prometheus.yml

prometheus.yml

# my global config
global:
  scrape_interval: 15s # 将抓取间隔设置为每 15 秒。默认为每 1 分钟。
  evaluation_interval: #15s 每 15 秒评估一次规则。默认值为每 1 分钟。
  # 抓取超时 设置为全局默认值(10 秒)。

# 警报管理器配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# 加载规则一次并根据全局“evaluation_interval”定期评估它们。
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# 只包含一个要抓取的端点的抓取配置:
# 这里是普罗米修斯本身。
scrape_configs:
  # 作业名称作为标签 `job=<job_name>` 添加到从此配置中抓取的任何时间序列中。
  - job_name: "prometheus"

    # 指标路径 默认 为 '/metrics'
    # scheme defaults to 'http'.  方案默认为“http”。
    static_configs:
      - targets: [ "localhost:9090" ]  # 这个监听的就是 prometheus 服务本身的指标 输入 http:://localhost:9090/metrics 就能看到 


  - job_name: 'node'

    static_configs:
      # 这个监听的就是 localhost 本身的 硬件指标(cpu 内存 硬盘 等信息  ,需要在 本机上面 安装 node_exporter 软件(具体百度)
      - targets: [ 'localhost:9554' ]    
        labels:
          group: 'x99-exporter'

      - targets: [ 'localhost:8554' ]  # 这个是 要自己写个go 程序 定义  port=8554 的服务 ,下面 会讲到
        labels:
          group: 'x99-metrics-client'

具体参数 可以 看官网 的文档 配置文档

然后执行 ./prometheus --config.file prometheus.yml 启动 prometheus 服务

这里最好 开 tmux 或者干脆 用 sh 脚本 做成个服务 ,不然占 你一个 命令行 窗口 ,不 ctrl+c 退出 就 干不了其他的事情了 ……

访问 http:😕/localhost:9090 (我这里是 http:😕/172.168.10.99:9090 我在172.168.10.99上安装 的prometheus 服务 )

可以 点击 这个 地球 查看 已经收集的指标



然后点击这个graph 就能看到 对应指标的 数据 变化曲线了

http:😕/localhost:9090/metrics 就是 prometheus 这个服务自身提供的指标

编写 go client 指标上报客户端

上面 的 http:😕/localhost:9090/metrics 是自带的指标,我们要是想自定义 指标上报 ,就 得自己写个 client ,然后给 prometheus server 上报就可以 了

写个 指标上报的 go 程序 注意prometheus pull metrics 指标的时候 有两种方式 一种是 下面代码的 定时 调用数据 然后 prometheus 收集,还有一种是 prometheus 每隔n 秒call metrics-client ,然后 metrics-client 调用命令 采集指标 这个在具体文档里面有 prometheus-go 代码示例

main.go

package main

import (
	"fmt"
	"github.com/fatih/color"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"net/http"
	"os/exec"
	"strconv"
	"strings"
	"time"
)
 
func main() {
	 
	// metrics 有四种类型 [metrics 类型](https://prometheus.io/docs/concepts/metric_types/)
	// Counter Gauge Histogram Summary 我这里用的是 gauge 类型
	var gaugeVec = promauto.NewGaugeVec( // 定义一个自动注册的服务(这样不用手动写  prometheus.Register())
		prometheus.GaugeOpts{
			Namespace: "命名空间(英语)",
			Name:      "metrics1 ",
			Help:      "随便写写帮助",
		}, []string{ // 定义 label
			"ip",
			"n_start",
			"type",
		},
	) // 这样定义出来的格式就是 命名空间(英语)_metrics1{ip="xxx",n_start="xxx",type="xxx"} 0(float64类型) 这样的

	//每2秒,就 给 prometheus 传 指标数据
	go func() {
		for {
			// WithLabelValues 确定 label的值 ,set 确定这条数据 的值(这里写固定了,实际业务是要把 value 填进去的)
			gaugeVec.WithLabelValues("localhost", "02", "duduType").Set(233)
			time.Sleep(2 * time.Second)
		}
	}()

	http.Handle("/metrics", promhttp.Handler())  // 访问 /metrics 触发 
	sprint := fmt.Sprintf("程序启动,正在坚挺 8554 端口 ")
	color.Blue(sprint)
	err := http.ListenAndServe(":8554", nil)
	if err != nil {
		sprint1 := fmt.Sprintf("程序启动失败, %+v", err)
		color.Blue(sprint1)
	}

}

 

执行 go run main.go 就把 指标客户 端 跑起来了
然后 在 prometheus 后台 搜索 就会有对应的数据

配置 grafana

grafana 是 用来 显示图表的 这里为 prometheus 数据 显示图标
下载安装 grafana

使用

默认情况下,Grafana 将监听 http://localhost:3000。默认登录名是“admin”/“admin”。

创建 Prometheus 数据源

点击 dashboard -> home -> 创建 dashboard


可以看到 对应指标的 图表 创建成功了

配置报警

安装 下载 alertManager

在github 上面 下载对应版本的 alertManager 下载地址

解压
tar -zxvf alertmanager-0.23.0.linux-amd64.tar.g
进入目录
cd alertmanager-0.23.0.linux-amd64
编辑 alertmanager.yml

# alertmanager 报警 配置
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.mxhichina.com:465' # 阿里邮箱
  smtp_from: 'ifnk@aliyouxiang.com' # 账户 名
  smtp_auth_username: 'ifnk@aliyouxiang.com' # 账户 名
  smtp_auth_password: 'dudu-dudu-dudu'  # 密码
  #smtp_auth_secret: false
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:
  group_by: ['alertname']
  group_wait: 1s
  group_interval: 5s
  repeat_interval: 60s
  receiver: 'mail'
receivers:
- name: 'mail'
  email_configs:
  - to: 'ifnk@aliyouxiang.com@hlytec.com'   # 要发送的邮箱地址 ,多个地址 用 逗号 隔开


运行
./alertmanager --config.file=alertmanager.yml

访问 http://172.168.10.99(你机器自己的ip):9093 即可看到 alertmanager 后台管理 页面

为Prometheus配置Alertmanager

prometheus.yml 配置 alertmanager

监听 alertmanager 指标

打开网址 http://localhost:9090/status 看看有没有成功

添加警报规则

现在Alertmanager已经配置完成,让我们添加第一条警报规则。
与记录规则一样,警报规则在Prometheus服务器配置中加载的规则文件内也使用YAML语句定义。

alert-rules.yml

# 报警规则
groups:
  - name: generals.rules
    rules:
      - alert: "程序可能崩了"
        expr:  (errCoreCount - errCoreCount offset 5s) > 0 # errCoreCount 当前数值减去 5秒前数值 大于0
        for: 1s # errCoreCount 当前数值减去 5秒前数值 大于0 的时间超过 1秒 就 给 alertmanager server 发送报警
        labels:
          severity: error
        annotations:
          summary: " {{ $labels.instance }} 的core 文件 增加了 "
          description: "{{ $labels.instance }} 的core 文件 增加了 ,很可能程序 崩了 "

然后 重启 prometheus 服务 打开 http://172.168.10.99:9090/alerts
就能看到 对应的规则了

警报可能有以下三种状态:
·Inactive:警报未激活。
·Pending:警报已满足测试表达式条件,但仍在等待for子句中指定的持续时间。
·Firing:警报已满足测试表达式条件,并且Pending的时间已超过for子句的持续时间。

并且邮件 也收到了

监控机器本身 的 指标 (cpu 内存 硬盘 网络 等 )

这个比较简单了 ,node-exporter 有人给做好了

下载 后

wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
./node_exporter --web.listen-address 0.0.0.0:9554  # 这里监 听端口 9554 

然后 在 prometheus 里面 配置

常见的参数 常见主机监控指标

然后 配合 grafana 画出 图来

常用统计查询命令

  • 场景: 你每5秒上报 一个平均值 ,比如你 每5秒 吃 10个馒头,然后 下五秒 吃 12 个馒头 , 我想统计 你 每 五分钟 要 吃多少个馒头 用 sum_over_time

    示例 sum_over_time(g20ck172_counter_kafaka_xdr_in[5m]) ,你想看 11:10 ~ 11:15 分钟 吃了多少馒头,鼠标应该悬浮到 11:15 就能看到 总数了

后面有空在写

posted @ 2022-02-21 08:38  ifnk  阅读(1456)  评论(0编辑  收藏  举报