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一致
  • 保存完成配置
相关推荐
Adorable老犀牛2 小时前
MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南
mysql·prometheus·mariadb
成为你的宁宁6 小时前
【K8S黑盒监控实践:Probe配置、Prometheus验证与Grafana可视化】
kubernetes·grafana·prometheus
成为你的宁宁6 小时前
【Prometheus Operator监控K8S Nginx】
nginx·kubernetes·prometheus
人生匆匆7 小时前
部署cadvisor+prometheus+grafana
grafana·prometheus
成为你的宁宁7 小时前
【K8S使用Helm部署MySQL一主多从并集成Prometheus监控】
mysql·kubernetes·prometheus
SuperArc19991 天前
Grafana相关数据可视化平台基础教程-序言
运维·信息可视化·数据分析·grafana
小黑蛋学java2 天前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
Adorable老犀牛2 天前
nginx_exporter:Prometheus 监控 Nginx 基础指标
运维·nginx·prometheus
成为你的宁宁2 天前
【基于 Prometheus Operator 实现 K8s 环境下 Redis Cluster 集群监控部署】
redis·kubernetes·prometheus