首页 > 其他分享 >Prometheus监控中间件案例

Prometheus监控中间件案例

时间:2023-10-10 23:06:27浏览次数:45  
标签:exporter http nginx -- consul 中间件 案例 Prometheus

一、Prometheus监控Consul

之前已经部署过Consul了,现在需要部署个Consul Exporter,它负责将Consul的状态信息转为Prometheus兼容的指标格式并予以暴露。

1.1 部署Consul Exporter软件包

wget https://github.com/prometheus/consul_exporter/releases/download/v0.9.0/consul_exporter-0.9.0.linux-amd64.tar.gz
tar -xf consul_exporter-0.9.0.linux-amd64.tar.gz
mv consul_exporter-0.9.0.linux-amd64 /usr/local/consul_exporter

1.2 为Consul Exporter设置systemd unit配置文件

vim /lib/systemd/system/consul_exporter.service
[Unit]
Description=consul_exporter
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Type=simple
EnvironmentFile=-/etc/default/consul_exporter
# 具体使用时,若consul_exporter与consul server不在同一主机时,consul server要指向实际的地址;
ExecStart=/usr/local/consul_exporter/consul_exporter \
 --consul.server="http://192.168.131.11:8500" \
 --web.listen-address=":9107" \
 --web.telemetry-path="/metrics" \
 --log.level=info \
 $ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always
[Install]
WantedBy=multi-user.target
 
systemctl enable --now consul_exporter

此时,9107端口已正常监听,执行curl 192.168.131.11:9107/metrics命令也能看到其暴露的指标。

1.3 配置consul_exporter服务并注册到Consul

#在Consul的配置目录下操作
vim /etc/consul/consul_exporter.json
{
 "service": [{
 "id": "consul_exporter",
 "name": "consul_exporter_node1",
 "address": "192.168.131.11",
 "port": 9107,
 "tags": ["consul_exporter"],
 "checks": [{
 "http": "http://192.168.131.11:9107/metrics",
 "interval": "10s"
 }]
 }]
}

consul reload

加载完配置信息后,再次查看Consul界面,发现consul_exporter_node1这个Service已经注册上去了。

Prometheus监控中间件案例_黑盒监控

1.4 Prometheus发现consul_exporter服务

这里使用基于Consul的服务发现方式。Prometheus.yml的相关配置如下:

- job_name: "consul_exporter"
  consul_sd_configs:
  - server: "192.168.131.11:8500"
    tags:
    - "consul_exporter"
    refresh_interval: 10s

curl -XPOST http://192.168.131.11:9090/-/reload

此时,查看Prometheus Web界面,发现多了个Target,名为consul_exporter。如果consul_exporter这个服务在Consul中注销了,则Prometheus不再监视该服务。

Prometheus监控中间件案例_Prometheus_02

二、Prometheus监控Mysql

在部署好Mysql的基础上,需要为每个MySQL Server实例部署mysql-exporter,它负责将MySQL Server的状态信息转为Prometheus兼容的指标格式并予以暴露。

2.1 部署Mysql Exporter软件包

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar -xf mysqld_exporter-0.15.0.linux-amd64.tar.gz
mv mysqld_exporter-0.15.0.linux-amd64 /usr/local/mysqld_exporter

2.2 配置Mysql Exporter

在mysqld-exporter安装路径下,创建my.cnf文件。内容如下:

[client]
user=mysqld_exporter
password=123456

2.3 配置Mysql的用户并授权

需要注意的是用户账号授权时使用的主机范围。

create user 'mysqld_exporter'@'localhost' identified by '123456';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'mysqld_exporter'@'localhost';
GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost';

2.4 为Mysql Exporter设置systemd unit配置文件

vim /lib/systemd/system/mysqld_exporter.service
[Unit]
Descriptinotallow=consul_exporter
Documentatinotallow=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Type=simple
User=mysql
# 具体使用时,若mysql_exporter与mysql server不在同一主机时,mysql server要指向实际的地址;
# mysql_exporter连接mysql server使用的用户名和密码均为exporter,该用户要获得正确的授权;
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
 --config.my-cnf=/usr/local/mysqld_exporter/my.cnf \
 --web.listen-address=":9104" \
 --web.telemetry-path="/metrics" \
 --collect.info_schema.innodb_tablespaces \
 --collect.info_schema.innodb_metrics \
 --collect.global_status \
 --collect.global_variables \
 --collect.slave_status \
 --collect.engine_innodb_status
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always
[Install]
WantedBy=multi-user.target
 
systemctl enable --now mysqld_exporter

此时,9104端口已正常监听,执行curl Mysql_Exporter IP:9104/metrics命令也能看到其暴露的指标。

2.5 Prometheus.yml配置job监控Mysql

这里使用静态发现服务的方式配置。Prometheus.yml配置内容如下:

#监控主机node信息,依赖插件mysql_exporter
- job_name: "mysqld_exporter"
  static_configs:
  - targets: ['192.168.131.12:9104']

Prometheus监控中间件案例_黑盒监控_03

curl -XPOST http://192.168.131.11:9090/-/reload

Prometheus监控中间件案例_黑盒监控_04

三、Prometheus监控Nginx

3.1 准备相关安装包

监控nginx需要用到如下两个模块:

  • nginx-module-vts:这是一个 nginx 模块,提供对 nginx 虚拟机主机状态数据的访问,可将数据输出格式为json、html、json、prometheus。
  • nginx-vts-exporter:主要用于收集nginx的监控数据,并暴露端口给 Prometheus 用于数据采集。
wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.zip && unzip v0.2.2.zip
wget https://nginx.org/download/nginx-1.24.0.tar.gz && tar -xf nginx-1.24.0.tar.gz && cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-http_sub_module --with-http_v2_module --with-pcre-jit --with-pcre --with-http_dav_module --with-http_addition_module --add-module=/root/package/nginx-module-vts-0.2.2
make && make install

3.2 编辑Nginx配置

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_traffic_status_zone; 是必填项
2、vhost_traffic_status_filter_by_host on; 即打开vhost过滤,开启此功能,在nginx配置有多个server_name的情况下会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上
3、 在不想统计流量的server区域可以使用 vhost_traffic_status off; 禁止

/usr/local/nginx/sbin/nginx

访问/status界面如下:

Prometheus监控中间件案例_黑盒监控_05

访问/status/format/prometheus页面如下:

Prometheus监控中间件案例_Prometheus_06

3.3 安装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
tar -xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64 /usr/local/nginx-vts-exporter

3.4 为nginx-vtx-exporter设置systemd unit配置文件

vim /lib/systemd/system/nginx-vts-exporter.service
[Unit]
Descriptinotallow=nginx-vts-exporter
Documentatinotallow=https://github.com/hnlq715/nginx-vts-exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/nginx-vts-exporter/nginx-vts-exporter -nginx.scrape_uri=http://192.168.131.12/status/format/json 
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
 
systemctl enable --now nginx-vtx-exporter

3.5 Prometheus配置job监控Nginx

这里使用静态发现服务的方式配置。prometheus.yml的配置内容如下:

- job_name: 'nginx'
  static_configs:
  - targets: ['192.168.131.12:9913']  #9913为nginx-vtx-exporter工具启动的端口
  scrape_interval: 10s

Prometheus监控中间件案例_黑盒监控_07

curl -XPOST http://192.168.131.11:9090/-/reload

Prometheus监控中间件案例_Prometheus_08

附:Nginx监控指标说明

Prometheus监控中间件案例_黑盒监控_09

四、Prometheus监控Tomcat

Prometheus监控Tomcat需要向Tomcat内添加jmx_prometheus_javaagent包,并暴露一个端口给外部访问来获取数据。

4.1 下载相关安装包

wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-10/v10.1.13/bin/apache-tomcat-10.1.13.tar.gz
tar -xf apache-tomcat-10.1.13.tar.gz
mv apache-tomcat-10.1.13 /usr/local/tomcat

4.2 jmx_exporter相关配置文件下载

wget https://github.com/prometheus/jmx_exporter/blob/master/example_configs/tomcat.yml

tomcat.yml的内容如下:

# https://grafana.com/grafana/dashboards/8704-tomcat-dashboard/
--- 
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem", "Catalina:*"]
blacklistObjectNames: []
rules:
 - pattern: 'Catalina<type=Server><>serverInfo: (.+)'
 name: tomcat_serverinfo
 value: 1
 labels:
 serverInfo: "$1"
 type: COUNTER
 - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'
 name: tomcat_$3_total
 labels:
 port: "$2"
 protocol: "$1"
 help: Tomcat global $3
 type: COUNTER
 - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplicatinotallow=none, J2EEServer=none><>(requestCount|processingTime|errorCount):'
 name: tomcat_servlet_$3_total
 labels:
 module: "$1"
 servlet: "$2"
 help: Tomcat servlet $3 total
 type: COUNTER
 - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|connectionCount|acceptCount|acceptorThreadCount|pollerThreadCount|maxThreads|minSpareThreads):'
 name: tomcat_threadpool_$3
 labels:
 port: "$2"
 protocol: "$1"
 help: Tomcat threadpool $3
 type: GAUGE
 - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), cnotallow=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'
 name: tomcat_session_$3_total
 labels:
 context: "$2"
 host: "$1"
 help: Tomcat session $3 total
 type: COUNTER


4.3 tomcat收集指标数据

mkdir /usr/local/tomcat/jmx
cp jmx_prometheus_javaagent-0.19.0.jar tomcat.yml /usr/local/tomcat/jmx

之后修改tomcat的配置文件catalina.sh

vim /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS="-javaagent:/usr/local/tomcat/jmx/jmx_prometheus_javaagent-0.19.0.jar=39081:/usr/local/tomcat/jmx/tomcat.yml"
#之后启动tomcat
/usr/local/tomcat/bin/startup.sh

测试是否收到数据:curl localhost:39081或curl localhost:39081/metrics

Prometheus监控中间件案例_Prometheus_10

4.4 Prometheus配置Job采集数据

这里直接采用静态服务发现的方式配置。prometheus.yml的相关配置如下(在scrape_configs下添加):

- job_name: 'tomcat'
  static_configs:
  - targets: ['192.168.131.12:39081']
  scrape_interval: 10s
  
curl -XPOST http://192.168.131.11:9090/-/reload

Prometheus监控中间件案例_黑盒监控_11

另外,Prometheus使用up指标可以查询指定的Exporter实例以及状态。

up{instance="192.168.131.12:39081"}

Prometheus监控中间件案例_黑盒监控_12

五、Prometheus实现黑盒监控

5.1 白盒监控&黑盒监控

白盒监控指监控主机的资源用量、容器的运行状态、数据库中间件的运行数据等等(实现方式:要么内置测量系统,要么添加Exporter来查询相关中间件的内部信息随后再暴露出去),这些都是支持业务和服务的基础设施,通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。
       黑盒监控指以用户的身份测试服务的外部可见性,常见的黑盒监控包括 HTTP 探针、 TCP 探针等用于检测站点或者服务的可访问性,以及访问效率等。
       黑盒监控相较于白盒监控最大的不同在于黑盒监控是以故障为导向的。当故障发生时,黑盒监控能快速发现故障,而白盒监控则侧重于主动发现或者预测潜在的问题。一个完善的监控目标是要能够从白盒的角度发现潜在问题,能够在黑盒的角度快速发现已经发生的问题。

5.2 blackbox_exporter简介

blackbox_exporter 是 Prometheus 官方提供的官方黑盒监控解决方案,可通过http(s)、dns、tcp、icmp 的方式对网络进行探测。支持的应用场景包括:

  • ICMP:主机存活探测
  • DNS:域名解析
  • TCP:端口存活检测
  • SSL证书过期时间检测
  • HTTP:定义 Request Header 信息和判断 Http status/Http Respones Header/Http Body 内容
  • POST:接口联通性

5.3 部署blackbox_exporter安装包

wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-0.24.0.linux-amd64.tar.gz
tar -xf blackbox_exporter-0.24.0.linux-amd64.tar.gz
mv blackbox_exporter-0.24.0.linux-amd64 /usr/local/blackbox_exporter

5.4 为blackbox_exporter设置Systemd unit配置文件

vim /lib/systemd/system/blackbox_exporter.service
[Unit]
Descriptinotallow=blackbox_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.yml --web.listen-address=:9115
Restart=on-failure
[Install]
WantedBy=multi-user.target
 
systemctl enable --now blackbox_exporter

5.5 blackbox-exporter配置文件解析

blackbox-exporter的配置文件使用默认的即可(/usr/local/blackbox_exporter/blackbox.yml),文件里定义了进行目标检测时要使用的模块和模块参数。至于要检测哪些目标是定义在Prometheus 的Job配置中。

modules:
  http_2xx:  #模块名
    prober: http
    http:
      preferred_ip_protocol: "ip4"
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  grpc:
    prober: grpc
    grpc:
      tls: true
      preferred_ip_protocol: "ip4"
  grpc_plain:
    prober: grpc
    grpc:
      tls: false
      service: "service1"
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
      - send: "SSH-2.0-blackbox-ssh-check"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp
  icmp_ttl5:
    prober: icmp
    timeout: 5s
    icmp:
      ttl: 5

5.6 配置Prometheus使用黑盒监控

vim /usr/local/prometheus/prometheus.yml
- job_name: 'blackbox' #配置job名
 metrics_path: /probe #定义metric获取的路径
 params:
   module: [http_2xx]  #这里就是我们在black_exporter中定义的模块名
 static_configs:
 - targets:
  - www.magedu.com
  - www.google.com
relabel_configs:
- source_labels: [__address__] #当前target的访问地址,比如监控百度则为 https://baidu.com
   target_label: __param_target #__param_是默认参数前缀,target为参数,这里可以理解为把__address__ 的值赋给__param_target,若监控百度,则target=https://baidu.com
  - source_labels: [__param_target]
   target_label: instance #可以理解为把__param_target的值赋给instance标签。instance的标签值还是保存的是原来__address__的值,而非重写后(黑盒地址)的值。如果将__address__的值改为黑盒地址,则会误以为这是针对黑盒服务器的探测结果。其实不然,这是借助黑盒服务器探测其它网站的结果。因此,在__address__的值重写之前,需将其值赋给instance之上。每个target都有两个用于标识身份的标签:instance和job。
  - target_label: __address__
   replacement: "192.168.131.12:9115"  #web监控本来是以的target为站点的地址的,但Prometheus不是直接去请求该地址(target网站地址本身不暴露指标),而是去请求black_exporter,故需要把目标地址替换为black_exporter的地址(加上指标路径)。此地址向targets发起请求,根据模块的探测结果通过指标路径响应给Prometheus。target只是告诉了要探测工作性能的目标网站而已。
  - target_label: region
   replacement: "local"
#重新加载Prometheus
curl -XPOST 192.168.131.11:9090/-/reload

Prometheus监控中间件案例_黑盒监控_13


Prometheus监控中间件案例_黑盒监控_14

blackbox下并不是Prometheus中State状态为UP就认为是正常状态。虽然在Prometheus探测google.com的状态为UP,但进入blackbox主界面就能发现,探测google.com的结果就是失败的。

标签:exporter,http,nginx,--,consul,中间件,案例,Prometheus
From: https://blog.51cto.com/u_15796303/7800113

相关文章

  • # yyds干货盘点 #盘点一个Python自动化办公Excel数据填充实战案例(下篇)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公的问题,一起来看看吧。上一篇【论草莓如何成为冻干莓】大佬给出的方法太深奥了,粉丝没有看懂,这一篇文章,一起来围观大佬在粉丝的代码基础上进行修改出正确的代码。二、实现过程这里是【论草莓......
  • KingbaseES V8R6集群运维案例之---查看主备流复制之间的延迟
    案例说明:在主备流复制集群运维过程中,对于同步复制节点,在读写分离环境应用需要强一致性访问时,需要监控主备之间流复制的延迟。适用版本:KingbaseESV8R6一、主库查询流复制延迟1、通过sys_stat_replication获取sent_lsn、write_lsn、flush_lsn、replay_lsn获取备库延迟信息......
  • 服务器数据恢复-DS5300存储多块硬盘出现坏道离线导致raid5阵列崩溃的数据恢复案例
    服务器数据恢复环境:某单位一台DS5300存储,1个主机+4个扩展柜,组建了2组RAID5(一组27块硬盘,一组23块盘)。27块盘的那组RAID5阵列存放Oracle数据库文件,存储系统一共分了11个卷。服务器故障:27块盘的那组RAID5阵列中有2块磁盘故障离线,导致RAID阵列崩溃,存储不可用,存储设备已经过保。服务......
  • scrapy自带的中间件
    {'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware':100,'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware':300,'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware':350,......
  • SpringBootWeb案例-2上
    SpringBootWeb案例前面我们已经实现了员工信息的条件分页查询以及删除操作。关于员工管理的功能,还有两个需要实现:新增员工修改员工首先我们先完成"新增员工"的功能开发,再完成"修改员工"的功能开发。而在"新增员工"中,需要添加头像,而头像需要用到"文件上传"技术。当整个员工管理功......
  • 案例3 配置明文远程管理协议
    1.华为设备1.1配置R1<Huawei>sys<Huawei>system-viewEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameHW-R1[HW-R1]intg0/0/1[HW-R1-GigabitEthernet0/0/1]ipaddress10.1.11.1291.2配置SW1<Huawei>system-view[Huawei]sysna......
  • 案例2 网络设备初始化及Console端口密码认证
    1.华为设备<Huawei><Huawei>system-view[Huawei]user-interfaceconsole0[Huawei-ui-console0]authentication-modepassword[Huawei-ui-console0]setauthenticationpasswordcipherqytang[Huawei-ui-console0][Huawei-ui-console0]quit[Huawei][Huawe......
  • Shell子串_变量子串案例_统计字符长度以及命令执行时长
    子串案例shell截取字符串通常由两种方式:从指定位置开始截取和从指定字符开始截取从指定位置开始截取:这种方式需要两个参数,除了指定的起始位置,还需要截取长度,才能确定要截取的字符串。既然需要指定其实位置,到底是从字符串的左边开始计数,还是从字符串右边开始计数,答案是shell同......
  • SpringBootWeb案例-1上
    SpringBootWeb案例前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。那接下来,我们就通过一个案例,来将前端开发、后端开发、数据库整合起来。而这个案例呢,就是我们......
  • SpringBootWeb案例-1 -下
    3.员工管理完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。基于以上原型,我们可以把员工管理功能分为:分页查询(今天完成)带条件的分页查询(今天完成)删除员工(今天完成)新增员工(后续完成)修改员工(后续完成)那下面我们就先从分页查询功能开始学习。3.1分页查询3.1.1......