目录
需要学习以及掌握的知识
第一步:安装准备
1、安装nginx
2、安装prometheus
2_1、解压:prometheus-2.0.0.linux-amd64.tar.gz
2_2、移动到安装目录
2_3、将Prometheus配置为系统服务
2_4、重新加载系统文件,使prometheus.service文件生效
2_5、访问Prometheus
第二步:安装nginx相关模块
1、安装nginx-module-vts模块
2、yum安装nginx后再添加模块的方法
2_1、查看nginx现有的模块
2_2、安装nginx源码需要的第三方包
2_3、下载对应的nginx源码
2_4、添加nginx-module-vts模块儿
2_5、编译通过,继续验证
2_6、替换nginx文件并重启
2_7、修改nginx.conf文件
3、安装nginx-vts-exporter
3_1、创建nginx-vts-exporter.service文件
3_2、配置nginx-vts-exporter监控
4、安装grafana
4_1、下载和安装并且启动Grafana
4_2、访问Grafana并登录
需要学习以及掌握的知识
- 能在Linux安装prometheus
- 安装node_exporter监控远程linux服务器
- 安装mysqld_exporter监控远程mysql数据库
- 能在Linux安装grafana可视化工具
- 能在grafana中添加prometheus数据源
- 能在grafana中添加监控cpu负载的图形
- 能在grafana图形显示mysql监控数据
- 能在Linux安装nginx-module-vts
- 能在Linux安装nginx-vts-exporter
第一步:安装准备
-
1、安装nginx
安装nginx这里就不在详细的介绍,可以参考:Centos7搭建lnmp环境_Super乐的博客-CSDN博客
-
2、安装prometheus
Prometheus 官方网站:
https://prometheus.io/
上图是我已经下载好的prometheus压缩包
-
2_1、解压:prometheus-2.0.0.linux-amd64.tar.gz
tar -vxzf prometheus-2.0.0.linux-amd64.tar.gz
-
2_2、移动到安装目录
mv prometheus-2.0.0.linux-amd64 /usr/local/prometheus
-
2_3、将Prometheus配置为系统服务
#第一步:进入系统目录
cd /usr/lib/systemd/system
#第二步:创建文件
vim prometheus.service
#第三步:文件中添加一下内容
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
#第四步:保存并退出
:wq
-
2_4、重新加载系统文件,使prometheus.service文件生效
#添加系统文件的目的:方便启动、暂停和查看prometheus的运行状态
systemctl daemon-reload
prometheus启动过程变化如下图所示:
-
2_5、访问Prometheus
http://自己服务器ip:9090/graph
至此nginx和prometheus都已安装完成,接下来继续学习,通过prometheus怎么监控nginx
Prometheus监控Nginx主要用到以下三个模块
- 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数据,并存储在时序数据库中,可以使用PromSQL对时序数据进行查询和聚合
第二步:安装nginx相关模块
-
1、安装nginx-module-vts模块
nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。
nginx-module-vts的下载地址:https://github.com/vozlt/nginx-module-vts/archive/v0.1.18.tar.gz
nginx-vts-exporter的下载地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
上图是我已经下载好的压缩包
- 因我的nginx最早是用 yum 安装的,这里的nginx-modules-vts模块儿,是需要新添加的。所以这里在学习一下,yum安装nginx后再添加模块的方法。
- 如果是源码编译安装的nginx,而不是用 yum 安装的nginx可以忽略此步骤。
-
2、yum安装nginx后再添加模块的方法
其实yum安装nginx后想要添加新模块,只需对yum安装的nginx相同版本的源码进行编译后替换即可
-
2_1、查看nginx现有的模块
nginx -V
现有的nginx模块如上图所示
-
2_2、安装nginx源码需要的第三方包
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
-
2_3、下载对应的nginx源码
通过nginx -V 可以知道yum安装的nginx版本:nginx version: nginx/1.20.1,下载对应的源码。
#第一步:下载源码文件(根据自己的版本下载即可)
wget http://nginx.org/download/nginx-1.20.1.tar.gz
#第二步:解压nginx-1.20.1.tar.gz文件
tar -zxvf nginx-1.20.1.tar.gz
#移动nginx-1.20.1解压后的目录(是否需要移动,自己决定)
#我移动的原因:因为在Linux中的目录结构是有讲究的,是有一定规范的。
/usr/local :用户级的软件目录,用来存放用户安装编译的软件,用户自己编译安装的软件也默认存放在这里
/usr/local/src :这个目录是存放用户编译软件所用的源码的
mv nginx-1.20.1 /usr/local/src/
-
2_4、添加nginx-module-vts模块儿
#第一步:将nginx-module-vts-0.1.18目录复制到/usr/local/src/nginx-1.20.1/
#nginx-module-vts-0.1.18:是模块儿目录
#/usr/local/src/nginx-1.20.1/:是nginx源码目录
cp -r nginx-module-vts-0.1.18 /usr/local/src/nginx-1.20.1/
#第二步:将原有的nginx和nginx.conf配置
#暂时都备份到各自所在的目录,以备操作失误时(小心手滑),还原使用。
cp /usr/sbin/nginx /usr/sbin/nginx_backup
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
#第三步:编译nginx,添加模块(这里之所以这多,是因为使用 nginx -V查看时就很多,我就都重新编译添加了一遍)
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --add-module=/usr/local/src/nginx-1.20.1/nginx-module-vts-0.1.18
编译过程中可能遇到的错误提示以及解决方法记录:
错误提示1:error: the HTTP XSLT module requires the libxml2/libxslt
# 安装 libxml2-devel.x86_64 库
sudo yum install -y libxml2-devel.x86_64# 安装 libxslt-devel.x86_64 库
sudo yum install -y libxslt-devel.x86_64错误提示2:./configure: error: the HTTP image filter module requires the GD library.
#安装GD库yum install gd gd-devel
错误提示3:./configure: error: perl module ExtUtils::Embed is required
#安装perl
yum -y install perl-devel perl-ExtUtils-Embed
错误提示4:error: the Google perftools module requires the Google perftools
#安装gperftools
yum -y install gperftools
解决完错误,重新编译安装nginx添加nginx-module-vts模块儿
-
2_5、编译通过,继续验证
#输入make
make
正常情况下,make 完,就该执行 make install 了。网上有的文章说:make完成后不要继续输入“make install”,以免现在的nginx出现问题,这样说也对。但是经过我的验证,如果不想执行“make install”命令, 在覆盖原有nginx的就会提示错误。
错误提示:cp: cannot create regular file ‘/usr/sbin/nginx’: Text file busy错误意思:当前nginx正在使用,不用覆盖或者替换。
解决方法:执行 nginx -s stop 终止nginx的运行。如果nginx被终止了,担心执行“make install”时,nginx出现问题那就多余了。
-
2_6、替换nginx文件并重启
#执行命令
cp objs/nginx /usr/sbin/
#输入 y 即可
cp: overwrite ‘/usr/sbin/nginx’? y
#重启nginx
systemctl start nginx
-
2_7、修改nginx.conf文件
目前nginx.conf文件有两个。
第一个nginx.conf文件的位置是:/usr/local/src/nginx-1.20.1/conf/nginx.conf 该路径是源码编译时nginx的配置文件路径第二个nginx.conf文件的位置是:/etc/nginx/nginx.conf
我修改的是/etc/nginx/nginx.conf文件
PS:修改/usr/local/src/nginx-1.20.1/conf/nginx.conf文件待测试
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;
server {
location /nginx_status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
改完nginx.conf以后,重启nginx:systemctl restart nginx
访问地址:http://服务器ip/nginx_status结果如下图所示
-
3、安装nginx-vts-exporter
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
# 第一步:执行命令下载nginx-vts-exporter
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
#第二步:解压nginx-vts-exporter
tar -zxf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
#第三步:移动文件
cp nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin
-
3_1、创建nginx-vts-exporter.service文件
# 第一步:文件内容如下
[Unit]
Description=nginx-vts-exporter
Documentation=https://prometheus.io/
[Service]
Type=simple
User=root
Restart=on-failure
ExecStart=/usr/local/bin/nginx-vts-exporter \
-nginx.scrape_timeout 10 \
-nginx.scrape_uri http://10.10.10.86/nginx_status/format/json
[Install]
WantedBy=multi-user.target
#需要注意的地方
-nginx.scrape_uri 后面跟的路径,请填写自己的路径(如果是跟着文章从上安装到现在的,那就只需要修改一下ip地址即可)。
# 第二步:重新加载系统文件
systemctl daemon-reload
# 第三步:设置自启动
systemctl enable nginx-vts-exporter
执行完会提示:Created symlink from /etc/systemd/system/multi-user.target.wants/nginx-vts-exporter.service to /usr/lib/systemd/system/nginx-vts-exporter.service.
-
3_2、配置nginx-vts-exporter监控
#如果已经忘记prometheus的安装位置,执行命令
whereis prometheus
prometheus: /usr/local/prometheus
#进入到prometheus安装目录
cd /usr/local/prometheus/
#修改prometheus.yml配置文件
vim prometheus.yml
配置文件如下
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
#新增的配置项 myconfig 目录 和 nginx-hosts.yml文件都是自己创建的。
- job_name: 'nginx-hosts'
static_configs:
- targets: ['10.10.10.86:9913']
#file_sd_configs:
#- files: ['/usr/local/prometheus/myconfig/nginx-hosts.yml']
# refresh_interval: 5s
-
4、安装grafana
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。 Grafana七大特点:
①可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
②报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
③通知:警报更改状态时,它会发出通知。接收电子邮件通知。
④动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
⑤混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
⑥注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
⑦过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。
Grafana官方下载地址:Download Grafana | Grafana Labs
-
4_1、下载和安装并且启动Grafana
# 第一步:这里下载的rpm包,下载后直接rpm -ivh安装就OK
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.6-1.x86_64.rpm
# 第二步:rpm 安装
rpm -ivh grafana-enterprise-9.3.6-1.x86_64.rpm
# 第三步:启动
systemctl start grafana-server.service
# 第四步:设置开启自启动
systemctl enable grafana-server.service
开机自启动设置成功结果如下:
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
# 第五步:确认端口(grafana默认端口是3000)
lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
grafana-s 8146 grafana 15u IPv6 67871 0t0 TCP *:hbci (LISTEN)
-
4_2、访问Grafana并登录
用户默认是:admin 密码默认是:admin 输入登录即可。
登录成功,会提示重新设定密码,重新设定密码再次登录即可。
登录成功以后的界面
把prometheus收集的数据做为数据源,添加到grafana
选择prometheus
填写配置项
添加模板
添加模板点击:Import 按钮如下图所示