hyperf利用prometheus接入服务监控,使用grafana实现数据的实时监控显示

更新于 2019-12-31  约 9 分钟

1.为什么要接入服务监控

先上图看看效果:
QQ截图20191230145357.png

微服务治理的一个核心需求便是服务可观察性,从图上可以很直观的看到我们想要监控的服务器的各项自定义指标.而且支持自定义扩展图表,十分的方便,满足后期更多的需求.

2.如何接入

先使用docker-compose 安装prometheus和grafana服务,docker-compose.yml 如下:

version: '3'

networks:
    monitor:
        driver: bridge

services:
    prometheus:
        image: prom/prometheus
        container_name: prometheus
        hostname: prometheus
        restart: always
        volumes:
            - /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
            #- /home/prometheus/node_down.yml:/etc/prometheus/node_down.yml
        ports:
            - "9090:9090"
        networks:
            - monitor

    grafana:
        image: grafana/grafana
        container_name: grafana
        hostname: grafana
        restart: always
        ports:
            - "3000:3000"
        networks:
            - monitor

    node-exporter:
        image: prom/node-exporter
        container_name: node-exporter
        hostname: node-exporter
        restart: always
        ports:
            - "9100:9100"
        networks:
            - monitor
            

hyperf的配置如官方所描述:

安装

通过 Composer 安装组件


composer require hyperf/metric

配置 Prometheus


使用 Prometheus 时,在配置文件中的 /config/autoload/metric.php ,增加 Prometheus 的具体配置。

use Hyperf\Metric\Adapter\Prometheus\Constants;

return [
    'default' => env('TELEMETRY_DRIVER', 'prometheus'),
    'use_standalone_process' => env('TELEMETRY_USE_STANDALONE_PROCESS', true),
    'enable_default_metric' => env('TELEMETRY_ENABLE_DEFAULT_TELEMETRY', true),
    'default_metric_interval' => env('DEFAULT_METRIC_INTERVAL', 5),
    'metric' => [
        'prometheus' => [
            'driver' => Hyperf\Metric\Adapter\Prometheus\MetricFactory::class,
            'mode' => Constants::SCRAPE_MODE,
            'namespace' => env('APP_NAME', 'skeleton'),
            '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', '9091'),
            'push_interval' => env('PROMETHEUS_PUSH_INTERVAL', 5),
        ],
    ],
];

3.运行使用

运行docker-compose.yml的服务 docker-compose up,启动hyperf,
访问http://ip:3000/ 访问grafana的图像界面如下:
账号密码填入admin进入,
QQ截图20191230153302.png

进入主界面,得先添加数据库才能保存对应数据,点击数据库,添加数据库,添加prometheus,填写对应地址后保存
image.png
image.png
image.png

进入后点击如图所示,添加对应的指标
image.png
image.png
image.png
metric指标输入hyperf的默认名称skeleteon,会提示hyperf默认提交的数据字段,选中你需要的,图表会马上显示当前数据指标,根据相关提示保存就能实现监控数据指标了。

image.png

4.高级进阶

hyperf默认的metric组件的监听器linster监控的数据可能并不能满足我们全方位的需要,可以对其进行改造,输出更多样化的统计指标(具体请阅读源码自行理解,这里不展开说.)。如果需要
收集http的运行参数,比如访问ip或者耗时等,得在中间件进行扩展,
先在配置文件中的 /config/autoload/middleware.php中添加

return [
    'http' => [
         \Hyperf\Metric\Middleware\MetricMiddleware::class,
    ],
];

动手在MetricMiddleware的process方法扩展你自己想要的数据指标代码吧!

注意

由于中间件会影响程序执行速度,通过测试,直接在中间件将数据写入prometheus严重影响执行效率。故可以通过写入到swoole_table的高性能内存,再从定时器写入prometheus,并发性能测试结果反映,这办法对性能影响极低,并且满足日常监控的需求!

性能测试


以下是测试数据对比:
image.png

image.png

image.png

image.png

结果显而易见,使用高性能内存+异步处理才能更高效的去监控整个系统。

阅读 464更新于 2019-12-31

推荐阅读
目录