前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >05 . Prometheus监控Nginx

05 . Prometheus监控Nginx

作者头像
iginkgo18
修改2021-05-14 14:57:14
1.3K0
修改2021-05-14 14:57:14
举报
文章被收录于专栏:devops_k8sdevops_k8s
List
代码语言:javascript
复制
  CentOS7.3
  prometheus-2.2.1.linux-amd64.tar.gz
  nginx-module-vts

节点名

IP

软件版本

硬件

网络

说明

Prometheus

192.168.0.106

list 里面都有

2C4G

Nat,内网

测试环境

Nginx

192.168.0.107

list 里面都有

2C4G

Nat,内网

测试环境

部署Prometheus

部署Promehteus请看我前面写的文章

https://www.cnblogs.com/you-men/p/12839535.html

部署Nginx
三个模块
代码语言:javascript
复制
nginx-module-vts:Nginx virtual host traffic status module,
# Nginx的监控模块,能够提供JSON格式的数据产出。

nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。
# 主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。

Prometheus:
# 监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。
Nginx-module-vts模块编译
代码语言:javascript
复制
# nginx_vts_exporter依赖nginx-module-vts模块,安装此模块无需任何其他依赖。模块与Nginx的版本兼容性如下:

1.11.x (last tested: 1.11.10)
1.10.x (last tested: 1.10.3)
1.8.x (last tested: 1.8.0)
1.6.x (last tested: 1.6.3)
1.4.x (last tested: 1.4.7)
部署nginx-module-vts
代码语言:javascript
复制
# 下载编译模块
git clone git://github.com/vozlt/nginx-module-vts.git
  
# 编译配置
--add-module=/path/to/nginx-module-vts
# 下载官方的软件包并编译进vts模块,例如:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_sysguard_module  --add-module=nginx-module-vts

# 安装Nginx
#!/usr/bin/env bash
version="nginx-1.14.2.tar.gz"
user="nginx"
nginx=${version%.tar*}
path=/usr/local/src/$nginx
echo $path
if ! ping -c2 www.baidu.com &>/dev/null
then
	echo "网络不通,无法安装"
	exit
fi

yum install -y gcc gcc-c++ openssl-devel pcre-devel make zlib-devel wget psmisc
if [ ! -e $version ];then
	wget http://nginx.org/download/$version
fi
if ! id $user &>/dev/null
then
	useradd $user -M -s /sbin/nologin
fi

if [ ! -d /var/tmp/nginx ];then
	mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
fi
tar xf $version -C /usr/local/src
cd $path
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx   --add-module=/usr/local/src/nginx-1.14.0/nginx-module-vts/ && make && make install
配置nginx.conf
代码语言:javascript
复制
http {
    	vhost_traffic_status_zone;
    	vhost_traffic_status_filter_by_host on;
 
server {
  		location /status {
        		vhost_traffic_status_display;
        		vhost_traffic_status_display_format html;
      }
   }
}
配置建议

1 . 打开vhost过滤: vhost_traffic_status_filter_by_host on; 开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上 2 . 在不想统计流量的server区域禁用vhost_traffic_status,配置示例:

代码语言:javascript
复制
server {
...
vhost_traffic_status off;
...
}

假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。

查看监控数据

安装完vts模块后,可以通过nginx status接口进行监控数据的查看,比如:http://127.0.0.1/status:

配置Nginx-vts-exporter

exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。

它的安装使用很简单,开箱即用

下载软件包
代码语言:javascript
复制
wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
配置运行
代码语言:javascript
复制
tar xvf nginx-vts-exporter-0.9.1.linux-amd64.tar.gz 
nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json
  
# 推荐exporter和nginx安装在同一台机器上,如果不在同一台主机,把scrape_uri改为nginx主机的地址。
# nginx_vts_exporter的默认端口号:9913,对外暴露监控接口http://xxx:9913/metrics.

# 我们可以访问浏览器 IP:9913
将node exporter配置到prometheus里
代码语言:javascript
复制
# 配置Prometheus,收集node exporter的数据
# 可以看到node exporter启动后也就是暴露了9100端口,并没有把数据传到prometheus,
# 我们还需要在prometheus中配置,让prometheus去pull这个接口的数据。
# 我们去监控主机编辑prometheus.yml文件,修改最后几行,然后重启服务
vim /usr/local/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'nginx'
    static_configs:
    - targets: ['192.168.0.107:9913']

# node节点的targets处的IP填写你要监控的node的IP.        
systemctl restart prometheus
# 我们登录到Prometheus主机,看下这个节点是不是up状态
配置Grafana

此处我们拿prometheus做例子,虽然说prometheus能展示一些图表,但对比Grafana,那只是过家家,接下来我们在同一个服务器安装Grafana服务,用来展示prometheus收集到的数据

下载并解压安装包
代码语言:javascript
复制
wget https://dl.grafana.com/oss/release/grafana-6.4.2.linux-amd64.tar.gz
tar xvf grafana-6.4.2.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/grafana-6.4.2/ /usr/local/grafana
创建grafana用户及数据存放目录
代码语言:javascript
复制
useradd -s /sbin/nologin -M grafana
mkdir /data/grafana
mkdir /data/grafana/plugins
mkdir /data/grafana/provisioning
mkdir /data/grafana/data
mkdir /data/grafana/log
chown -R grafana:grafana /usr/local/grafana/  
chown -R grafana:grafana  /data/grafana/
修改配置文件
代码语言:javascript
复制
vim /usr/local/grafana/conf/defaults.ini
data = /data/grafana/data
logs = /data/grafana/log
plugins = /data/grafana/plugins
provisioning = /data/grafana/conf/provisioning
把grafana-server添加到systemd中
代码语言:javascript
复制
vim /usr/lib/systemd/system/grafana-server.service
[Unit]
Description=Grafana
After=network.target
[Service]
User=grafana
Group=grafana
Type=notify
ExecStart=/usr/local/grafana/bin/grafana-server -homepath /usr/local/grafana
Restart=on-failure
[Install]
WantedBy=multi-user.target


systemctl start grafana-server && systemctl enable graana-server

启动服务,并用web访问http://IP:3000,默认3000端口,admin/admin

添加数据源
代码语言:javascript
复制
# grafana虽然已经安装好了,但是这个时候还没有数据,没办法作图。
# 下面我们把grafana和prometheus关联起来,也就是在grafana中添加添加数据源。
# 在配置页面点击添加数据源,然后选择prometheus,输入prometheus服务的参数即可。
添加nginx模板
配置GeoIP模块
代码语言:javascript
复制
yum -y install epel-release geoip-devel

/usr/local/src/nginx-1.14.0
./configure --add-module=/root/nginx-1.14.0/nginx-module-vts/ --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_geoip_module
make 

ldd /usr/local/nginx/sbin/nginx |grep libGeoIP
	libGeoIP.so.1 => /lib64/libGeoIP.so.1 (0x00007f69b1645000)

# 引用地址库
vim /usr/local/nginx/conf/nginx.conf
http {

    ...

    vhost_traffic_status_zone;
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    ...
}    

# 重启nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
通过vts自定义key

通过以上部署只能拿到默认的指标,生产中可能还会需要监控uri的请求量,监控IP访问情况(同一个IP出现大量访问时可能被攻击),获取不同agent请求量用于分析等,通过vts模块的vhost_traffic_status_filter_by_set_key功能可以自定义需要获取的指标。此处的指标需要加到对应的server配置中.

代码语言:javascript
复制
# 添加自定义配置
$ vim /usr/local/nginx/conf/vhost/test.conf
server {
    listen      80;
    server_name localhost;

    vhost_traffic_status_filter_by_set_key $uri uri::$server_name;     #每个uri访问量
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;     #不同国家/区域请求量
    vhost_traffic_status_filter_by_set_key $status $server_name;     #http code统计
    vhost_traffic_status_filter_by_set_key $upstream_addr upstream::backend;     #后端转发统计
    vhost_traffic_status_filter_by_set_key $remote_port client::ports::$server_name;     #请求端口统计
    vhost_traffic_status_filter_by_set_key $remote_addr client::addr::$server_name;     #请求IP统计

    location ~ ^/storage/(.+)/.*$ {
        set $volume $1;
        vhost_traffic_status_filter_by_set_key $volume storage::$server_name;     #请求路径统计
    }

}  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • List
  • 部署Prometheus
  • 部署Nginx
    • 三个模块
      • Nginx-module-vts模块编译
        • 部署nginx-module-vts
          • 配置nginx.conf
            • 配置建议
              • 查看监控数据
              • 配置Nginx-vts-exporter
                • 下载软件包
                  • 配置运行
                    • 将node exporter配置到prometheus里
                    • 配置Grafana
                      • 下载并解压安装包
                        • 创建grafana用户及数据存放目录
                          • 修改配置文件
                            • 把grafana-server添加到systemd中
                              • 添加数据源
                                • 添加nginx模板
                                • 配置GeoIP模块
                                  • 通过vts自定义key
                                  相关产品与服务
                                  前端性能监控
                                  前端性能监控(Real User Monitoring,RUM)是一站式前端监控解决方案,专注于 Web、小程序等场景监控。前端性能监控聚焦用户页面性能(页面测速,接口测速,CDN 测速等)和质量(JS 错误,Ajax 错误等),并且联动腾讯云应用性能监控实现前后端一体化监控。用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面质量的全方位守护,真正做到低成本使用和无侵入监控。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档