Linux监控之prometheus学习

news2024/12/26 0:43:06

目录

需要学习以及掌握的知识

第一步:安装准备

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 按钮如下图所示

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux字符设备、块设备的区别

一、字符设备 字符设备就是在对某设备进行操作时&#xff0c;该设备的读取以字节为单位进行。字符设备的操作是通过linux系统直接调用驱动程序完成的&#xff0c;在驱动程序的上一层并没用文件系统。因此字符设备的特点如下&#xff1a; 1、以字节流的方式进行读写、一个字节一…

亚马逊上线优惠券推荐功能,如何选品成为重中之重?

随着全球数字经济的进一步发展以及中国数字化基础设施的完善&#xff0c;众多中国品牌选择出海掘金道路。虽然全球经济格局的不确定因素在增多&#xff0c;但是总体上各国消费潜力在逐步释放&#xff0c;我国外贸行业也在不断迭代优化&#xff0c;尤其是出口跨境电商行业&#…

Python 基础语法介绍(二)

文章目录一、概述二、函数1&#xff09;函数定义2&#xff09;函数调用3&#xff09;函数传参1、形式参数和实际参数2、关键字参数3、参数默认值4、可变参数4&#xff09;函数返回值1、语法结构2、多值返回5&#xff09;变量作用域1、局部变量2、全局变量【1】在主程序中定义全…

金融风控12

社交网络分析与金融反欺诈 设备指纹 一般是基于某些设备信息&#xff0c;通过一些设备指纹算法将这些信息组合&#xff0c;通过特定hsah算法得到一个ID值&#xff0c;作为该设备唯一标识符 常见元素有&#xff1a; - sim卡信息 - wifi信息 - 硬盘信息 - 内存信息 - 屏幕…

【Qt】6.QTableWidget控件、其他控件、自定义控件封装、鼠标事件

目录 QTableWidget控件 代码 widget.cpp 结果 其他控件 stackWidget栈控件 下拉框 代码 widget.cpp 结果 自定义控件封装 代码 smallwidget.h smallwidget.cpp widget.cpp 结果 鼠标事件 代码 mylabel.h mylabel.cpp 结果 QTableWidget控件 设置列数setC…

oAuth2的入门

目录一、OAuth2流程演示示例第一步第二步二、流程2.1 资源所有者2.2 客户2.3 客户2.4 认证服务器2.5 客户2.6 资源服务器三、测试一、OAuth2流程演示示例 第一步 先到gitee下载oAuth2官方提供的代码&#xff0c;然后导入项目 https://gitee.com/lisenaq/oauth2-example.git第…

SpringMVC(十四):SpringMVC异常处理

文章目录 SpringMVC异常处理 一、异常简介 二、异常处理具体实现

Charles 的简单使用

1.下载并安装charles官方下载地址&#xff1a;https://www.charlesproxy.com/download/当前最新版本是4.6.3 选择合适的安装包进行下载&#xff08;windows.msi、macos.dmg、linux.tar.gz&#xff09;例windows.msi&#xff1a;执行msi文件&#xff0c;选择合适的下载地址&…

【机器学习】聚类算法(理论)

聚类算法&#xff08;理论&#xff09; 目录一、概论1、聚类算法的分类2、欧氏空间的引入二、K-Means算法1、算法思路2、算法总结三、DBSCAN算法1、相关概念2、算法思路3、算法总结四、实战部分...一、概论 聚类分析&#xff0c;即聚类&#xff08;Clustering&#xff09;&…

js继承的6种方式

// 1 原型链继承function Per() {this.name "key";}Per.prototype new Person(); // 主要var per1 new Per();console.log(per1.age);// instanceof 判断元素是否在其他元素的原型链上// per1继承了Person的属性&#xff0c;返回trueconsole.log(Per1 instanceof …

java常用类:BigInteger类和BigDecimal类

java常用类型: Ineteger等包装类 String类&#xff0c;StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录引言BigInteger (大整数)常用方法B…

二分算法学习

&#x1f33c; 扎着马尾的姑娘&#xff0c;笑容温柔很善良自在的少年 - 要不要买菜 - 单曲 - 网易云音乐 前言 本来打算做蓝桥杯2022&#xff23;&#xff0b;&#xff0b;A组省赛F题青蛙过河的,看到标签显示"二分",第一时间竟然想不到二分是什么,所以来学习下 目录…

传闻将与马云合作,涨了7倍的正大企业国际,还能跟风吗?

1月30日周一&#xff0c;港股正大企业国际逆势大涨68.35%&#xff0c;1月31日正大企业国际继续飙升&#xff0c;最高点涨超275%&#xff0c;收盘时涨幅达251.88%&#xff0c;成为2023年第一只翻倍的股票。今日早盘继续近40个点&#xff0c;还在持续发酵中。 消息面上&#xff…

Python+Go实践(电商架构一)

文章目录简介架构分析接口管理peeweeCURDGin获取请求参数protobuf验证表单中间件静态文件优雅退出小结简介 电商系统&#xff1a;后台管理前端商城 架构分析 传统的单体架构&#xff0c;以Django为例&#xff1b;之前写过flask开发微视频网站就是这样的架构 痛点分析及演进 …

Oracle数据库安装配置和卸载

Oracle数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置) 服务器与客户机是软件概念, 它们与计算机硬件不存在一一对应的关系. 即: 同一台计算机既可以充当服务器又可以充当客户机, 或者, 一台计算机只充当服务器或只充当充当客户机. Orac…

JAVA 老掉牙的面试问题 线程交替打印问题,分析实操一下

前言 新的一年了&#xff0c;首先是祝大家新年新气象&#xff0c;工作顺利&#xff0c;生活美满 。 万物复苏的一年&#xff0c; 大家都蠢蠢欲动&#xff01; 金三银四快来了&#xff0c; 机会多不多&#xff1f; ‘’满大街机会‘’ 好了不啰嗦&#xff0c;最近有比较多的小伙…

开关电源-TL431与光耦组成的电压反馈电路-TL431工作过程分析

开关电源&#xff1a;TL431与光耦组成的电压反馈电路 #开关电源#开关电源最基本的要求是输入电压变化时&#xff0c;输出电压保持恒定&#xff0c;而与此相关的测试如电压调整率、负载调整率等也是衡量开关电源性能的重要指标&#xff0c;实现输出电压恒定的方式是反馈&#x…

【Catalyst 9000上EEM的部署方法和示例,你看明白了吗?】

新的一年 新的征程 新的课程开班 等你来学&#xff01; EEM&#xff08;Embedded Event Manager&#xff09;作为一个自动化的脚本部署在设备上&#xff0c;可以根据指定的trigger来自动完成提前布置的任务&#xff0c;如信息的收集或特定的操作。一个完整的EEM需要包含Na…

Python学习-----起步2(变量与转义符)

目录 前言 Python变量/常量使用规则 基本数据变量类型 整形&#xff08;int&#xff09; 浮点型&#xff08;float&#xff09; 字符串类型&#xff08;str&#xff09; 布尔类型&#xff08;bool&#xff09; 转义符 习题 前言 在我们学习C语言时&#xff0c;我们学了很…

对象之间的拷贝

这里写目录标题Lambda 的 builderidea 自动生成插件 GenerateAllSetterMapStructDozer在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化&#xff0c;比如 PO/DTO/VO/QueryParam 之间的转换问题&#xff0c;本文总结一下各种转换方法Lambda 的 builder 使用构…