Prometheus 监控 Nginx 流量 (三)

介绍

基于Openresty和Prometheus、Consul、Grafana设计的,实现了针对域名和Endpoint级别的流量统计,使用Consul做服务发现、KV存储,Grafana做性能图展示。

最终展现图

主要实现流程

POST Json 注册服务 -> Consul Service <- Prometheus -> 定时抓取 http指标接口 Nginx

POST KV 提交Endpoint -> Consul KV Service <- Nginx 定时更新需要监控的Endpoint

Grafana 读取 -> Prometheus

优点

  • 基本实现自动化集中配置,各种接口使用非常简单
  • 通过Prometheus提供了非常丰富的查询维度,例如(域名、Endpoint、状态码、协议类型、method),当然还可以非常简单地添加更多。
  • Grafana图表功能强大,非常直观地查看各个服务的状态和发现异常。

安装和使用说明

本项目是基于Openresty开发,所以事先安装好Openresty,这个非常简单。

安装Consul,这是基于golang开发的服务自动发现工具,详细查看官方文档。https://www.consul.io/

安装Prometheus,这是一个时序数据库和监控工具,性能和存储十分可靠,把Prometheus配置发现服务使用Consul。官方文档:https://prometheus.io/docs/operating/configuration/#<consul_sd_config>

安装Grafana。https://grafana.com/

安装 扩展程序

克隆 lua-nginx-prometheus 仓库到Openresty服务器上。

克隆依赖Prometheus nginx-lua-prometheus 仓库到服务器上。

克隆依赖Consul lua-resty-consul 仓库到服务器上。

把lua-nginx-prometheus仓库中的 counter.conf文件复制到Openresty目录下的nginx/conf/conf.d目录内。

编辑 counter.conf 文件

lua_package_path "/Users/zl/Work/Counter/nginx-lua-prometheus/?.lua;;/Users/zl/Work/Counter/lua-resty-consul/lib/resty/?.lua;;/Users/zl/Work/Counter/lib/?.lua;;";

修改lua_package_path参数,把 lua-nginx-prometheus、nginx-lua-prometheus、lua-resty-consul三个目录位置指定,目录下一定是包含 ?.lua。

    consul_host = "<Your consul host ip>"
    consul_port = <Your consul port>

把consul的地址和端口替换上。

server {
    listen 9145;
    allow 127.0.0.1;
    deny all;
    access_log off;
    location /metrics {
        content_by_lua 'prometheus:collect()';
    }
}

添加allow 允许指定ip访问 指标接口。

启动Openresty后,试试 http://<ip>:9145/metrics

配置 Prometheus 服务发现功能

详细参考这个文档

https://prometheus.io/docs/operating/configuration/#<consul_sd_config>

完成后,通过Consul 的 http API进行注册服务。

curl -X PUT -d @test.json http://<ip>:<port>/v1/agent/service/register
{
  "ID": <定义唯一的ID>,
  "Name": "对应prometheus consul_sd_config",
  "Tags": [
    ""
  ],
  "Address": <Openresty地址>,
  "Port": 9145
}

注销服务

curl http://<ip>:<port>/v1/agent/service/deregister/<ID>

配置 Consul KV存储

增加域名和对应的Endpoint

curl --request PUT --data @test.json http://<ip>:<port>/v1/kv/domain/<api.qq.com>/routers

数组

[
"/users/[0-9]+/followers/",
"/users/[0-9]+/",
"/users/[0-9]+/comments/",
"/news"
]

配置Grafana 到 Prometheus上读取数据

详细文档参考 https://prometheus.io/docs/visualization/grafana/

创建图表

常见查询语句

sum(irate(nginx_http_request_duration_seconds_count{host="api.qq.com"}[5m])) by (status)

多台服务器合计每秒请求量,查询单个域名,group by 用状态码

sum(rate(nginx_http_request_duration_seconds_sum{host="api.qq.com",endpoint!="/ws"}[1m])) / sum(rate(nginx_http_request_duration_seconds_count{host="api.qq.com",endpoint!="/ws"}[1m]))

接口平均响应时间, 不包含 websocket接口

histogram 直方图非常有用,可以详细了解一下。

topk(5, sum(rate(nginx_http_request_duration_seconds_sum{host="api.qq.com",endpoint!="/ws"}[1h])) by (endpoint)/sum(rate(nginx_http_request_duration_seconds_count{host="api.qq.com",endpoint!="/ws"}[1h])) by (endpoint))

5个响应时间最大的,不包含 websocket接口


代码已经放到github上了

https://github.com/vovolie/lua-nginx-prometheus

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Prometheus可以监控nginx流量。通过使用Prometheus的插件或者导出器可以收集nginx监控数据。其中,可以使用nginx-vts-exporter来收集Nginx监控数据,并将其通过HTTP暴露给Prometheus进行消费。nginx-vts-exporter是一个简单的服务器,它会抓取Nginx的vts(虚拟主机统计)统计数据,并通过HTTP接口提供给Prometheus。默认情况下,nginx-vts-exporter监听的端口号是9913。 Prometheus具有多维数据模型,可以很好地对nginx的指标进行收集和存储,例如流量。你可以自定义Prometheus的数据标签,以便针对不同的机房和项目对nginx进行监控。这样,你可以根据需要对各个维度的流量进行可视化展示,也可以使用Grafana等工具来生成图像展示和监控报告。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [用PrometheusNginx监控](https://blog.csdn.net/weixin_41709748/article/details/88063548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [使用prometheus监控nginx](https://blog.csdn.net/Mob_com/article/details/89312413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值