Linux监控之prometheus学习

目录

需要学习以及掌握的知识

第一步:安装准备

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 

上图是我已经下载好的压缩包

  1. 因我的nginx最早是用 yum 安装的,这里的nginx-modules-vts模块儿,是需要新添加的。所以这里在学习一下,yum安装nginx后再添加模块的方法。
  2. 如果是源码编译安装的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 按钮如下图所示

 

猜你喜欢

转载自blog.csdn.net/wplblog/article/details/128806962