nginx-lua-prometheus是为专为nginx设计的Prometheus监控脚【jiǎo】本,使用【yòng】lua开发,所以需要nginx支持lua插件运行,关于如【rú】何【hé】让【ràng】nginx支持lua这里就不【bú】说了,网上很容易【yì】搜到教程。
nginx-lua-prometheus目前【qián】网络上我见过两个版本,一个比较【jiào】新的,一个比较古【gǔ】老【lǎo】的,比较新的尝试后【hòu】发现存在不【bú】兼【jiān】容【róng】问题【tí】,我的nginx版【bǎn】本是1.14,后来使用了比较老的版本,不【bú】过功能相似。
github地址:https://github.com/jialj/nginx-lua-prometheus
1.在server模块下面添加下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | lua_shared_dict prometheus_metrics 10M; lua_package_path "你的lua文件目录/prometheus.lua"; init_by_lua ' prometheus = require("prometheus").init("prometheus_metrics") metric_requests = prometheus:counter( "nginx_http_requests_total", "Number of HTTP requests", {"host", "status"}) metric_latency = prometheus:histogram( "nginx_http_request_duration_seconds", "HTTP request latency", {"host"}) metric_connections = prometheus:gauge( "nginx_http_connections", "Number of HTTP connections", {"state"}) metric_requests_uri = prometheus:counter( "nginx_http_requests_uri_total", "Number of HTTP requests_uri", {"host","uri", "status", "method"}) '; log_by_lua ' metric_requests:inc(1, {ngx.var.server_name, ngx.var.status}) metric_latency:observe(tonumber(ngx.var.request_time), {ngx.var.server_name}) metric_requests_uri:inc(1, {ngx.var.server_name,ngx.var.document_uri, ngx.var.status, ngx.var.request_method}) '; |
上面的metric_requests_uri模块是官【guān】方例子【zǐ】中没有的,是我自己添【tiān】加的【de】,取的是uri的访问记录【lù】,nginx中document_uri是不包含【hán】参数【shù】的,具【jù】体的参【cān】数都可以自行修改。
2.新建metrics对外导出监控数据
新建虚拟主机,端口自定义,添加下面的模块
1 2 3 4 5 6 7 8 | location /metrics { content_by_lua_block { metric_connections:set(ngx.var.connections_reading, {"reading"}) metric_connections:set(ngx.var.connections_waiting, {"waiting"}) metric_connections:set(ngx.var.connections_writing, {"writing"}) prometheus:collect() } } |
保存,重【chóng】载【zǎi】nginx配置,访问metrics目【mù】录,可以看到监控数据
gafana上用的图【tú】是 462,因为uri是自己【jǐ】加【jiā】的,需要【yào】添加下面的查询语句【jù】
1 | sum(irate(nginx_http_requests_total{role=~"$role",host!="127.0.0.1"}[30s])) |
版权所有:深圳市网商在线科技有限公司
友情链接: