hyperf+metrics+prometheus+Grafana

  • Metrics数据采集器
  • prometheus数据存储与查询
  • Grafana可视化看板工具

安装流程

1、安装metric
composer require hyperf/metric
2、安装prometheus
composer require promphp/prometheus_client_php
3、生成配置文件:config/autoload/metric.php
php bin/hyperf.php vendor:publish hyperf/metric
4、配置config/autoload/metric.php
<?php

declare(strict_types=1);

use Hyperf\Metric\Adapter\Prometheus\Constants;
use Hyperf\Metric\Adapter\Prometheus\MetricFactory;

use function Hyperf\Support\env;

return [
    // To disable hyperf/metric temporarily, set default driver to noop.
    'default' => env('METRIC_DRIVER', 'prometheus'),
    'use_standalone_process' => env('METRIC_USE_STANDALONE_PROCESS', true),// 是否使用 独立监控进程
    'enable_default_metric' => env('METRIC_ENABLE_DEFAULT_METRIC', true),//是否统计默认指标。默认指标包括内存占用、系统 CPU 负载以及 Swoole Server 指标和 Swoole Coroutine 指标
    'enable_command_metric' => env('METRIC_ENABLE_COMMAND_METRIC', true),
    'default_metric_interval' => env('DEFAULT_METRIC_INTERVAL', 5),//默认指标推送周期,单位为秒
    // only available when use_standalone_process is true
    'buffer_interval' => env('METRIC_BUFFER_INTERVAL', 5),
    'buffer_size' => env('METRIC_BUFFER_SIZE', 200),
    'metric' => [
        'prometheus' => [
            'driver' => MetricFactory::class,
            'mode' => Constants::SCRAPE_MODE,
            'namespace' => env('PROMETHEUS_NAMESPACE', 'skeleton'),
            'redis_config' => env('PROMETHEUS_REDIS_CONFIG', 'default'),
            'redis_prefix' => env('PROMETHEUS_REDIS_PREFIX', 'prometheus:'),
            'redis_gather_key_suffix' => env('PROMETHEUS_REDIS_GATHER_KEY_SUFFIX', ':metric_keys'),
            'scrape_host' => env('PROMETHEUS_SCRAPE_HOST', '0.0.0.0'),
            'scrape_port' => env('PROMETHEUS_SCRAPE_PORT', '9502'),
            'scrape_path' => env('PROMETHEUS_SCRAPE_PATH', '/metrics'),
            'push_host' => env('PROMETHEUS_PUSH_HOST', '0.0.0.0'),
            'push_port' => env('PROMETHEUS_PUSH_PORT', '9090'),
            'push_interval' => env('PROMETHEUS_PUSH_INTERVAL', 5),
        ],
    ],
];

5、添加中间件config/autoload/middlewares.php
<?php

declare(strict_types=1);

return [
    'http' => [
        Hyperf\Metric\Middleware\MetricMiddleware::class,//指标采集与上报组件
    ],
];

6、安装prometheus(日志采集)和grafana(面板)
prometheus安装前的目录包含data文件夹和空白的prometheus.yml文件
#相关docker-compose配置
  grafana:
    # 建议固定版本,不要用 latest
    image: grafana/grafana:13.0.1
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"
    volumes:
      # 数据持久化,防止删容器丢数据
      - ./grafana/data:/var/lib/grafana
    environment:
      # 1. 设置管理员账号(可选,默认 admin)
      GF_SECURITY_ADMIN_USER: admin
      # 2. 设置管理员密码(必填!)
      GF_SECURITY_ADMIN_PASSWORD: admin_password
      # 时区(建议设为上海)
      TZ: Asia/Shanghai
    networks:
      - lnmp-network
  prometheus:
    image:  prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'  # 允许通过API热重载配置
      - '--storage.tsdb.retention.time=15d' # 数据保留15天
    networks:
      - lnmp-network

7、配置prometheus
prometheus.yml
# prometheus.yml
global:
  scrape_interval: 15s       # 全局采集间隔
  evaluation_interval: 15s   # 规则评估间隔

# 采集配置
scrape_configs:
  # Hyperf 采集任务
  - job_name: 'skeleton' # 和metric配置的namespace一致
    static_configs:
      - targets: ['php83:9502']   # 用 Hyperf 容器名,确保和你的容器名一致
    metrics_path: '/metrics'       # Hyperf 指标路径

  # Prometheus 自身监控(可选)
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
8、配置grafana
  • Connections->Data sources 点击Add new data source按钮
  • 选择prometheus
  • Name保持默认配置,Connection:http://prometheus:9090 (http://docker容器名称:9090)
  • 点击保存完成prometheus配置
  • 右上角点击Import dashboard 导入grafana.json文件
  • Name使用默认就行,DS_PROMETHEUS选择前面添加的prometheus
  • app_name保持和metric配置的namespace一致
  • 保存完成配置
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐