Prometheus+altermanager搭配钉钉报警

一、Prometheus介绍

Prometheus是一个开源系统监控和警报工具包,最初在 SoundCloud构建。自 2012 年成立以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,独立于任何公司维护。为了强调这一点,并明确项目的治理结构,Prometheus 于 2016 年加入 云原生计算基金会,成为继Kubernetes之后的第二个托管项目。

Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。

有关 Prometheus 的更详细概述,请参阅 媒体部分链接的资源。

特点

普罗米修斯的主要特点是:

  • 具有由度量名称和键/值对标识的时间序列数据的多维数据模型
  • PromQL,一种 利用这种维度的灵活查询语言
  • 不依赖分布式存储;单个服务器节点是自治的
  • 时间序列收集通过 HTTP 上的拉模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形模式和仪表板支持
架构图

二、搭建Prometheus监控体系

我这里提前准备了三台虚拟机 (maste、node1、node2)

1、Prometheus 服务端 (master机)

2、expot 客户端(node1、node2)

3、granfan 可视化展示Prometheus数据

1、搭建Prometheus服务端

1.1、下载并解压缩

#下载
wget https://github.com/prometheus/prometheus/releases/download/v3.4.0-rc.0/prometheus-3.4.0-rc.0.linux-amd64.tar.gz
#解压到 /usr/local
tar -xvf  prometheus-2.54.0-rc.1.linux-amd64.tar.gz -C /data/
#查看版本号
cd /data/prometheus-2.54.0-rc.1.linux-amd64/
./prometheus  --version
prometheus, version 2.54.0-rc.1 (branch: HEAD, revision: 6d7ed08850849c2adcedb63cddeb61fc4f6a425e)build user:       root@64a0056e2b2abuild date:       20240806-06:01:39go version:       go1.22.5platform:         linux/amd64tags:             netgo,builtinassets,stringlabels

1.2、Prometheus.yml配置解释

这里我们可以看到有四个模块
1、global 全局配置
2、
#1、global  
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).
2、

1.3、设置systemctl启动

vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.io[Service]    
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml   # 启动地址[Install]
WantedBy=multi-user.target

1.4、启动Prometheus

#重载systemctl 配置
systemctl daemon-reload
#设置开机自启
systemctl enable prometheus 
#启动服务
systemctl start prometheus

1.5、查看是否启动

systemctl status Prometheus

1.6、浏览器访问

#开设9090端口号
iptables -I INPUT -p tcp -dport 9090 -j ACCEPT
#浏览器访问
http://172.16.254.190:9090

2、搭建客户端export (添加主句监控)

2.1、下载、解压、并启动

切换到node1上

#切换到node1主机上
ssh node1
#下载
wget https://github.com/prometheus/node_exporter/releases/download/v-1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
#解压缩
tar -xfv node_exporter-1.8.2.linux-amd64.tar.gz  -C /data

2.2、设置systemctl 启动

 vim  /usr/lib/systemd/system/node_exporter.service 
[Unit]
Description=Prometheus-Server
After=network.target[Service]
ExecStart=/data/node_exporter-1.8.2.linux-amd64/node_exporter  --web.listen-address=:9500
User=root[Install]
WantedBy=multi-user.target/data/node_exporter-1.8.2.linux-amd64/node_exporter --web.listen-address=:9500

2.3、启动服务

#重载systemctl 配置
systemctl daemon-reload
#设置开机自启
systemctl enable node_exporter
#启动服务
systemctl start node_exporter

2.4、验证是否启动采集到数据

curl http://172.16.254.191:9100/metrics# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0

node2主机上也是按照此步骤操作

2.5、修改Prometheus配置文件

  - job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]- job_name: "node1"static_configs:- targets: ["172.16.254.191:9500"]labels:service: ops- job_name: "node2"static_configs:- targets: ["172.16.254.192:9500"]labels:service: ops#- targets 后服务器ip+端口号

2.6、重新启动Prometheus

systemctl restart prometheus

2.7、浏览器访问Prometheus

http:192.168.19.135/9090

我们这里可以看到node1和node2主机已经监控到了

2.8、配置Prometheus规则

在该目录下添加rule规则

先打开Prometheus配置文件,并删除rule注释

 vim /data/prometheus-3.1.0.linux-amd64/prometheus.yml
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:- "first_rules.yml"
#   - "second_rules.yml"

vim /data/prometheus-3.1.0.linux-amd64/first_rules.yml 
groups:
- name: noderules:- alert: InstanceDownexpr: up{job="node1"} == 0for: 15slabels:severity: "critical"server: "ops"annotations:description: '{{ $labels.instance }} of job {{ $labels.job }} of service {{ $labels.service }} has been down for more than 30 seconds.'summary: Instance {{ $labels.instance }} down

2.9、重启Prometheus服务

并点击status>rule   下方表示rule设置成功

3、granfan搭建

3.1、下载granfan并启动

yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-12.0.2+security~01-1.x86_64.rpmsystemctl start grafana

3.2、浏览器访问

#开设3000端口
iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
浏览器访问
http://172.16.254.190:3000/

初始用户和密码都为admin  admin  第一次会提示修改密码

3.2.1、添加Add data source

代表成功

3.2.2、导入仪表盘

添加模版id 11074

4、添加alertmanager报警

4.1下载altermanager并解压缩

在master主机上添加alertmanager

wget https://github.com/prometheus/alertmanager/releases/download/v0.28.0/alertmanager-0.28.1.linux-amd64.tar.gz
tar -xf alertmanager-0.28.0.linux-amd64.tar.gz -C /data

4.2、设置systemctl启动服务

vim  /usr/lib/systemd/system/alertmanager.service
[unit]
Description=Alertmanager-Server
After=network.target[Service]
ExecStart=/data/alertmanager-0.28.0.linux-amd64/alertmanager --config.file=/data/alertmanager-0.28.0.linux-amd64/alertmanager.yml
User=root[Install]
WantedBy=multi-user.target

4.3、启动服务

#重新加载配置文件
systemctl daemon-reload
#设置开机自启
systemctl enable alertmanager.service
systemctl start alertmanager
#查看进程是否启动
ps -ef|grep alertmanager
root      1122     1  0 00:40 ?        00:00:00 /data/alertmanager-0.28.0.linux-amd64/alertmanager --config.file=/data/alertmanager-0.28.0.linux-amd64/alertmanager.yml
root      1145 27020  0 00:40 pts/3    00:00:00 grep --color=auto alertmanager

4.4、可以用webhook.site测试一下是否能触发报警

webhook.site是一个用于测试,转换和自动化web请求和电子邮件平台。他提供多种功能,能创建自定义的webhook URL,接受和查看HTTP请求的详细信息,以及执行自定义的操作。

1、打开链接:(1) Webhook.site - Test, transform and automate Web requests and emails

2、打开alertmanager配置文件输入上面复制的url
vim /data/alertmanager-0.28.0.linux-amd64/alertmanager.yml
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:- url: 'https://webhook.site/a9cf0e68-6c0d-49ab-b553-cb9706a0ea70'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
3、这时我们登录node1主机关闭node_export 就会自动触发报警
#登录node1
ssh node1
#关闭node节点
systemctl stop node_exporter

代表Prometheus+alertmanager成功搭建并建立连接。这时我们就可以使用钉钉告警通道触发报警了。

5、钉钉实现报警

5.1、需要下载 Webhook-dingtalk安装并启动

wegt https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
#解压
tar -xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz -C /datacd /data/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

5.2、添加systemctl管理

vim /usr/lib/systemd/system/webhook.service
[Unit]
Description=Prometheus-Server[Service]
ExecStart=/data/prometheus-webhook-dingtalk-2.1.0.linux-amd64/prometheus-webhook-dingtalk --config.file=/data/prometheus-webhook-dingtalk-2.1.0.linux-amd64/config.example.yml[Install]
WantedBy=multi-user.target

5.3、设置开机自启并启动服务

systemctl daemon-reload
systemctl enable webhook
systemctl start webhook

5.4、电脑下载钉钉软件

步骤一:创建群聊添加机器人

步骤二、

步骤三、设置自定义

步骤四、

步骤五、设置加签 并复制

步骤六、

这时我们就看到钉钉添加机器人成功了

5.5、在webhook配置文件当中添加webhook1

vim /data/prometheus-webhook-dingtalk-2.1.0.linux-amd64/config.example.yml
## Request timeout
# timeout: 5s## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true## Customizable templates path
#templates:
#  - contrib/templates/legacy/template.tmpl## Targets, previously was known as "profiles"
targets:webhook1:
#步骤六的机器人地址url: https://oapi.dingtalk.com/robot/send?access_token=62638c23119337210244fa5c33b5d0dd5a5df105b3d802538df09e33c45333d5# secret for signature
步骤五的安全设置的加密secret: SEC35f4c12c1997a68be9230c1cdc07bb6100fc8f456a685ba29b0039adaf445734webhook2:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxwebhook_legacy:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx# Customize template contentmessage:# Use legacy templatetitle: '{{ template "legacy.title" . }}'text: '{{ template "legacy.content" . }}'webhook_mention_all:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxmention:all: truewebhook_mention_users:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxmention:mobiles: ['156xxxx8827', '189xxxx8325']

4.5、配置钉钉模版

vim /data/prometheus-webhook-dingtalk-2.1.0.linux-amd64/template.tmpl/template.tmpl{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主题**: {{ .Annotations.summary }}**告警类型**: {{ .Labels.alertname }}**告警级别**: {{ .Labels.severity }} **告警主机**: {{ .Labels.instance }} **告警信息**: {{ index .Annotations "description" }}**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主题**: {{ .Annotations.summary }}**告警类型**: {{ .Labels.alertname }} **告警级别**: {{ .Labels.severity }}**告警主机**: {{ .Labels.instance }}**告警信息**: {{ index .Annotations "description" }}**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len  }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len  }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}
vim /data/prometheus-webhook-dingtalk-2.1.0.linux-amd64/config.example.yml ## Request timeout
# timeout: 5s## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true## Customizable templates path
#删掉注释模版文件
templates:- contrib/templates/legacy/template.tmpl

5.6、配置alertmanager配置文件

route:
#分组聚合减少告警消息数量group_by: ['alertname']
#告警时,先收集报警然后在发送group_wait: 30s  #当收到告警时,先等待30秒在一起发送group_interval: 5m  #发送警告时间间隔repeat_interval: 1h #重复报警时间间隔receiver: 'dingding.webhook1'
receivers:- name: 'dingdingwebhook1'webhook_configs:- url: ''http://172.16.254.190:8060/dingtalk/webhook1/send'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

5.7、重启webhook和alertmanager服务

systemctl restart webhook
systemctl restart alertmanager

6、查看是否能触发报警

6.1、登录node1服务器关闭node_exporte服务

systemctl restart alertmanager

三、生产环境场景

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数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。

Nginx安装

前期准备

1、Nginx源码获取

#创建源码包文件
mkdir /data/sourcewget https://nginx.org/download/nginx-1.28.0.tar.gztar -xf nginx-1.28.0.tar.gz -C /data/source/

2、安装编译工具及依赖库,脚本如下:

yum -y install gcc pcre-devel  zlib-devel openssl-devel libxml2-devel \libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel \perl-devel  perl-ExtUtils-Embed

3、编译配置参数配置

--prefix=PATH/usr/local编译后代码的安装目录
--with-select_module不编译编译 select I/O 事件机制模块,在不支持 Nginx 默认 I/O 事件机制的操作系统下自动编译该模块
--without-select_module编译不编译 select I/O 事件机制模块
--with-poll_module不编译编译 poll/O 事件机制模块,在不支持 Nginx 默认 I/O 事件机制的操作系统下自动编译该模块
--without-poll_module编译不编译 poll I/O 事件机制模块
--with-threads不编译 启用线程池支持
--with-file-aio不编译启用 AIO 支持
--with-http_ssl_module不编译编译 SSL 模块
--with-http_v2_module不编译编译 HTTP/2 模块
--with-http_realip_module不编译编译 HTTP 的真实 IP 模块
--with-http_addition_module不编译编译响应内容追加模块
--with-http_xslt_module不编译编译 XSLT 样式表转换模块
--with-http_xslt_module=dynamic--动态编译 XSLT 样式表转换 XML 响应模块
--with-http_image_filter_module编译编译图像转换模块
--with-http_image_filter_module=dynamic--动态编译图像转换模块
--with-http_geoip_module编译编译客户端 IP 解析城市地址模块
--with-http_geoip_module=dynamic--动态编译客户端 IP 解析城市地址模块
--with-http_sub_module不编译编译字符串替换模块
--with-http_dav_module不编译编译 WebDAV 协议支持模块
--with-http_flv_module不编译 编译 FLV 文件伪流媒体服务器支持模块
--with-http_mp4_module不编译编译 MP4 文件伪流媒体服务器支持模块
--with-http_gunzip_module不编译 编译 gzip 压缩兼容模块
--with-http_gzip_static_module不编译   编译发送 gz 预压缩文件数据模块
--with-http_auth_request_module不编译  编译请求认证模块
--with-http_random_index_module不编译编译随机首页模块
--with-http_secure_link_module不编译编译请求连接安全检查模块
--with-http_degradation_module 不编译 编译内存不足响应模块
--with-http_slice_module不编译 编译文件切片模块
--with-http_stub_status_module不编译 编译运行状态模块
--without-http_charset_module编译不编译字符集转换模块
--without-http_gzip__module编译不编译 gzip 方式压缩输出模块
--without-http_ssi_module编译不编译 SSI 支持模块
--without-http_userid_module编译不编译 cookie 操作模块
--without-http_access_module编译不编译基于 IP 的访问控制模块
--without-http_auth_basic_module编译不编译 HTTP 基本认证模块
--without-http_mirror_module编译  不编译访问镜像模块
--without-http_autoindex_module编译不编译自动目录索引模块
--without-http_geo_module编译不编译根据客户 IP 创建变量模块
--without-http_map_module编译不编译变量映射模块
--without-http_split_clients_module编译 不编译自定义客户请求分配模块
--without-http_referer_module编译不编译 referer 操作模块
--without-http_rewrite_module编译不编译 rewrite 规则模块
--without-http_proxy_module编译不编译代理功能模块
--without-http_fastcgi_module编译不编译 FastCGI 支持模块
--without-http_uwsgi_module 编译不编译 uWSGI 支持模块
--without-http_scgi_module编译不编译 SCGI 支持模块
--without-http_grpc_module编译不编译 gRPC 支持模块
--without-http_memcached_module编译不编译 Memcached 服务访问模块
--without-http_limit_conn_module编译不编译并发连接数控制模块
--without-http_limit_req_module编译不编译单 IP 请求数限制模块
--without-http_empty_gif_module编译不编译空 GIF 图片模块
--without-http_browser_module编译不编译客户端浏览器识别模块
--without-http_upstream_hash_module编译不编译 hash 负载均衡算法模块
--without-http_upstream_ip_hash_module编译不编译 HTTP 协议 ip-hash 负载均衡模块
--without-http_upstream_least_conn_module编译不编译最少连接数算法负载均衡模块
--without-http_upstream_random_module编译不编译随机选择算法负载均衡模块
--without-http_upstream_keepalive_module编译不编译负载均衡后端长连接支持模块
--without-http_upstream_zone_module编译不编译负载均衡共享内存支持模块
--with-http_perl_module不编译编译 Perl 脚本支持模块
--with-http_perl_module=dynamic--动态编译 Perl 脚本支持模块
--with-stream不编译编译 TCP/UDP 代理模块
--with-stream=dynamic--动态编译 TCP/UDP 代理模块
--with-stream_ssl_module不编译编译 TCP/UDP 代理 SSL 支持模块
--with-stream_realip_module不编译编译 TCP/UDP 代理真实 IP 模块
--with-stream_geoip_module不编译编译地域信息解析模块
--with-stream_geoip_module=dynamic--动态编译地域信息解析模块
--with-stream_ssl_preread_module不编译编译 TCP/UDP 代理的 SSL 预处理模块

4、编译

cd /data/source/
./configure \--with-threads \--with-file-aio \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--with-http_addition_module \--with-http_xslt_module=dynamic \--with-http_image_filter_module=dynamic \--with-http_geoip_module=dynamic \--with-http_sub_module \--with-http_dav_module \--with-http_flv_module \--with-http_mp4_module \--with-http_gunzip_module \--with-http_gzip_static_module \--with-http_auth_request_module \--with-http_random_index_module \--with-http_secure_link_module \--with-http_degradation_module \--with-http_slice_module \--with-http_stub_status_module \--with-stream=dynamic \--with-stream_ssl_module \--with-stream_realip_module \--with-stream_geoip_module=dynamic \--with-stream_ssl_preread_module \--with-compat  \--with-pcre-jit
make && make install

编译后,默认安装目录为 /usr/local/nginx。

5、添加第三方模块

5.1、查看都安装了哪些模块
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.28.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre-jit
5.2、下载第三方模块
5.3、添加到nginx
#复制原先模块后添加第三方模块
cd /data/source/nginx-1.28.0/
./configure     --with-threads     --with-file-aio     --with-http_ssl_module     --with-http_v2_module     --with-http_realip_module     --with-http_addition_module     --with-http_xslt_module=dynamic     --with-http_image_filter_module=dynamic     --with-http_geoip_module=dynamic     --with-http_sub_module     --with-http_dav_module     --with-http_flv_module     --with-http_mp4_module     --with-http_gunzip_module     --with-http_gzip_static_module     --with-http_auth_request_module     --with-http_random_index_module     --with-http_secure_link_module     --with-http_degradation_module     --with-http_slice_module     --with-http_stub_status_module     --with-stream=dynamic     --with-stream_ssl_module     --with-stream_realip_module     --with-stream_geoip_module=dynamic     --with-stream_ssl_preread_module     --with-compat      --with-pcre-jit --with-http_ssl_module  --add-module=/usr/local/nginx-module-vts-0.2.4make

切记不要make install 会覆盖之前的模块。

5.4、替换二进制文件
#这里复制一下原来的文件,出了问题还可以还原
mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak
复制这个文件复制过去cp /data/source/nginx-1.28.0/objs/nginx /usr/local/nginx/sbin/
pkill -9 nginx ## 关闭nginx
#启动nginx
/usr/local/nginx/sbin/nginx 
.5.5、修改nginx.conf配置,实验安装是否成功:

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;}
}

配置解析:

打开vhost过滤:

vhost_traffic_status_filter_by_host on;

开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。

在不想统计流量的server区域禁用vhost_traffic_status,配置示例

server {
...
vhost_traffic_status off;
...
}
5.6、启动服务
/usr/local/nginx/sbin/nginx

打开浏览器访问ip/status:

5.7、安装nginx-vts-exporter

wget https://github.com/hnlq715/nginx-vts-exporter/bin/nginx-vts-exporter -nginx.scrape_uri=http://172.16.254.191/status/format/json

grafana

导入2949模板

四、node_export 自定义监控指标

Prometheus 的 node_exporter 是一个非常流行的导出器,用于收集系统级别的指标。然而,有时你可能需要监控一些自定义的指标。以下是如何配置 node_exporter 来监控自定义指标的步骤。

1、自定义监控nginx服务存活性

例如,创建一个名为 custom_metrics.sh 的 Bash 脚本

#!/bin/bash
echo "# HELP custom_metric_example This is an example of a custom metric"
echo "# TYPE custom_metric_example gauge"
echo "nginx up "

服务监控脚本

#!/bin/bashps -ef|grep nginx|grep -v grep > /dev/null
if [ $? -eq 0 ];then
echo "# HELP custom_metric_example This is an example of a custom metric"
echo "# TYPE custom_metric_example gauge"
echo "nginx_up 1"
else
echo "# HELP custom_metric_example This is an example of a custom metric"
echo "# TYPE custom_metric_example gauge"
echo "nginx_up 0"

2. 配置 node_exporter 以执行自定义脚本

node_exporter 支持通过 textfile 模式来导入自定义指标。你需要将自定义脚本的输出写入到一个特定的目录中,node_exporter 会定期读取这个目录中的文件并将其内容作为指标导入。
创建一个目录来存放自定义指标文件:


mkdir -p/data/node_exporter-1.8.2.linux-amd64/textfile_collectorsh custom_metrics.sh > //data/node_exporter-1.8.2.linux/amd64/textfile_collector/custom_metrics.prom

3、添加到systemctl服务

 cat/usr/lib/systemd/system/node_exporter.service 
[Unit]
Description=Prometheus-Server
After=network.target[Service]
ExecStart=/data/node_exporter-1.8.2.linux-amd64/node_exporter --collector.textfile.directory=/data/node_exporter-1.8.2.linux-amd64/textfile_collector  --web.listen-address=:9500
User=root[Install]
WantedBy=multi-user.target

4、启动服务

systemctl restart node_exporter #curl 请求一下看是否有数据
[root@node1 node_exporter-1.8.2.linux-amd64]# curl 172.16.254.191:9500/metrics |grep nginx% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0# HELP nginx_up Metric read from /data/node_exporter-1.8.2.linux-amd64/textfile_collector/custom_metrics.prom
# TYPE nginx_up untyped
nginx_up 1
100 76559    0 76559    0     0  4662k      0 --:--:-- --:--:-- --:--:-- 4984k

5、浏览器访问Prometheus是否有数据

ip:端口号

6、配置自定义grafana

借鉴大佬文章:

Prometheus+Alertmanager+webhook-dingtalk实现钉钉告警 - 不会游泳的鱼丶 - 博客园

(6 封私信) https://webhook.site/ - 知乎

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

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

相关文章

【小白量化智能体】应用6:根据通达信指标等生成机器学习Python程序

【小白量化智能体】应用6:根据通达信指标等生成机器学习Python程序 【小白量化智能体】是指能够自主或半自主地通过与环境的交互来实现目标或任务的计算实体。智能体技术是一个百科全书,又融合了人工智能、计算机科学、心理学和经济学等多个领域的知识&a…

k8s的calico无法启动报错解决

报错信息[INFO][1] main.go 138: Failed to initialize datastore errorGet "https://10.245.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": dial tcp 10.245.0.1:443: connect: no route to host 2025-07-21 06:15:42.055 [FATAL][1] main.…

MySQL多表查询中的笛卡尔积问题

精选专栏链接 🔗 MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅,点赞+关注,每日精进1%,与百万开发者共攀技术珠峰 更多内容持续更新中!希望能给大家带来…

深度解析 HTML `loading` 属性:优化网页性能的秘密武器

在开发网页时,我常常被页面加载速度慢的问题困扰,尤其是在图片和嵌入内容较多的页面上。用户还没看到内容就可能因为等待时间过长而离开,这对用户体验和 SEO 都是致命打击。后来,我发现了 HTML 的 loading 属性——一个简单却强大…

[C/C++内存安全]_[中级]_[安全处理字符串]

场景 在现代C开发指南出来后,并不建议使用C的某些内存不安全的字符串处理函数。那么有哪些函数不安全? 说明 内存安全方面,肯定是要向Rust看齐的。使用标准std::string字符串类,很大情况能避免缓冲区溢出问题。 如果旧项目里有…

【CNN】卷积神经网络- part1

1.卷积1.局部连接定义:只是于输入数据的一部分区域相连,每个神经元只关注一小部分作用:模仿人类的视野机制,极大的减少了模型参数的数量,降低了计算成本2.权重共享定义:所有神经元使用相同的权重向量来检测…

漏洞生命周期管理:从发现到防护的全流程方案

漏洞并非孤立存在,而是遵循 “发现→评估→修复→验证→闭环” 的生命周期。多数企业安全事件的根源并非缺乏漏洞发现能力,而是对漏洞生命周期的管理缺失 —— 大量漏洞被发现后长期未修复,或修复后未验证效果。构建全流程漏洞生命周期管理体…

opencv图像基本操作解析与实操

图片操作cv2.namedWindow() 创建命名窗口cv2.imshow()显示窗口cv2.destroyAllwindws()摧毁窗口cv2.resizeWindow()改变窗口大小cv2.waitKey()等待用户输入cv2.imread()读取图像img.shape 图片h、w、c(高、宽、通道数import cv2 # opencv读取的格式是BGR import m…

kafka--基础知识点--6.1--LEO、HW、LW

在 Apache Kafka 中,LEO(Log End Offset)、HW(High Watermark)、和 LW(Low Watermark) 是副本机制和日志管理中的核心概念,共同确保数据一致性、可见性和存储效率。以下是它们的详细…

在线深凹槽深检测方法都有哪些 —— 激光频率梳 3D 轮廓检测

引言在制造业中,深凹槽深度的精确检测是保证零部件质量的关键环节。随着智能制造的推进,在线检测需求日益迫切,传统检测方法在效率和精度上的不足逐渐显现。本文将梳理在线深凹槽深的传统检测方法,并重点探讨激光频率梳 3D 轮廓检…

NumPy 数组拼接的高级技巧与实践

在数据处理和机器学习领域,NumPy 是 Python 中最核心的科学计算库之一。NumPy 数组(ndarray)的拼接操作是数据预处理中极为常见的需求。本文将深入探讨如何将不同形状的 NumPy 数组进行拼接,特别是如何将多个一维数组与二维数组进…

原创-基于 PHP 和 MySQL 的证书管理系统 第三版

第一版属于开源版本,所以后台功能没有开发许多出来,今天分享证书查询第三版; 通过几天的紧急写代码及测试;第三版基本可以上线上,不过后面有一些BUG只能一边修复。 演示地址:物星科云证书管理系统 第三版…

爬虫虚拟环境

conda create --name myrepenv python3.12创建一个名为 myrepenv、Python 版本为 3.12 的全新 Conda 虚拟环境,适合需要隔离依赖或测试不同 Python 版本的项目。我的方式创建(需要指定盘符)conda create --prefixD:\Anaconda3\envs\myrepenv python3.12展示所下的co…

Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)

一、背景 二、Netty 单体架构的优缺点 优点 缺点 三、Netty 集群架构的优缺点 优点 缺点 四、适用场景对比 五、Netty单体架构代码实现 六、Netty集群架构方案实现 方案一、Nginx负载均衡实现集群(较为简单) Nginx配置 前端连接方式 方案二、NacosGateway(结合…

Oracle迁移到高斯,查询字段默认小写,解决办法

一、问题说明 Oracle中,查询结果字段默认大写。高斯中,查询结果字段默认小写。在Mybatis的xml中,如果查询语句使用Map接收查询结果,使用resultType"java.util.HashMap"或resultType"Map"等写法,返…

Android Jetpack Compose + MVVM 开发流程深度分析

核心组件关系图 [View] -- 观察 --> [ViewModel] -- 操作 --> [Repository]| | Compose UI StateFlow/LiveData| | 用户交互事件 Room/Retrofit| …

Tailwind CSS快速上手 Tailwind CSS的安装、配置、使用

📚前言 在Web前端开发的历史长河中,CSS的编写方式经历了多次演进,从早期的原生CSS 到 CSS预处理(Less/Sass/Stylus) 到 CSS-in-JS(Styled-Components/Emotion) 再到 Utility-First 原子化CSS。每一种演进方案其本质都是围绕“开发效率”、“…

单例模式的智慧:从UVM看控制的艺术

有时候,生活中的很多东西其实只需要一个就够了,就像一个公司只需要一个CEO,一个王朝只需要一个皇帝。在UVM验证环境中,也有很多这样的需求——有些对象,我们希望它在整个仿真过程中只存在一个实例。这就是我们今天要聊…

Hexo - 免费搭建个人博客01 - 安装软件工具

导言我的博客:https://q164129345.github.io/ Hexo 作为一个 Node.js 框架,它依赖于 Node.js 运行时环境来执行。 一、安装Node.js官方网址:https://nodejs.org/zh-cn追求系统稳定性、可靠性以及希望减少维护频率的用户来说,LTS版…

【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置

参考b站叩丁狼总结:完整版Kubernetes(K8S)全套入门微服务实战项目,带你一站式深入掌握K8S核心能力 在master节点执行 kubectl create deployment nginx --imagenginxkubectl expose deployment nginx --port80 --typeNodePort1. …