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
有兴趣的可以看看啊。
Prometheus 监控 Nginx 流量 (三)的更多相关文章
- 05 . Prometheus监控Nginx
List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz nginx-module-vts 节点名 IP 软件版本 硬件 网络 说明 Prometheus ...
- Prometheus监控Nginx
转载自:https://www.cnblogs.com/you-men/p/13173245.html CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz ng ...
- 用prometheus监控Nginx
GitHub上官方地址:https://github.com/knyar/nginx-lua-prometheus 告警规则地址:https://awesome-prometheus-alerts.g ...
- Prometheus(三):Prometheus监控交换机(snmp)
默认已安装Prometheus服务,服务地址:192.168.56.200 一.获取交换机snmp信息 snmp服务IP(交换机IP):172.20.2.83 snmp community:dfete ...
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- Prometheus监控神器-Alertmanager篇(1)
本章节主要涵盖了Alertmanager的工作机制与配置文件的比较详细的知识内容,由浅入深的给大家讲解. 警报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警 ...
- Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践
0x00 初衷 最近参与的几个项目,无一例外对监控都有极强的要求,需要对项目中各组件进行详细监控,如服务端API的请求次数.响应时间.到达率.接口错误率.分布式存储中的集群IOPS.节点在线情况.偏移 ...
- Kubernetes容器集群管理环境 - Prometheus监控篇
一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...
- Kubernetes 系列(五):Prometheus监控框架简介
由于容器化和微服务的大力发展,Kubernetes基本已经统一了容器管理方案,当我们使用Kubernetes来进行容器化管理的时候,全面监控Kubernetes也就成了我们第一个需要探索的问题.我们需 ...
随机推荐
- Lodop打印控件里SET_PRINT_STYLE和SET_PRINT_STYLEA
LODOP.SET_PRINT_STYLE 对该语句后面的打印项样式设置效果.LODOP.SET_PRINT_STYLEA 针对第一个参数设置的打印项样式设置效果.这两个语句,作用范围不同. 在设置字 ...
- codeforces625C
K-special Tables CodeForces - 625C 人们经常做一些疯狂的事来凸显自己.有的人跳舞,有的人撩妹,有的人立志成为顶级程序猿(例如某peng),还有的人喜欢收集有趣的数学对 ...
- BZOJ3771 Triple(FFT+容斥原理)
思路比较直观.设A(x)=Σxai.先把只选一种的统计进去.然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2.现在得到了选两种的每种权值的方案数,再把这个卷上A(x). ...
- jQuery添加和删除元素
添加新的 HTML 内容 我们将学习用于添加新内容的四个 jQuery 方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在 ...
- 【AtCoder010】A - Addition(奇偶)
AtCoder Grand Contest 010 A题 题目链接 题意 n个数,每次取两个奇偶性相同的数用他们的和代替他们,问最后能否只剩下一个数. 题解 因为奇偶相同的两个数之和一定是偶数,所以Y ...
- cf983E NN Country (倍增+dfs序+树状数组)
首先可以求出从某点做$2^k$次车能到的最浅的点,这个只要dfs一下,把它的孩子能到的最浅的点更新过来就可以 然后倍增地往上跳,不能跳到lca的上面,记录坐车的次数ans 此时有三种情况(设最远能跳到 ...
- SDL2.0 VLC ubuntu安装和黑屏问题
开发环境安装: 1,执行:"sudo apt-get build-dep libsdl1.2",确定依赖库都装全了. sdl2.0没有正式发布到ubuntu,使用下面方法安装: h ...
- qbxt的题:找一个三元环
有向图中找一个三元环 题意: 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-1)/2 场),且每场一定能分出胜负.现在,你需要在其中找到三个人构成的这样的局面:A战胜B,B战 ...
- <? extends T>和<? super T>的理解
背景:对泛型中使用super和extends关键字进行分析总结. 问题: public class TestExtend { public static void main(String[] args ...
- 结尾非零数的奇偶性(问题来源于PythonTip)
给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性.如果为奇数输出1,偶数则输出0.. 例如:L=[2,8,3,50] 则输出:0 L = [2,8,3,50] c2 = 0 ...