[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控 
                                                    
                        
                    
                    
  
                    
                    参考: hyperf利用prometheus接入服务监控,使用grafana实现数据的实时监控显示
hyperf文档
本文章记录本人的第一次部署所踩的坑,未深入了解prometheus 和grafana 如有不当的地方请指正,谢谢!
一. 使用docker-compose部署
version: '2'
networks:
  monitor:
    driver: bridge
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    hostname: prometheus
    restart: always
    volumes:
        # 将你的prometheus.yml文件放在当前文件同级下,或自定义
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      #- /home/prometheus/node_down.yml:/etc/prometheus/node_down.yml
    ports:
      - "9090:9090"
    networks:
      monitor:
        ipv4_address: 172.18.0.3
  grafana:
    image: grafana/grafana
    container_name: grafana
    hostname: grafana
    restart: always
    volumes:
    # 创建 etc目录,data目录存储grafana的数据
    - ./etc:/etc/grafana
    - ./data:/var/lib/grafana
    ports:
      - "3000:3000"
    networks:
      monitor:
        ipv4_address: 172.18.0.4
  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    hostname: node-exporter
    restart: always
    ports:
      - "9100:9100"
    networks:
      monitor:
        ipv4_address: 172.18.0.2
注意:为了避免每次docker-compose 启动之后 ip会发生变化,我这里配置了固定IP,请根据个人实际情况配置,或参阅docker相关文档
使用命令docker-compose up启动容器
二. 项目配置
因为对 prometheus的不了解,我直接使用hyperf默认配置
引入组件
composer require hyperf/metric发布默认配置文件
php bin/hyperf.php vendor:publish hyperf/metric在
config/autoload/dependencies.php中添加对应的Redis存储return [ \Prometheus\Storage\Adapter::class => \Hyperf\Metric\Adapter\Prometheus\RedisStorageFactory::class, ];在上面的第一篇文章中,老哥说使用
swoole_table更高效,我还不知道如何使用,有兴趣的老哥可以自己研究一下。增加中间件
在config/autoload/middlewares.php文件中增加对应的中间件return [ 'http' => [ \Hyperf\Metric\Middleware\MetricMiddleware::class, ], ];添加
metrics路由Router::get('/metrics', function(){ $registry = Hyperf\Utils\ApplicationContext::getContainer()->get(Prometheus\CollectorRegistry::class); $renderer = new Prometheus\RenderTextFormat(); return $renderer->render($registry->getMetricFamilySamples()); });这样对项目的配置就完成了
三. prometheus的配置
 在  prometheus.yml文件中增加对应的配置
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node'
     # 注意这里的IP需要填写 node-exporter 容器的ip  
    static_configs:
    - targets: ['172.18.0.2:9100']
  - job_name: 'skeleton'
    # 这里填写的是宿主机的ip
    static_configs:
    - targets: ['10.0.75.1:9502']
配置完成之后,再次 dokcer-compose up
访问 http://localhost:9090 查看 prometheus
![[Hyperf]  在Hyperf框架中使用prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/KCN9pbJlBS.png!large)
如图所示,node 和 skeleton 都已启动
四. Grafana 配置
上面都配置完了,开始配置 Grafana
打开 http://localhost:3000 默认密码是: admin/admin
- 新建
datasource
左侧边栏add datasources选择Prometheus 
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/UJygfIos1n.png!large)
- 配置 
datasource 
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/egc52EVNmZ.png!large)
填写容器的IP:端口
- 导入
hyperf官方的JSON文件 
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/Aw2cEdBUkx.png!large)
导入之后需要将默认的 app_name改成你自己的
如:admin-api 就需要填写admin_api 改成下划线形式
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/N9a9SnXRyf.png!large)
- 查看监控
在Home中你就可以看到了 
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/WOELFeGOo9.png!large)
点进去查看
![[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控](https://cdn.learnku.com/uploads/images/202003/05/28269/e2PWrRa107.png!large)
到此结束,小白第一次配置监控,还有很多东西没弄清楚
本作品采用《CC 协议》,转载必须注明作者和本文链接
          
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: