Prometheus + Grafana 监控常用服务
一、引言
Prometheus监控常见服务的原理主要包括服务暴露指标和Prometheus抓取指标。一方面,被监控服务通过自身提供的监控接口或借助Exporter将服务的性能指标等数据以HTTP协议的方式暴露出来;另一方面,Prometheus根据配置好的采集任务,定期去拉取这些服务暴露的指标数据,将其存储在本地的时间序列数据库中,之后用户就可以通过PromQL查询来分析这些数据,实现对服务的监控。
二、Prometheus监控MySQL服务
1. 安装数据库
这里就不展示怎么安装啦~
2. 启动数据库
[root@elk93 ~]# /etc/init.d/mysql.server start
Starting mysql.server (via systemctl): mysql.server.service.
[root@elk93 ~]#
[root@elk93 ~]# ss -ntl | grep 3306
LISTEN 0 151 *:3306 *:*
LISTEN 0 70 *:33060 *:*
[root@elk93 ~]# # 创建用户并且授权,这里我就用已经存在的用户。
mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| linux96 | % | mysql_native_password |
| nacos | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)mysql>
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO linux96;
Query OK, 0 rows affected (0.00 sec)# 查看权限
mysql> SHOW GRANTS FOR linux96;
+-------------------------------------------------------------------+
| Grants for linux96@% |
+-------------------------------------------------------------------+
| GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO `linux96`@`%` |
| GRANT ALL PRIVILEGES ON `nova_kafka`.* TO `linux96`@`%` |
+-------------------------------------------------------------------+
3. 下载mysql_exporter
[root@elk93 ~]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.17.2/mysqld_exporter-0.17.2.linux-amd64.tar.gz3.解压程序
[root@elk91 ~]# tar xf mysqld_exporter-0.17.2.linux-amd64.tar.gz -C /usr/local/bin/ mysqld_exporter-0.17.2.linux-amd64/mysqld_exporter --strip-components=1mysqld_exporter-0.17.2.linux-amd64/mysqld_exporter显式指定要解压的归档文件内的具体路径。即从压缩包中仅提取 mysqld_exporter-0.17.2.linux-amd64/ 目录下的 mysqld_exporter 文件。
--strip-components=1移除解压路径中的前 1层目录。[root@elk91 ~]#
[root@elk91 ~]# ll /usr/local/bin/
total 17936
drwxr-xr-x 2 root root 4096 Mar 27 10:56 ./
drwxr-xr-x 18 root root 4096 Mar 24 18:03 ../
-rwxr-xr-x 1 1001 1002 18356306 Feb 26 15:16 mysqld_exporter*
[root@elk91 ~]#
4. 启动MySQL exporter
# MySQL-exporter可以和要暴露http(s)接口服务在同一个节点,这里分开是为了证明,不在同一个节点也可以。
[root@elk91 ~]# cat .my.cnf
[client]
user=linux96
password=novacao666
host=10.0.0.93
[root@elk91 ~]# [root@elk91 ~]# mysqld_exporter --config.my-cnf="/root/.my.cnf"
time=2025-03-27T03:09:09.709Z level=INFO source=mysqld_exporter.go:239 msg="Starting mysqld_exporter" version="(version=0.17.2, branch=HEAD, revision=e84f4f22f8a11089d5f04ff9bfdc5fc042605773)"
time=2025-03-27T03:09:09.709Z level=INFO source=mysqld_exporter.go:240 msg="Build context" build_context="(go=go1.23.6, platform=linux/amd64, user=root@18b69b4b0fea, date=20250226-07:16:19, tags=unknown)"
time=2025-03-27T03:09:09.709Z level=INFO source=mysqld_exporter.go:252 msg="Scraper enabled" scraper=global_status
......
time=2025-03-27T03:09:09.710Z level=INFO source=tls_config.go:350 msg="TLS is disabled." http2=false address=[::]:9104
5. 测试访问
# 一般数据量大的都是正确的,如果是几十几百就说明我们暴露的数据不太对。
[root@elk93 ~]# curl -s http://10.0.0.91:9104/metrics| wc -l
2573
[root@elk93 ~]#
6. 配置Prometheus监控MySQL项
[root@prometheus-server31 ~]# tail -5 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml- job_name: linux96-mysql-exporterstatic_configs:- targets: - 10.0.0.91:9104# 热加载
[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
7. 验证监控结果并导入grafana模板
# 访问http://10.0.0.31:9090/targets?search=grafana导入模板ID 17320
18949
14057
7362
三、Prometheus监控zookeeper集群
zookeeper没有Prometheus提供的exporter组件,但是他自带metrics暴露方式;打开以下注释即可。
1. 修改zookeeper集群的配置信息
[root@elk91 ~]# vim /usr/local/zookeeper/conf/zoo.cfg
[root@elk91 ~]#
[root@elk91 ~]# tail -5 /usr/local/zookeeper/conf/zoo.cfg
# zookeeper没有Prometheus提供的exporter组件,但是他自带metrics暴露方式;打开以下注释即可。
# https://prometheus.io Metrics Exporter
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpHost=0.0.0.0
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true
[root@elk91 ~]# # 拷贝配置文件到其他集群的节点
[root@elk91 ~]# scp /usr/local/zookeeper/conf/zoo.cfg 10.0.0.92:/usr/local/zookeeper/conf/
[root@elk91 ~]# scp /usr/local/zookeeper/conf/zoo.cfg 10.0.0.93:/usr/local/zookeeper/conf/
2. 重启zookeeper服务
[root@elk91 ~]# zkServer.sh restart
[root@elk92 ~]# zkServer.sh restart
[root@elk93 ~]# zkServer.sh restart
3. 访问测试
http://10.0.0.91:7000/metrics
http://10.0.0.92:7000/metrics
http://10.0.0.93:7000/metrics
4. 配置prometheus监控zookeeper
[root@prometheus-server31 ~]# tail -7 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml- job_name: linux96-zk-exporterstatic_configs:- targets: - 10.0.0.91:7000- 10.0.0.92:7000- 10.0.0.93:7000
.....
[root@prometheus-server31 ~]# # 热加载Prometheus
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
5. 验证监控结果并导入grafana模板
5.验证配置是否生效
http://10.0.0.31:9090/targets?search=
# 看到Prometheus的targets出现zookeeper集群就行6.grafana导入模板ID
10465
四、Prometheus监控kafka集群
1. 启动kafka集群
[root@elk91 ~]# kafka-server-start.sh -daemon /usr/local/kafka_2.13-3.9.0/config/server.properties
[root@elk91 ~]# ss -ntl | grep 9092
LISTEN 0 50 [::ffff:10.0.0.91]:9092 *:*
[root@elk91 ~]# [root@elk92 ~]# kafka-server-start.sh -daemon /usr/local/kafka_2.13-3.9.0/config/server.properties
[root@elk92 ~]# ss -ntl | grep 9092
LISTEN 0 50 [::ffff:10.0.0.92]:9092 *:*
[root@elk92 ~]# [root@elk93 ~]# kafka-server-start.sh -daemon /usr/local/kafka_2.13-3.9.0/config/server.properties
[root@elk93 ~]# ss -ntl | grep 9092
LISTEN 0 50 [::ffff:10.0.0.93]:9092 *:*
[root@elk93 ~]#
2. 下载kafka exporter
wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.9.0/kafka_exporter-1.9.0.linux-amd64.tar.gz3.解压软件包
[root@elk92 ~]# tar xf kafka_exporter-1.9.0.linux-amd64.tar.gz -C /usr/local/bin/ kafka_exporter-1.9.0.linux-amd64/kafka_exporter --strip-components=1
[root@elk92 ~]#
[root@elk92 ~]# ll /usr/local/bin/
total 24520
drwxr-xr-x 2 root root 4096 Mar 27 11:44 ./
drwxr-xr-x 14 root root 4096 Mar 18 14:38 ../
-rwxr-xr-x 1 1001 fwupd-refresh 25099148 Feb 17 11:04 kafka_exporter*
[root@elk92 ~]#
3. 启动kafka exporter
# 这里我们指定了集群信息,和kafka的版本信息
[root@elk92 ~]# kafka_exporter --kafka.server=10.0.0.91:9092 --kafka.server=10.0.0.92:9092 --kafka.server=10.0.0.93:9092 --kafka.version="3.9.0"
4. 访问kafka exporter的WebUI
# 出现大量信息即可
http://10.0.0.92:9308/metrics
5. 配置Prometheus监控kafka集群
[root@prometheus-server31 ~]# tail -5 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml- job_name: linux96-kafka-exporterstatic_configs:- targets: - 10.0.0.92:9308
...
# 热加载
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
6. 验证监控结果并导入grafana模板
# 出现kafka集群的targets即可
http://10.0.0.31:9090/targets?search=8.grafana导入模板ID
12460
10122
五、prometheus监控nacos服务
nacos服务是自己有提供metrics接口,在配置文件中打开注释即可
参考链接: 监控手册 | Nacos 官网
1. 启动nacos集群
[root@elk91 ~]# /usr/local/nacos/bin/startup.sh
[root@elk92 ~]# /usr/local/nacos/bin/startup.sh
[root@elk93 ~]# /usr/local/nacos/bin/startup.sh
访问测试 :http://10.0.0.93:8848/
2. 修改nacos服务启用Metrics接口
# nacos和zk服务都是自己有提供metrics接口,在配置文件中打开注释即可[root@elk91 ~]# vim /usr/local/nacos/conf/application.properties
...
management.endpoints.web.exposure.include=prometheus,health
...
# 将配置文件拷贝给集群的其他节点
[root@elk91 ~]# scp /usr/local/nacos/conf/application.properties 10.0.0.92:/usr/local/nacos/conf/
[root@elk91 ~]# scp /usr/local/nacos/conf/application.properties 10.0.0.92:/usr/local/nacos/conf/
3. 重启服务
[root@elk91 ~]# /usr/local/nacos/bin/shutdown.sh
[root@elk92 ~]# /usr/local/nacos/bin/shutdown.sh
[root@elk93 ~]# /usr/local/nacos/bin/shutdown.sh [root@elk91 ~]# /usr/local/nacos/bin/startup.sh
[root@elk92 ~]# /usr/local/nacos/bin/startup.sh
[root@elk93 ~]# /usr/local/nacos/bin/startup.sh
4. 访问nacos的WebUI
http://10.0.0.91:8848/actuator/prometheus
http://10.0.0.92:8848/actuator/prometheus
http://10.0.0.93:8848/actuator/prometheus
5. 配置Prometheus监控nacos集群
# 在Prometheus配置文件中,他默认只会发现到是以/metrics结尾的URI,所以这里我们要指引一下Prometheus。加一行配置文件指定。
[root@prometheus-server31 ~]# tail -8 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-nacos-exportermetrics_path: "/actuator/prometheus"static_configs:- targets: - 10.0.0.91:8848- 10.0.0.92:8848- 10.0.0.93:8848......# 热加载Prometheus
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
6. 验证监控结果并导入grafana模板
http://10.0.0.31:9090/targets?search=7.grafana导入模板ID
13221
六、 Prometheus监控docker原生Metrics
参考链接:
https://docs.docker.com/reference/cli/dockerd/#daemon-metrics
1. 停止docker
[root@elk93 ~]# systemctl stop docker
2. 修改docker启动脚本启用Metrics监控指标
[root@elk93 ~]# cat /lib/systemd/system/docker.service
[Unit]
Description=novacao linux Docke Engine
Documentation=https://docs.docker.com
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd --metrics-addr 0.0.0.0:5200
[Install]
WantedBy=multi-user.target
[root@elk93 ~]#
[root@elk93 ~]# systemctl daemon-reload
[root@elk93 ~]#
[root@elk93 ~]# systemctl restart docker.service
[root@elk93 ~]#
[root@elk93 ~]# ss -ntl | grep 5200
LISTEN 0 4096 *:5200 *:*
[root@elk93 ~]#
3. 访问docker的Metrics接口
http://10.0.0.93:5200/metrics[root@node-exporter41 ~]# curl -s http://10.0.0.93:5200/metrics| wc -l
589
[root@node-exporter41 ~]#
4. prometheus监控docker服务
[root@prometheus-server31 ~]# tail -5 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-docker-exporterstatic_configs:- targets: - 10.0.0.93:5200[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
5. 验证监控结果并导入grafana模板
http://10.0.0.31:9090/targets?search=8.grafana导入模板ID
9621# 这里Prometheus提供的原生Metrics接口数据显示不全,所以我们有第二种解决方案。
Prometheus基于cAdvisor监控Docker容器
1. cAdvisor是什么?
cAdvisor(Container Advisor)是由Google开源的一款轻量级容器监控工具,主要用于实时收集、分析和展示容器运行时资源使用情况与性能数据,帮助用户了解容器化应用的行为和资源消耗。
2. 在docker节点拉取镜像
[root@elk92 ~]# docker pull gcr.io/cadvisor/cadvisor-amd64:v0.52.1
v0.52.1: Pulling from cadvisor/cadvisor-amd64
44cf07d57ee4: Already exists
.....
Status: Downloaded newer image for gcr.io/cadvisor/cadvisor-amd64:v0.52.1
gcr.io/cadvisor/cadvisor-amd64:v0.52.1
[root@elk92 ~]#
3. 运行cAdvisor
[root@elk92 ~]# docker run \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--volume=/dev/disk/:/dev/disk:ro \--publish=18080:8080 \--detach=true \--name=cadvisor \--privileged \--device=/dev/kmsg \gcr.io/cadvisor/cadvisor-amd64:v0.52.1[root@elk92 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3857cc9ff34e gcr.io/cadvisor/cadvisor-amd64:v0.52.1 "/usr/bin/cadvisor -…" 2 minutes ago Up About a minute (healthy) 0.0.0.0:18080->8080/tcp, :::18080->8080/tcp cadvisor
[root@elk92 ~]#
4. 访问测试
[root@elk92 ~]# curl -s http://10.0.0.92:18080/metrics | wc -l
4885
[root@elk92 ~]#
5. 访问cAdVisor的webUI测试
http://10.0.0.92:18080/containers/
6. 配置Prometheus监控docker容器
[root@prometheus-server31 ~]# tail -6 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-cadVisor-exporterstatic_configs:- targets: - 10.0.0.92:18080- 10.0.0.93:18080# 热加载Prometheus
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
7. 验证监控结果并导入grafana模板
http://10.0.0.31:9090/targets?search=6.grafana导入模板ID
11600
七、prometheus监控nginx
方案1>nginx-module-vts
1. 编译安装NGINX
1.1 安装编译工具
[root@elk91 ~]# apt -y install git wget gcc make zlib1g-dev build-essential libtool openssl libssl-dev1.2 克隆nginx-module-vts模块# 配置虚拟机VPN
export https_proxy=http://10.0.0.1:7890
export http_proxy=http://10.0.0.1:7890[root@elk91 ~]# env| grep http
https_proxy=http://10.0.0.1:7890
http_proxy=http://10.0.0.1:7890
[root@elk91 ~]# [root@elk91 ~]# git clone https://github.com/vozlt/nginx-module-vts.git
Cloning into 'nginx-module-vts'...
remote: Enumerating objects: 1134, done.
remote: Counting objects: 100% (262/262), done.
remote: Compressing objects: 100% (87/87), done.
remote: Total 1134 (delta 206), reused 175 (delta 175), pack-reused 872 (from 2)
Receiving objects: 100% (1134/1134), 1.22 MiB | 935.00 KiB/s, done.
Resolving deltas: 100% (746/746), done.
[root@elk91 ~]# 1.3 下载nginx软件包
[root@elk91 ~]# wget http://nginx.org/download/nginx-1.27.3.tar.gz1.4 解压nginx
[root@elk91 ~]# tar xf nginx-1.27.3.tar.gz 1.5 配置nginx
[root@elk91 ~]# cd nginx-1.27.3/
[root@elk91 nginx-1.27.3]#
[root@elk91 nginx-1.27.3]# ./configure --prefix=/softwares/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --without-http_rewrite_module --with-http_stub_status_module --without-http_gzip_module --with-file-aio --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/root/nginx-module-vts1.6 编译并安装nginx
make -j 2 && make install
2. 修改nginx的配置文件
[root@elk91 nginx-1.27.3]# vim /softwares/nginx/conf/nginx.conf
...
http {vhost_traffic_status_zone;upstream novacao-promethues {server 10.0.0.31:9090;}...server {...location / {root html;# index index.html index.htm;proxy_pass http://novacao-promethues;}location /nginx_status {vhost_traffic_status_display;vhost_traffic_status_display_format html;}}
}
3. 启动NGINX
[root@elk91 nginx-1.27.3]# /softwares/nginx/sbin/nginx -t
nginx: the configuration file /softwares/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /softwares/nginx/conf/nginx.conf test is successful
[root@elk91 nginx-1.27.3]# 1.9 启动nginx
[root@elk91 nginx-1.27.3]# systemctl disable --now nginx
Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable nginx
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.
[root@elk91 nginx-1.27.3]#
[root@elk91 nginx-1.27.3]# /softwares/nginx/sbin/nginx
[root@elk91 nginx-1.27.3]#
4. 访问nginx的状态页面
http://10.0.0.91/nginx_status/
http://10.0.0.91/nginx_status/format/prometheus
5. 修改Prometheus的配置文件
[root@prometheus-server31 ~]# tail -6 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-nginx-vts-modulesmetrics_path: "/nginx_status/format/prometheus"static_configs:- targets: - 10.0.0.91:80# 热加载
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
6. 验证监控结果并导入grafana模板
# 查看Prometheus
http://10.0.0.31:9090/targets?search=1.12 导入模板ID
9785
方案2>安装nginx-vtx-exporter
# 前提也是需要编译好NGINX
1. 下载nginx-vtx-exporter
[root@elk92 ~]# wget https://github.com/sysulq/nginx-vts-exporter/releases/download/v0.10.8/nginx-vtx-exporter_0.10.8_linux_amd64.tar.gz[root@elk92 ~]# tar xf nginx-vtx-exporter_0.10.8_linux_amd64.tar.gz -C /usr/local/bin/ nginx-vtx-exporter
[root@elk92 ~]#
[root@elk92 ~]# ll /usr/local/bin/nginx-vtx-exporter
-rwxr-xr-x 1 1001 avahi 7950336 Jul 11 2023 /usr/local/bin/nginx-vtx-exporter*
[root@elk92 ~]#
2. 运行nginx-vtx-exporter
[root@elk92 ~]# nginx-vtx-exporter -nginx.scrape_uri=http://10.0.0.91/nginx_status/format/json
2025/03/27 16:25:19 Starting nginx_vts_exporter (version=, branch=, revision=)
2025/03/27 16:25:19 Build context (go=go1.20.5, user=, date=)
2025/03/27 16:25:19 Starting Server at : :9913
2025/03/27 16:25:19 Metrics endpoint: /metrics
2025/03/27 16:25:19 Metrics namespace: nginx
2025/03/27 16:25:19 Scraping information from : http://10.0.0.91/nginx_status/format/json
3. 访问nginx exporter的WebUI
http://10.0.0.93:9913/metrics
4. 配置prometheus采集nginx数据
[root@prometheus-server31 ~]# tail -12 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-nginx-vts-modulesmetrics_path: "/nginx_status/format/prometheus"static_configs:- targets: - 10.0.0.91:80- job_name: "linux96-nginx-vtx-exporter"static_configs:- targets: - 10.0.0.92:9913[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
5. 验证监控结果并导入grafana模板
导入grafana模板
2949
八、Prometheus监控redis
1. 部署Redis服务
1.拉取redis镜像
[root@elk92 ~]# docker pull redis:7.4.2-alpine
7.4.2-alpine: Pulling from library/redis
...........
Digest: sha256:02419de7eddf55aa5bcf49efb74e88fa8d931b4d77c07eff8a6b2144472b6952
Status: Downloaded newer image for redis:7.4.2-alpine
docker.io/library/redis:7.4.2-alpine2.部署redis服务
[root@elk92 ~]# docker run -d --network host --name redis-server redis:7.4.2-alpine
14f6cd2c24f0735bb5bfd189730898b15380101dd11516ad2af3b7776a33a75a
[root@elk92 ~]#
[root@elk92 ~]# ss -ntl | grep 6379
LISTEN 0 511 0.0.0.0:6379 0.0.0.0:*
LISTEN 0 511 [::]:6379 [::]:*
[root@elk92 ~]#
2. 部署redis-exporter
wget https://github.com/oliver006/redis_exporter/releases/download/v1.69.0/redis_exporter-v1.69.0.linux-amd64.tar.gz4.解压软件包
[root@elk93 ~]# tar xf redis_exporter-v1.69.0.linux-amd64.tar.gz -C /usr/local/bin/ redis_exporter-v1.69.0.linux-amd64/redis_exporter --strip-components=1
[root@elk93 ~]#
[root@elk93 ~]# ll /usr/local/bin/redis_exporter
-rwxr-xr-x 1 mysql fwupd-refresh 9638072 Mar 15 12:41 /usr/local/bin/redis_exporter*
[root@elk93 ~]#
3. 运行redis exporter
[root@elk93 ~]# redis_exporter -redis.addr redis://10.0.0.92:6379
INFO[0000] Redis Metrics Exporter v1.69.0 build date: 2025-03-15-04:40:26 sha1: 71dbe37fb14a4ae2537c1790a239dc1e568ffba5 Go: go1.24.1 GOOS: linux GOARCH: amd64
INFO[0000] Providing metrics at :9121/metrics
4. 访问redis exporter的WebUI
http://10.0.0.93:9121/metrics
5. 配置Prometheus监控redis容器指标
[root@prometheus-server31 ~]# tail -7 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-redis-exporterstatic_configs:- targets: - 10.0.0.93:9121 [root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
6. 验证监控结果并导入grafana模板
验证Prometheus配置是否生效
http://10.0.0.31:9090/targets?search=9.grafana导入模板ID
763
14091
14615
彩蛋、 grafana安装插件
1. 图表报错提示
Panel plugin not found: natel-discrete-panel说明需要安装对应的插件,使用grafana客户端工具安装即可。
2. 安装指定插件
[root@prometheus-server31 ~]# ll /var/lib/grafana/
total 5236
drwxr-xr-x 5 grafana grafana 4096 Mar 27 16:53 ./
drwxr-xr-x 61 root root 4096 Mar 26 11:59 ../
drwxr-x--- 3 grafana grafana 4096 Mar 26 12:00 alerting/
drwx------ 2 grafana grafana 4096 Mar 26 12:00 csv/
-rw-r----- 1 grafana grafana 5337088 Mar 27 16:53 grafana.db
drwx------ 2 grafana grafana 4096 Mar 26 12:00 png/
[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# grafana-cli plugins install natel-discrete-panel
✔ Downloaded and extracted natel-discrete-panel v0.1.1 zip successfully to /var/lib/grafana/plugins/natel-discrete-panelPlease restart Grafana after installing or removing plugins. Refer to Grafana documentation for instructions if necessary.[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# ll /var/lib/grafana/
total 5240
drwxr-xr-x 6 grafana grafana 4096 Mar 27 16:56 ./
drwxr-xr-x 61 root root 4096 Mar 26 11:59 ../
drwxr-x--- 3 grafana grafana 4096 Mar 26 12:00 alerting/
drwx------ 2 grafana grafana 4096 Mar 26 12:00 csv/
-rw-r----- 1 grafana grafana 5337088 Mar 27 16:53 grafana.db
drwxr-xr-x 3 root root 4096 Mar 27 16:56 plugins/ # 安装后会将插件存储在本地。
drwx------ 2 grafana grafana 4096 Mar 26 12:00 png/
[root@prometheus-server31 ~]#
3. 重启grafana使得插件生效
[root@prometheus-server31 ~]# systemctl restart grafana-server.service
[root@prometheus-server31 ~]#
九、Prometheus监控MongoDB
1. 部署mongoDB服务
1.下载mongoDB镜像
[root@elk92 ~]# docker pull mongo:8.0.6-noble
8.0.6-noble: Pulling from library/mongo
.................
Status: Downloaded newer image for mongo:8.0.6-noble
docker.io/library/mongo:8.0.6-noble
[root@elk92 ~]# 2.部署mongoDB服务
[root@elk92 ~]# docker run -d --name mongodb-server --network host mongo:8.0.6-noble
4b0f00dea78bb571c216c344984ced026c1210c94db147fdc9e32f549e3135de
[root@elk92 ~]#
[root@elk92 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b0f00dea78b mongo:8.0.6-noble "docker-entrypoint.s…" 2 seconds ago Up 1 second mongodb-server
[root@elk92 ~]#
[root@elk92 ~]# ss -ntl | grep 27017
LISTEN 0 4096 0.0.0.0:27017 0.0.0.0:*
[root@elk92 ~]#
2. 部署MongoDB的exporter
https://github.com/percona/mongodb_exporter/releases/download/v0.43.1/mongodb_exporter-0.43.1.linux-amd64.tar.gz解压软件包
[root@elk91 ~]# tar xf mongodb_exporter-0.43.1.linux-amd64.tar.gz -C /usr/local/bin/ mongodb_exporter-0.43.1.linux-amd64/mongodb_exporter --strip-components=1
[root@elk91 ~]#
[root@elk91 ~]# ll /usr/local/bin/mongodb_exporter
-rwxr-xr-x 1 1001 geoclue 20467864 Dec 13 20:10 /usr/local/bin/mongodb_exporter*
3. 准备MongoDB测试数据
[root@elk91 ~]# vim insert_data.js
// 创建数据库和集合
db = db.getSiblingDB('testdb');// 插入用户数据(10条)
for (let i = 1; i <= 10; i++) {db.users.insertOne({name: `user${i}`,email: `user${i}@example.com`,age: Math.floor(Math.random() * 50 + 18),created_at: new Date()});
}// 插入订单数据(10条)
for (let i = 1; i <= 10; i++) {db.orders.insertOne({user_id: i,product: `product${Math.floor(Math.random() * 5)}`,amount: Math.random() * 100,status: ["pending", "completed", "cancelled"][Math.floor(Math.random() * 3)],created_at: new Date()});
}// 插入产品数据(5条)
const products = ["product0", "product1", "product2", "product3", "product4"];
products.forEach((product, index) => {db.products.insertOne({name: product,price: Math.random() * 50 + 20,stock: Math.floor(Math.random() * 100)});
});// 创建索引(可选)
db.users.createIndex({ email: 1 });
db.orders.createIndex({ user_id: 1 });################################################################## 将脚本复制到容器内
docker cp insert_data.js mongodb-server:/tmp/insert_data.js# 执行脚本(使用 mongosh)
docker exec -it mongodb-server mongosh --quiet /tmp/insert_data.js
4. 运行mongodb-exporter
mongodb_exporter --mongodb.uri=mongodb://10.0.0.92:27017 --log.level=info --collector.dbstats --collector.diagnosticdata --collector.replicasetstatus --collector.topmetrics --collector.currentopmetrics --collector.exporter-metrics --collector.collstats --collector.indexstats --mongodb.collstats-colls=testdb.users,testdb.orders,testdb.products --mongodb.indexstats-colls=testdb.users,testdb.orders#####################################3验证mongoDB-exporter的WebUI
http://10.0.0.91:9216/metrics
5. 配置Prometheus监控mongoDB容器
[root@prometheus-server31 ~]# tail -7 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml - job_name: linux96-mongodb-exporterstatic_configs:- targets: - 10.0.0.91:9216[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
6. 验证监控结果并导入grafana模板
grafana导入模板ID
16504当然如果实在找不到,就只能自己定义Dashboard。比如: "mongodb_up"
十、Prometheus监控ElasticSearch集群
保障ES集群状态正常
[root@elk91 ~]# curl https://10.0.0.91:9200/_cat/nodes -u elastic:123456 -k
10.0.0.93 59 33 45 7.11 2.18 0.75 cdfhilmrstw - elk93
10.0.0.91 78 44 4 0.73 0.51 0.29 cdfhilmrstw * elk91
10.0.0.92 54 31 34 1.49 0.51 0.18 cdfhilmrstw - elk92
1. 下载elasticsearch_exporter服务插件
[root@node-exporter41 ~]# wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.9.0/elasticsearch_exporter-1.9.0.linux-amd64.tar.gz
2.解压软件包
[root@node-exporter41 ~]# tar xf elasticsearch_exporter-1.9.0.linux-amd64.tar.gz -C /usr/local/bin/ elasticsearch_exporter-1.9.0.linux-amd64/elasticsearch_exporter --strip-components=1
[root@node-exporter41 ~]# ll /usr/local/bin/
total 14728
drwxr-xr-x 2 root root 4096 Mar 27 02:42 ./
drwxr-xr-x 10 root root 4096 Feb 16 2024 ../
-rwxr-xr-x 1 1001 fwupd-refresh 15069336 Mar 3 10:01 elasticsearch_exporter*
2. 启动elasticsearch-exporter
[root@node-exporter41 ~]# elasticsearch_exporter --es.uri="https://elastic:123456@10.0.0.91:9200" --es.ssl-skip-verify
time=2025-03-27T02:42:46.739Z level=INFO source=clusterinfo.go:211 msg="triggering initial cluster info call"
time=2025-03-27T02:42:46.739Z level=INFO source=clusterinfo.go:182 msg="providing consumers with updated cluster info label"
time=2025-03-27T02:42:46.750Z level=INFO source=main.go:244 msg="started cluster info retriever" interval=5m0s
.....
time=2025-03-27T02:14:19.093Z level=INFO source=tls_config.go:350 msg="TLS is disabled." http2=false address=[::]:9114
3. 配置Prometheus的job服务发现
[root@prometheus-server31 ~]# tail -5 /softwares/prometheus-2.53.4.linux-amd64/prometheus.yml- job_name: linux96-es-exporterstatic_configs:- targets: - 10.0.0.41:91145.热加载Prometheus
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
[root@prometheus-server31 ~]#
4. 验证监控结果并导入grafana模板
验证Prometheus配置是否生效
http://10.0.0.31:9090/targets?search=7.grafana导入模板ID
14191
9746
十一、小结
Prometheus监控服务分为三种情况。
1. 第一种情况
在Prometheus官网里面提供了exporter的组件,我们只需要部署好组件然后把要监控的服务使用http(s)的方式暴露出去即可,然后Prometheus修改配置文件,配置好服务发现,最后Grafana套用官方的模版ID即可。(当然也可以自己去制作dashboard展示)。
# Prometheus的exporter官网
https://prometheus.io/download/
https://prometheus.io/docs/instrumenting/exporters/
# Grafana的模版官网
https://grafana.com/dashboards2. 第二种情况
有些服务自己本身就支持云原生的Prometheus监控,在自己的配置文件中就支持metrics的接口暴露。只需要在配置文件中修改或者取消注释好配置即可,然后Prometheus修改配置文件,配置好服务发现,最后Grafana套用官方的模版ID即可。(当然也可以自己去制作dashboard展示)。
例如:nacos,zookeeper3. 第三种情况
第一二种情况都不能达到预期的标准,那么他就会有第三种服务为其metrics提供接口。
例如:docker的cAdvisor
希望这篇文章可以帮助您在生产环境中高效率的解决问题。
最后有关K8S的如何监控可以看我的基于 Operator 部署 Prometheus 实现 K8S 监控-CSDN博客
这篇文章!
相关文章:

Prometheus + Grafana 监控常用服务
一、引言 Prometheus监控常见服务的原理主要包括服务暴露指标和Prometheus抓取指标。一方面,被监控服务通过自身提供的监控接口或借助Exporter将服务的性能指标等数据以HTTP协议的方式暴露出来;另一方面,Prometheus根据配置好的采集任务&…...

6月1日星期日今日早报简报微语报早读
6月1日星期日,农历五月初六,早报#微语早读。 1、10个省份城镇化率超70%,广东城镇人口超9700万; 2、长沙居民起诉太平财险不赔“新冠险”,立案878天后获胜判; 3、海口:全市范围内禁止投放互联…...
盲盒经济2.0:数字藏品开箱是否适用赌博法规
首席数据官高鹏律师团队编著 一、年轻人的“盲盒信仰”,法律的灰色地带 近年来,“盲盒经济”从实体玩具扩展到数字藏品领域,掀起了一波全民开箱热潮。年轻人在社交平台上晒出“开箱暴击”的喜悦,平台方则以“限量发行”“价值赋…...

如何在 Ubuntu 24.04 服务器上安装 Apache Solr
Apache Solr 是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发,提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…...

unity编辑器扩展dll形式展示
1.背景:最近搞工程迁移发现一旦c#报错就会导致编辑器菜单没法使用,做了一些尝试发现使用dll的方式会是不错的选择。当然有些工具还是建议用外部的c#工程来写比如winform. 2.遇到的问题:我记得之前2017年左右的时候做一个unity的dll工程并不需…...

vscode中launch.json、tasks.json的作用及实例
文章目录 launch.json是什么作用多环境调试简单实例进阶使用核心配置项解析调试第三方程序 launch.json是什么 顾名思义:它是在.vscode文件夹下的launch.json,所以是vscode启动调试的配置文件。总结:通过定义调试参数、环境变量和启动方式&a…...
UI自动化测试中的元素等待机制解析
目录 一、显式等待机制 二、隐式等待机制 三、强制等待机制 等待策略对比指南 在UI自动化测试中,元素定位失败通常由两种原因导致:页面存在iframe框架或未合理设置等待机制。本文重点解析三种等待策略及其应用场景。 一、显式等待机制 核心原理 通过…...

VScode编译调试debug,gpu的cuda程序,Nsight
进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。 一、安装Nsight 二、创建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…...

中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新
全球化是阿里云的长期战略,未来阿里云将持续加大云和 AI 基础设施建设投入。首先是加速打造全球化的云计算网络,一张具备 AI技术服务能力和全球竞争力的云计算网络是阿里云的长期目标。 —— 阿里巴巴集团 CEO、阿里云智能集团董事长兼 CEO 吴泳铭 5 月 …...
qwen-0.5b小模型的用处和显存要求
详细分析一下 Qwen-0.5B (5亿参数) 这个模型在不同训练阶段的显存需求以及它的用途。(根据网页反馈:1、0.5b做蒸馏,特定领域轻松超越sft的7b;2、大部分实时要求高的业务需要用小模型初筛降量,比如意图识别;…...

防范DDoS攻击,服务器稳定性崩溃的根源与高效防御对策
DDoS攻击(分布式拒绝服务攻击)已成为危害服务器稳定性和业务连续性的主要因素之一。本文将深入探讨为什么服务器一遇到DDoS攻击就崩溃,以及如何从根本上实现有效防御和应对这一威胁,帮助企业提升网络安全水平。 具体内容如下&…...

深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
目录 一、引言 二、实验环境说明 三、实验 1:Nginx 服务安全上下文配置 3.1 实验目标 3.2 操作步骤 1. 开启 SELinux 并重启系统 2. 安装 Nginx 并创建自定义目录 3. 配置 Nginx 指向自定义目录 4. 分析 SELinux 上下文冲突 5. 修改上下文为合法类型 6. 验…...

C++ —— STL容器——string类
1. 前言 本篇博客将会介绍 string 中的一些常用的函数,在使用 string 中的函数时,需要加上头文件 string。 2. string 中的常见成员函数 2.1 初始化函数 string 类中的常用的初始化函数有以下几种: 1. string() …...

用JS实现植物大战僵尸(前端作业)
1. 先搭架子 整体效果: 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…...
Rust Mock 工具
Rust Mock 工具 Mock(模拟)是测试中不可或缺的工具,用来替代复杂或不可控的依赖,比如数据库、网络服务等,帮助我们写出高质量、健壮的测试代码。Rust 社区中,mockall 和 mockito 是两款主流且强大的 Mock …...
C++读写锁以及实现方式
文章目录 【C专题】读写锁(Reader-Writer Lock)原理与实现方式(含C11/20实践)一、读写锁核心概念1. **什么是读写锁?**2. **读写锁 vs 互斥锁** 二、C中的读写锁实现方式 方案一:POSIX 读写锁(p…...

Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
最终效果 页面 src/renderer/src/App.vue <div class"dirPanel"><div class"panelTitle">文件列表</div><div class"searchFileBox"><Icon class"searchFileInputIcon" icon"material-symbols-light:…...

华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台
目录 前言 1 Dify与华为云部署概述 1.1 什么是 Dify 1.2 华为云与 Flexus 云服务器的优势 2 云服务器部署 Dify 的步骤详解 2.1 模板选择 2.2 参数配置 2.3 资源栈设置 2.4 确认部署信息并执行 3 部署成功后的操作与平台使用指南 3.1 访问平台 3.2 设置管理员账号 …...
[git每日一句]Your branch is up to date with ‘origin/master‘
这句话是 Git 版本控制系统的提示信息,意思是: "你当前所在的分支已经与远程仓库(origin)的 master 分支同步,没有需要推送的提交。" 详细解释: Your branch - 指你当前所在的本地分支 is up …...

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…...

机器人学基础——正运动学(理论推导及c++实现)
机器人正运动学 机器人正运动学一般是指从机器人的关节位置到基于参考坐标系下末端执行器的位置。 平移变换和旋转变换 平移变换 假设我们有两个坐标系A和B,坐标系A与B的方位相同,xyz轴的指向都是一致的,即没有旋转变换。有一点p…...

[网页五子棋][对战模块]处理连接成功,通知玩家就绪,逻辑问题(线程安全,先手判定错误)
文章目录 处理连接成功通知玩家就绪逻辑图问题 1:线程安全问题 2:先手判定错误两边都是提示:轮到对方落子 处理连接成功 实现 GameAPI 的 afterC…...
TensorFlow Extended (TFX) 生产环境模型版本控制与回滚实战指南
TFX 版本控制核心架构 TFX 通过以下组件构建完整的模型生命周期管理系统: ML Metadata (MLMD):记录所有实验和管道的元数据Pusher 组件:负责模型部署与版本标记Model Registry:集中式模型存储库&#x…...

【Web应用】若依框架:基础篇11功能详解-系统接口
文章目录 ⭐前言⭐一、课程讲解⭐二、自己动手实操⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数据库、操作系统、大数据、人工智能、工控、网络、…...

【Docker项目实战篇】Docker部署PDF查看器PdfDing
【Docker项目实战篇】Docker部署PDD查看器PdfDing 一、PdfDing介绍1.1 PdfDing简介1.2 PdfDing主要特点1.3 主要使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Pd…...
Redis 常用数据类型和命令使用
目录 1 string 2 hash 3 list 4 set集合 5 zset有序集合 1 string 值可以是字符串、数字和二进制的value,值最大不能超过512MB 应用场景: 应用程序缓存 计数器 web共享session 限速 1.1 设置单个键值 set <key> value [EX seconds|PX…...

【Linux系统】第八节—进程概念(上)—冯诺依曼体系结构+操作系统+进程及进程状态+僵尸进程—详解!
hi,我是云边有个稻草人 偶尔中二的博主^(* ̄(oo) ̄)^,与你分享专业知识,祝博主们端午节快乐! Linux—本节博客所属专栏—持续更新中—欢迎订阅! 目录 一、冯诺依曼体系结构 二、操作系统(Opera…...
WPF 全局加载界面、多界面实现渐变过渡效果
WPF 全局加载界面与渐变过渡效果 完整实现方案 MainWindow.xaml <Window x:Class"LoadingScreenDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…...
WebSocket与实时对话式AI服务的集成
WebSocket与实时对话式AI服务的集成 在现代对话式AI系统中,传统的HTTP请求-响应模型已难以满足实时交互的体验需求。特别是用户对响应速度、逐字输出、会话上下文保持等方面提出更高要求时,需要一种能够建立持久连接并支持双向通信的协议。WebSocket正是在这一背景下,成为A…...
【xmb】】内部文档148344599
这里写自定义目录标题 CyberDog 2 仿真智能物流配送系统 – 初赛设计报告摘要目录1 引言2 任务与需求分析3 系统总体设计4 核心算法与模块实现5 仿真测试与结果分析6 结论与展望 CyberDog 2 仿真智能物流配送系统 – 初赛设计报告 团队名称: (晚点写&am…...