Prometheus 监控 Nginx
source link: https://wsgzao.github.io/post/prometheus-nginx/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Nginx 官网有介绍各种监控方案,以前我们常用 stub_status 和 Log 日志来实现 Nginx 监控。本文主要介绍基于 Prometheus 的 2 种监控方案 nginx-lua-prometheus 和 nginx-vts-exporter,在真实的生产环境中你可能需要研究和选择哪种方法才是适合你的,F5 收购 Nginx 后的未来让我们一起拭目以待。
Prometheus 监控 Nginx
2019 年 03 月 25 日 - 初稿
阅读原文 - https://wsgzao.github.io/post/prometheus-nginx/
扩展阅读
Monitoring NGINX - https://www.nginx.com/blog/monitoring-nginx/
Nginx 监控
官网介绍的监控方案 - https://www.nginx.com/blog/monitoring-nginx/
Prometheus 集成的 HTTP exporter 方案 - https://prometheus.io/docs/instrumenting/exporters/#http
聊聊 Nginx 的监控 - https://zhuanlan.zhihu.com/p/34050716
使用 rpmbuild 制作 Nginx 的 RPM 包 - https://wsgzao.github.io/post/rpmbuild/
Prometheus 监控 Nginx
nginx-lua-prometheus
Nginx 需要添加 Lua 扩展
https://github.com/knyar/nginx-lua-prometheus
# 下载 redis_exporter
https://github.com/knyar/nginx-lua-prometheus/releases
wget https://github.com/knyar/nginx-lua-prometheus/archive/0.20181120.tar.gz
tar xf 0.20181120.tar.gz
cd nginx-lua-prometheus-0.20181120
# 创建 prometheus.lua 目录
mkdir -p /etc/nginx/lua/
cp prometheus.lua /etc/nginx/lua/
# 编辑 nginx 配置文件修改,注意修改 lua_package_path "/etc/nginx/lua/prometheus.lua";
vim /etc/nginx/nginx.conf
lua_shared_dict prometheus_metrics 10M;
lua_package_path "/etc/nginx/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"})
';
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})
';
# 创建 nginx-lua-prometheus
vim /etc/nginx/sites-available/nginx-lua-prometheus
server {
listen 9145;
location /metrics {
content_by_lua '
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()
';
}
}
# 创建软链接
cd /etc/nginx/sites-enabled/
ln -s ../sites-available/nginx-lua-prometheus
# 测试 Nginx 语法并 reload 测试 metrics
nginx -t
nginx -s reload
curl http://127.0.0.1:9145/metrics
# iptables rule for Prometheus Nginx
-A INPUT -s xxx -p tcp --dport 9145 -j ACCEPT
nginx-vts-exporter
https://github.com/hnlq715/nginx-vts-exporter
对方正在输入中
Grafana
nginx-lua-prometheus
https://grafana.com/dashboards/462
nginx-vts-exporter
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK