Hyperf3.1接入服务器监控

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 复制代码
<?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 复制代码
<?php

declare(strict_types=1);

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

6、安装prometheus(日志采集)和grafana(面板)
prometheus安装前的目录包含data文件夹和空白的prometheus.yml文件

php 复制代码
#相关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

php 复制代码
# 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:9090http://docker容器名称:9090
  • 点击保存完成prometheus配置
  • 右上角点击Import dashboard 导入grafana.json文件
  • Name使用默认就行,DS_PROMETHEUS选择前面添加的prometheus
  • app_name保持和metric配置的namespace一致
  • 保存完成配置
相关推荐
SRETalk8 天前
Zabbix、Prometheus、Grafana、Nightingale,四个监控如何选型?
zabbix·grafana·prometheus·nightingale
虚无境16 天前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
睡不醒男孩03082316 天前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
心之伊始18 天前
Spring Boot Actuator + Micrometer 实战:自定义业务指标并接入 Prometheus 观测接口耗时
java·spring boot·prometheus·actuator·micrometer
何中应18 天前
Grafana面板没有数据问题排查
linux·grafana·prometheus
爱吃龙利鱼19 天前
K8s 监控实战:victoria-metrics-k8s-stack 高可用部署,资源占用直降 70%,比 Prometheus 省 5 倍磁盘
docker·kubernetes·prometheus
就改了19 天前
微服务指标监控一站式搭建:Prometheus抓取+Grafana大屏展示详解
微服务·grafana·prometheus
江南风月19 天前
WGCLOUD保姆级教程最新版整理
运维·zabbix·运维开发·prometheus·日志审计
江南风月19 天前
Hermes Agent 接入WGCLOUD实战:打造团队 AI 智能运维解决方案
运维·zabbix·运维开发·prometheus
蓝宝石的傻话19 天前
VictoriaMetrics指标流聚合三年回顾与现状(2026)
go·prometheus·victoriametrics