go-zero 框架本身已经集成了Prometheus 客户端,除了客户端本身的指标上报外,go-zero本身也对服务级别的指标进行了上报,如流量请求,耗时等,可以方便我们对服务的健康情况进行监控

    1. prometheus 安装 下载:wget http://file.ethlink.cn/tools/prometheus.tar.gz ,或者官方github
      安装很简单, 直接下载安装压缩包,然后解压,解压后有一个prometheus可执行文件和prometheus.yml 文件,
      直接执行./prometheus 即可运行,默认端口9090
      或者指定配置文件:./prometheus —config.file=prometheus.yml
      指定IP端口:./prometheus —web.listen-address=”192.168.1.82:9090”

      如何把go-zero 的api, rpc 服务上报到prometheus呢, 很简单,直接在服务的配置文件里加上
      Prometheus:
      Host: 127.0.0.1
      Port: 9092
      Path: /metrics
      注意:这里的服务host 指的是prometheus的Host,不是该服务的地址!!端口是上报给prometheus的端口,不是prometheus服务的端口,
      (其源码实现里就指明Host:port 为需要监听的prometheus的端口号,本质上就是新开了一个协程exporter,用于上报指标)
      每个服务都要自定义一个单独的端口,否则会报冲突
      然后在prometheus配置文件prometheus.yml里加上
      - job_name: ‘assess-rpc’
      static_configs:
      - targets: [“127.0.0.1:9092”]
      labels:
      job: assess-rpc
      app: assess-rpc
      env: dev
      说明:系统自带了一个 - job_name: “prometheus”,后面添加的数据源跟这个对齐即可
      job_name表示监听该服务的名称,可自定义, targets 指的是该服务名地址和IP,与上面的配置对应,后面的就是自已写的了

    2. Grafana 安装 , 到官网下载
      下载完成后,解压, 得到grafana文件, 其中配置文件在/conf/default.ini里
      直接执行/bin/grafana-server, 默认端口3000
      用浏览器打开 localhost:3000, 默认用户名和密码 admin/admin

    3.prometheus服务配置:
    在prometheus目录配置文件prometheus.yml 增加以下节点项
    - job_name: “assess-api-server”
    static_configs:
    - targets: [“192.168.1.82:8089”]
    labels:
    job: assess-api-server
    env: test

    1. - job_name: "assess-rpc-server"<br /> static_configs:<br /> - targets: ["192.168.1.82:6081"]<br /> labels:<br /> job: assess-rpc-server<br /> env: test
    2. - job_name: "assess-mq-server"<br /> static_configs:<br /> - targets: ["192.168.1.82:5081"]<br /> labels:<br /> job: assess-mq-server<br /> env: test
    3. - job_name: "market-mq-server"<br /> static_configs:<br /> - targets: ["192.168.1.82:7081"]<br /> labels:<br /> job: market-mq-server<br /> env: test<br /> 然后重启prometheus :./prometheus --config.file=prometheus.yml<br /> 浏览器打开: http://192.168.1.82:9090/targets<br /> 【注意】: prometheus 监听端口避免使用9xxx的端口, 这些端口大多已被第三方开源库使用,<br /> 详见:https://github.com/prometheus/prometheus/wiki/Default-port-allocations

    参考文档 :
    https://www.toutiao.com/article/7094143196430680580/?app=news_article&timestamp=1651799066&use_new_style=1&req_id=2022050609042501013110703620342051&group_id=7094143196430680580&share_token=52751C48-55EC-4456-8129-40A076784F4E&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1

    1. grafana 集成 prometheus
      1)登陆grafana后, 在Configuration-> Data source-> add Data source 添加prometheus, 填上访问地址,保存退出
      2)Create -> Add a new panel-> Data source 源选择prometheus,然后在metrics browser 添加需要显示的指标

    2. redis 监控
      1)下载redis-exporter : https://github.com/oliver006/redis_exporter/releases 选择对应版本
      2)下载完成后, 启动redis-exporter, ./redis_exporter —redis.addr=192.168.1.84:6379
      如果要监控多个redis,则后面用逗号分隔, 启动后默认端口号 9121
      3)修改prometheus 配置文件,加入以下配置:
      - job_name: “redis-exporter”
      static_configs:
      - targets: [“192.168.1.82:9121”]
      labels:
      job: redis-exporter
      env: test
      其中 targets 为redis-exporter启动IP和端口号
      4)重启prometheus, 浏览器打开: http://192.168.1.82:9090/targets ,找到 redis-exporter 的metrics,如果有数据内容,则表示抓取成功
      5) grafana 内 , Create-> import 导入Json模板文件, 模板文件可以在 https://github.com/oliver006/redis_exporter/contrib下找到
      grafana_prometheus_redis_dashboard.json, 点击保存,就可以看到监控指标了

    6. mysql 监控:
    1)下载 mysql_exporter
    2) 启动 mysql_exporter 要先设置环境变量 export DATA_SOURCE_NAME=’root:Root_123@(192.168.1.84:3306)/‘
    然后启动 ./mysql_exporter
    3) 配置 prometheus 配置文件
    - job_name: “mysqld-exporter”
    static_configs:
    - targets: [“192.168.1.84:9104”]
    labels:
    job: mysqld-exporter
    env: test
    4) 重启prometheus
    5) grafana, 直接导入模板文件即可
    exporter 大全:
    https://prometheus.io/docs/instrumenting/exporters/
    dashbord 大全:
    https://grafana.com/grafana/dashboards/

    具体要监控哪些指标?
    一般的服务我们需要从系统资源,耗时, 请求流量等监控服务信息,并且需要以时间间隔进行监控,目前已经设置了以下几个监控项:

    平均耗时: 其统计维度为5分钟内,总耗时除以总请求流量,sum(increase(http_server_requests_duration_ms_sum{job=”assess-api-server”}[5m]))/sum(increase(http_server_requests_duration_ms_count{job=”assess-api-server”}[5m]))
    曲线展示如下:
    image.png

    请求流量: 其统计维度为5分钟内,总的请求数量,
    sum(increase(http_server_requests_duration_ms_count[5m]))
    曲线展示如下:
    image.png

    CPU使用率 : 统计维度为5 分钟内cpu 的使用情况
    sum(increase(process_cpu_seconds_total{job=”assess-api-server”}[5m]))
    曲线展示如下:
    image.png

    常驻内存: 统计维度为5分钟内的内存占用情况:
    process_resident_memory_bytes{job=”assess-api-server”}/(1024*1024)
    曲线展示如下:
    image.png

    go 协程数 :统计维度为5分钟内的go 协程数量
    go_goroutines{job=”assess-api-server”}
    曲线展示如下:
    image.png

    另外还可以自身需要增加更多的监控选项, 如 qps, 根据接口级别的监控, 根据 http返回码监控等,可以从更多维度进行监控。