0

Prometheus 监控 Nginx

 3 years ago
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.
neoserver,ios ssh client

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

https://grafana.com/dashboards/2949

https://prometheus.io/docs/instrumenting/exporters/#http


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK