zoukankan      html  css  js  c++  java
  • Prometheus监控Nginx

    转载自:https://www.cnblogs.com/you-men/p/13173245.html

    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,内网 	测试环境
    
    部署Promehteus请看我前面写的文章
    
    https://www.cnblogs.com/you-men/p/12839535.html
    
    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_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)
    
    # 下载编译模块
    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
    
    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,配置示例:
    
    server {
    ...
    vhost_traffic_status off;
    ...
    }
    
        假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。
    
        安装完vts模块后,可以通过nginx status接口进行监控数据的查看,比如:http://127.0.0.1/status:
    
        exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。
    
    它的安装使用很简单,开箱即用
    
    wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
    
    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
    
    # 配置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状态
    
        此处我们拿prometheus做例子,虽然说prometheus能展示一些图表,但对比Grafana,那只是过家家,接下来我们在同一个服务器安装Grafana服务,用来展示prometheus收集到的数据
    
    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
    
    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/
    
    vim /usr/local/grafana/conf/defaults.ini
    data = /data/grafana/data
    logs = /data/grafana/log
    plugins = /data/grafana/plugins
    provisioning = /data/grafana/conf/provisioning
    
    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
    
    # grafana虽然已经安装好了,但是这个时候还没有数据,没办法作图。
    # 下面我们把grafana和prometheus关联起来,也就是在grafana中添加添加数据源。
    # 在配置页面点击添加数据源,然后选择prometheus,输入prometheus服务的参数即可。
    
    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
    
        通过以上部署只能拿到默认的指标,生产中可能还会需要监控uri的请求量,监控IP访问情况(同一个IP出现大量访问时可能被攻击),获取不同agent请求量用于分析等,通过vts模块的vhost_traffic_status_filter_by_set_key功能可以自定义需要获取的指标。此处的指标需要加到对应的server配置中.
    
    # 添加自定义配置
    $ 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;     #请求路径统计
        }
    
    }  
    
  • 相关阅读:
    electron-vue脚手架项目初始化时提示: Failed to download repo simulatedgreg/electron-vue: Response code Server Error)
    SqlServer在附加数据库时提示:无法打开物理文件**.mdf 操作系统错误拒绝访问
    ASP.NET的项目怎样在WindowsServer上部署
    Express中错误处理中间件的使用
    Express中间件的应用-路由保护(登录限制)、网站维护、页面404
    ASP.NET中序列化与反序列化-以显示上一次登录的信息为例
    ASP.NET中使用Cache类来缓存页面的信息
    ASP.NET中使用一般处理程序ashx作为后台处理实现响应get和post请求
    ASP.NET中实现复用代码自定义用户控件UserControl的使用
    js加载更多
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/14769569.html
Copyright © 2011-2022 走看看