go-zero 框架本身已经集成了Prometheus 客户端,除了客户端本身的指标上报外,go-zero本身也对服务级别的指标进行了上报,如流量请求,耗时等,可以方便我们对服务的健康情况进行监控
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,与上面的配置对应,后面的就是自已写的了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
- 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
- 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
- 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
grafana 集成 prometheus
1)登陆grafana后, 在Configuration-> Data source-> add Data source 添加prometheus, 填上访问地址,保存退出
2)Create -> Add a new panel-> Data source 源选择prometheus,然后在metrics browser 添加需要显示的指标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]))
曲线展示如下:
请求流量: 其统计维度为5分钟内,总的请求数量,
sum(increase(http_server_requests_duration_ms_count[5m]))
曲线展示如下:
CPU使用率 : 统计维度为5 分钟内cpu 的使用情况
sum(increase(process_cpu_seconds_total{job=”assess-api-server”}[5m]))
曲线展示如下:
常驻内存: 统计维度为5分钟内的内存占用情况:
process_resident_memory_bytes{job=”assess-api-server”}/(1024*1024)
曲线展示如下:
go 协程数 :统计维度为5分钟内的go 协程数量
go_goroutines{job=”assess-api-server”}
曲线展示如下:
另外还可以自身需要增加更多的监控选项, 如 qps, 根据接口级别的监控, 根据 http返回码监控等,可以从更多维度进行监控。