17、Hyperf 3 微服务系列 - 使用 Prometheus+Grafana 监控服务

作者: 温新

分类: 【Hyperf 3 微服务系列】

阅读: 1257

时间: 2023-05-29 16:07:46

hi,我是温新,一名 PHPer

Hyperf 3 微服务代码已上传至 Github:https://github.com/ziruchu/hyperf3-microservice-code

服务上线后,需要知道服务的健康状态、服务资源使用情况、慢查询、业务埋点等情况,通过监控就可以掌握这些情况,以便进行后续优化操作。

本篇文章将使用 Prometheus 和 Grafana 对服务进行监控。

Prometheus 与 Grafana 简单了解

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB)。它是一个监控采集与数据存储框架(监控服务器端),具体采集什么数据依赖于Exporter(监控客户端)。

Grafana 是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。一般是和一些时间序列数据库进行配合来展示数据的。

一句话了解:Prometheus 是时间序列数据库,它负责提供数据,Grafana 负责对这些数据指标进行可视化展示。

安装 Prometheus

我这里使用 root 用户安装

第一步:安装

使用 docker 进行安装

<span style="color: rgb(0, 176, 240);">docker pull prom/prometheus</span><br></br>
第二步:添加配置文件
<span style="color: rgb(0, 176, 240);">cd /usr/local/src</span><br></br>

新建一个 prometheus.yml 文件并添加如下内容:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 全局配置</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">global</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 每15秒向目标采样点拉取数据</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">scrape_interval</span>:     <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">15</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">s</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Set the scrape interval to every 15 seconds. Default is every 1 minute.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">evaluation_interval</span>: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">15</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">s</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Evaluate rules every 15 seconds. The default is every 1 minute.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># scrape_timeout is set to the global default (10s).</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Alertmanager configuration</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 告警管理器(Alertmanager)的配置</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">alerting</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">alertmanagers</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">static_configs</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">targets</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">      <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># - alertmanager:9093</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Load rules once and periodically evaluate them according to the global 'evaluation_interval'.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 告警规则有哪些</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">rule_files</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># - "first_rules.yml"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># - "second_rules.yml"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># A scrape configuration containing exactly one endpoint to scrape:</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Here it's Prometheus itself.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 抓取监控信息的目标,一个 job_name 就是一个目标</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">scrape_configs</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">job_name</span>: <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'prometheus'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># metrics_path defaults to '/metrics'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># scheme defaults to 'http'.</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">static_configs</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">targets</span>: [<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'192.168.31.90:9091'</span>]</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">job_name</span>: <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'hyperf'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 默认路由是 /metrics</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">static_configs</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">targets</span>: [<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'192.168.31.90:9503'</span>]</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">job_name</span>: <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'grafana'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">static_configs</span>:</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">targets</span>: [<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'192.168.31.90:3000'</span>]</span>

注意点:

1、job_name 监控的目录名称,后续要用到;

2、targets 目标地址和端口,启动容器会指定该地址与端口,进行映射,后续访问就是通过该地址访问;

3、192.168.31.90:95033000 提前预留给可视化工具使用;

第三步:启动容器
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 9091 端口映射到容器的 9091</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">docker</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">run</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">d</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">--</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">name</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prometheus</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">p</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">9091</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">9090</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">v</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">PWD</span>}<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prometheus</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">yml</span>:<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">etc</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prometheus</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prometheus</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">yml</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prom</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">prometheus</span></span>

容器启动后,可以通过 http://192.168.31.90:9091/targets 进行访问,如下图:

17-1 start-prometheus.jpg

Hyperf 中使用 Prometheus

当前所在位置:192.168.31.90 中的 note_consumer_user_9502

第一步:安装组件
<span style="color: rgb(0, 176, 240);">composer require hyperf/metric</span><br></br>
第二步:生成配置文件并修改

1、生成配置文件

<span style="color: rgb(0, 176, 240);">php bin/hyperf.php vendor:publish hyperf/metric</span><br></br>

2、修改配置文件

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config\autoload\metric.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">declare</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">strict_types</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Hyperf\Metric\Adapter\Prometheus\Constants</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'default'</span>                 <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'METRIC_DRIVER'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'prometheus'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'use_standalone_process'</span>  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'METRIC_USE_STANDALONE_PROCESS'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'enable_default_metric'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'METRIC_ENABLE_DEFAULT_METRIC'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'default_metric_interval'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DEFAULT_METRIC_INTERVAL'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'metric'</span>                  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'prometheus'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'driver'</span>        <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Hyperf\Metric\Adapter\Prometheus\MetricFactory</span>::<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">class</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'mode'</span>          <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Constants</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">SCRAPE_MODE</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'namespace'</span>     <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'APP_NAME'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'skeleton'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'scrape_host'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_SCRAPE_HOST'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'0.0.0.0'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 注意:这里的端口使用前面预留的 9503 端口</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'scrape_port'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_SCRAPE_PORT'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'9503'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'scrape_path'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_SCRAPE_PATH'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'/metrics'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'push_host'</span>     <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_PUSH_HOST'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'0.0.0.0'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'push_port'</span>     <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_PUSH_PORT'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'9091'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'push_interval'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'PROMETHEUS_PUSH_INTERVAL'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">];</span>

2 个注意点:

1、METRIC_DRIVER 的值与和 prometheus.yml 文件中的 job_name 一致;

2、PROMETHEUS_SCRAPE_PORT 是 prometheus.yml 文件中预留的 9503 端口。

第三步:配置中间件
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config\autoload\middlewares.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">declare</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">strict_types</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'http'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Hyperf\Metric\Middleware\MetricMiddleware</span>::<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">class</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">];</span>
第四步:添加 metrics 路由
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config\routes.php </span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Router</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">get</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'/metrics'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$registry</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Hyperf\Utils\ApplicationContext</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">getContainer</span>()<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">get</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Prometheus\CollectorRegistry</span>::<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">class</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$render</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">new</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Prometheus\RenderTextFormat</span>();</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$render</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">render</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$registry</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">getMetricFamilySamples</span>());</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>
第五步:启动服务并测试

1、服务启动后,查看一下 Prometheus 的情况,发现 Endpoint 已启动,如下图:

17-2 prometheus-endpoint-start.jpg

2、浏览器中访问一个接口,如 http://192.168.31.90:9502/users/test

接口访问后,访问 http://192.168.31.90:9503/metrics,搜索 note_consumer_user_9502_http_requests_count,可以发现刚刚我请求已经被统计,如下:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.005"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.01"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.025"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.05"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.075"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.1"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.25"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.5"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0.75"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2.5"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"5"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"7.5"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"10"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"+Inf"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_count</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/test"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span>

3、http://192.168.31.90:9091/targets 打开 Prometheus 查看情况

可以进行搜索我们的服务,找到请求统计,然后进行查询。

还可以点击 Graph 以图表形式进行查看。

17-3 prometheus-request-count.jpg

安装 Grafana

第一步:docker 安装 grafana
<span style="color: rgb(0, 176, 240);">docker pull grafana/grafana</span><br></br>
第二步:启动
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">mkdir</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">p</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">usr</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">local</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">software</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">data</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">docker</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">run</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">d</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">it</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">--</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">user</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">root</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">p</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3000</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3000</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">--</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">name</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">v</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">usr</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">local</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">software</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">data</span>:<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">var</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">lib</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">e</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GF_SECURITY_ADMIN_PASSWORD=admin"</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span></span>

容器启动后,可以通过 http://192.168.31.90:3000 进行访问。默认账号密码都是 admin,输入密码后会要求重置密码。

第三步:Grafana 配置 Prometheus 数据源

我们的目的是要把 Prometheus 中统计的 Hyperf 数据使用 Grafana 给渲染出来。需要 2 个操作来设置:

1、Grafana 配置 Prometheus 数据源;

2、导入 Hyperf 官方提供的默认指标。

导入 Prometheus 数据源

浏览器访问 http://192.168.31.90:3000/ 选择面板中 DATA SOURCES,然后选择 Prometheus 进入,

17-4 grafana-config-prometheus.jpg

URL 填写完成后往下拉,选择点击 Save & test,完成后可以看到如下图提示已经工作:

17-5-grafana-worker.jpg

第四步:导入官方提供的 grafana 指标

Hyperf 官方准备好了一份完整的 Grafana 配置文件,只需要在 grafana 后台中导入即可。

下载 grafana.json 文件:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">usr</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">local</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">software</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">grafana</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">wget</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">https</span>:<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//cdn.jsdelivr.net/gh/hyperf/hyperf/src/metric/grafana.json</span></span>

导入步骤如下图,填写完成后,点击 Import

17-6 导入grafana.json.jpg

导入完成后就可以看到监控画面了,如下图:

17-7 监控面板.jpg

第五步:启动 mysql、redis、async queue 监控

Mysql 连接数、Redis 连接数和 Async Queue 默认没有开启,根据需要进行开启。下面以开启 DB 和 Redis 为例:

1、添加监听器进行监控

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 192.168.31.90</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config\autoload\listeners.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">declare</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">strict_types</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 需要监控哪一个就注入监听者</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Hyperf\Metric\Listener\DBPoolWatcher</span>::<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">class</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\Hyperf\Metric\Listener\RedisPoolWatcher</span>::<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">class</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">];</span>

2、重启消费者

重启就再来看看监控面板:

17-8 监控 Mysqlredis.jpg

自定义统计指标

Prometheus 定义了 4 种不同的指标类型 (metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要),4 种指标类型含义如下:

  • 1、Counter:单调递增的计数器,比如请求数;
  • 2、Gauge:可增可减的仪表盘,比如可用内存大小,它是波动的;
  • 3、histogrm:直方图,它主要用于统计和分析样本的分布情况,比如 95 值;

我们还要了解的有:PromQL。关于它的学习参考 Prometheus 官网。

第一步:添加用于测试的方法
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// note_consumer_user_9502\app\Controller\UserController.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Hyperf\Metric\Annotation\Counter</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#[Counter(name:"counter_test")]</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#[GetMapping('/users/conutTest')]</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">public</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">conutTest</span>()</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>[<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'data'</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> [<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'message'</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'this is a test'</span>];</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">ResponseTool</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">success</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>[<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'data'</span>]);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span>
第二步:测试

1、访问 conutTest 方法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">curl</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">http</span>:<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//192.168.31.90:9502/users/conutTest</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">{<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"code"</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">200</span>,<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"message"</span>:<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"success"</span>,<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"data"</span>:{<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"message"</span>:<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"this is a test"</span>}}</span>

2、浏览器访问 http://192.168.31.90:9503/metrics 并查找该请求

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/conutTest"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"10"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_bucket</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/conutTest"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">le</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"+Inf"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_count</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/conutTest"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">note_consumer_user_9502_http_requests_sum</span>{<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_status</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"200"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_path</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/users/conutTest"</span>,<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">request_method</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"GET"</span>} <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0.089375019073486</span></span>
第三步:Grafana 平台添加自定义指标的渲染

1、创建一个空面板

17-9 自定义空面板.jpg

2、按照自己的需求进行统计。我这里统计接口请求数据

17-10 自定义面板统计数据.jpg

3、保存配置

点击右上角的 Save 按钮保存。

使用 ab 压力测试,然后观察该面板的变化

<span style="color: rgb(0, 176, 240);">ab -n 10000 -c 10 http://192.168.31.90:9502/users/conutTest</span><br></br>

再来看看监控的变化,如下图:

17-11 压力测试.jpg

到这里,本篇文章结束了,Hyperf 微服务学习篇也结束。

我是温新。

请登录后再评论