6.prometheus监控--监控redis/rabbitmq/mongodb
<h3>1.监控redis</h3><h4>1.1 redis_exporter安装方式</h4>
<h5>1.1.1 二进制源码安装方式</h5>
<p>参考nginx二进制安装方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">redis_exporter下载地址:https://github.com/oliver006/redis_exporter/releases
系统服务:
cat > /etc/systemd/system/redis_exporter.service </span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)"><"EOF</span><span style="color: rgba(255, 0, 0, 1)">"
Description</span><span style="color: rgba(0, 0, 255, 1)">=Prometheus </span><span style="color: rgba(255, 0, 0, 1)">Redis Exporter
After</span><span style="color: rgba(0, 0, 255, 1)">=network.target
</span><span style="color: rgba(255, 0, 0, 1)">
Type</span><span style="color: rgba(0, 0, 255, 1)">=simple
</span><span style="color: rgba(255, 0, 0, 1)">User</span><span style="color: rgba(0, 0, 255, 1)">=prometheus
</span><span style="color: rgba(255, 0, 0, 1)">Group</span><span style="color: rgba(0, 0, 255, 1)">=prometheus
</span><span style="color: rgba(255, 0, 0, 1)">Restart</span><span style="color: rgba(0, 0, 255, 1)">=always
</span><span style="color: rgba(255, 0, 0, 1)">ExecStart</span><span style="color: rgba(0, 0, 255, 1)">=/opt/prometheus/redis_exporter/redis_exporter </span><span style="color: rgba(255, 0, 0, 1)">\
-redis.addr localhost:6379 \
-redis.password 123456
WantedBy</span><span style="color: rgba(0, 0, 255, 1)">=multi-user.target
</span><span style="color: rgba(255, 0, 0, 1)">EOF</span></pre>
</div>
<h5>1.1.2 docker安装</h5>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># docker直接运行
docker run </span>-d --restart=always --name redis_exporter -p <span style="color: rgba(128, 0, 128, 1)">9121</span>:<span style="color: rgba(128, 0, 128, 1)">9121</span> oliver006/redis_exporter --redis.addr redis:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.100:6379 --redis.password '123456'</span>
<span style="color: rgba(0, 0, 0, 1)">
# docker</span>-<span style="color: rgba(0, 0, 0, 1)">compose方式
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> >docker-compose.yaml <<<span style="color: rgba(0, 0, 0, 1)">EOF
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3.3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
redis_exporter:
image: oliver006</span>/<span style="color: rgba(0, 0, 0, 1)">redis_exporter
container_name: redis_exporter
restart: always
environment:
REDIS_ADDR: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">192.168.10.100:6379</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
REDIS_PASSWORD: </span><span style="color: rgba(128, 0, 128, 1)">123456</span><span style="color: rgba(0, 0, 0, 1)">
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9121:9121</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
EOF
# 启动
docker</span>-compose up -<span style="color: rgba(0, 0, 0, 1)">d
# metrics地址
http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.100:9121/metrics</span></pre>
</div>
<h4>1.2 Prometheus配置</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 配置prometheus去采集(拉取)redis_exporter的监控样本数据
cd </span>/data/docker-<span style="color: rgba(0, 0, 0, 1)">prometheus
#在scrape_configs(搜刮配置):下面增加如下配置:
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> >> prometheus/prometheus.yml << <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span>
- job_name: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">redis_exporter</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
static_configs:
</span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">192.168.10.100:9121</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
labels:
instance: test服务器
EOF
# 重载
curl </span>-X POST http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:9090/-/reload</span></pre>
</div>
<p><img src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424175611847-941202725.png"></p>
<h4> 1.3 granfa展示</h4>
<p>https://grafana.com/grafana/dashboards/11835-redis-dashboard-for-prometheus-redis-exporter-helm-stable-redis-ha/</p>
<p><img src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424175822455-1927963402.png"></p>
<h4> 1.5 常用监控指标</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">redis_up # 服务器是否在线
redis_uptime_in_seconds # 运行时长,单位 s
rate(redis_cpu_sys_seconds_total) + rate(redis_cpu_user_seconds_total) # 占用 CPU 核数
redis_memory_used_bytes # 占用内存量
redis_memory_max_bytes # 限制的最大内存,如果没限制则为 0
delta(redis_net_input_bytes_total) # 网络接收的 bytes
delta(redis_net_output_bytes_total) # 网络发送的 bytes
redis_connected_clients # 客户端连接数
redis_connected_clients / redis_config_maxclients # 连接数使用率
redis_rejected_connections_total # 拒绝的客户端连接数
redis_connected_slaves # slave 连接数</span></pre>
</div>
<h4>1.6 触发器配置</h4>
<p>将触发器根据服务不同,进行分开,避免规则列表过长</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd /data/docker-prometheus
mkdir prometheus/rules
vim prometheus/prometheus.yml
# 报警(触发器)配置
rule_files:
- "alert.yml"
- "rules/*.yml"<br></span></pre>
</div>
<div class="lake-content">
<p id="5b60d4ed"><span class="ne-text">redis触发器(告警规则)</span></p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_3849f796-3f0a-458a-8996-268df7e2cdc0" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_3849f796-3f0a-458a-8996-268df7e2cdc0" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> >> prometheus/rules/redis.yml <<<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">groups</span><span style="color: rgba(0, 0, 0, 1)">:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: redis
rules:
</span>-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisDown
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: redis_up == <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Redis Down,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis实例 is down</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisMissingBackup
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: <span style="color: rgba(0, 0, 255, 1)">time</span>() - redis_rdb_last_save_timestamp_seconds > <span style="color: rgba(128, 0, 128, 1)">60</span> * <span style="color: rgba(128, 0, 128, 1)">60</span> * <span style="color: rgba(128, 0, 128, 1)">24</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis备份丢失,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis 24小时未备份</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisOutOfConfiguredMaxmemory
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: redis_memory_used_bytes / redis_memory_max_bytes * <span style="color: rgba(128, 0, 128, 1)">100</span> > <span style="color: rgba(128, 0, 128, 1)">90</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 2m
labels:
severity: warning
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis超出配置的最大内存,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis内存使用超过配置最大内存的90%</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisTooManyConnections
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: redis_connected_clients > <span style="color: rgba(128, 0, 128, 1)">100</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 2m
labels:
severity: warning
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis连接数过多,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis当前连接数为: {{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisNotEnoughConnections
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: redis_connected_clients < <span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 2m
labels:
severity: warning
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis没有足够的连接,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis当前连接数为: {{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RedisRejectedConnections
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: increase(redis_rejected_connections_total) > <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Redis有拒绝连接,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">与Redis 的某些连接被拒绝{{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
EOF</span></pre>
</div>
<span class="cnblogs_code_collapse">redis告警规则</span></div>
<p>检查配置,重新加载</p>
<p>docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml</p>
<p>curl -X POST http://localhost:9090/-/reload</p>
<p><strong>检查:</strong></p>
<p>http://192.168.10.14:9090/rules#redis</p>
<p>http://192.168.10.14:9090/alerts?search=</p>
<p><img alt="" loading="lazy" src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424181643895-1013069436.png"></p>
<h3> 2.监控rabbitmq</h3>
<h4> 2.1 安装方式</h4>
<p>rabbitmq_exporter二进制安装</p>
<div class="lake-content">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">rabbit_exporter下载地址: https://github.com/kbudde/rabbitmq_exporter/releases
系统服务:
cat > /etc/systemd/system/rabbitmq_exporter.service </span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)"><"EOF</span><span style="color: rgba(255, 0, 0, 1)">"
Description</span><span style="color: rgba(0, 0, 255, 1)">=prometheus </span><span style="color: rgba(255, 0, 0, 1)">rabbitmq exporter
After</span><span style="color: rgba(0, 0, 255, 1)">=network.target
</span><span style="color: rgba(255, 0, 0, 1)">
Environment</span><span style="color: rgba(0, 0, 255, 1)">=RABBIT_USER=guest
</span><span style="color: rgba(255, 0, 0, 1)">Environment</span><span style="color: rgba(0, 0, 255, 1)">=RABBIT_PASSWORD=guest
</span><span style="color: rgba(255, 0, 0, 1)">Environment</span><span style="color: rgba(0, 0, 255, 1)">=RABBIT_URL=http://localhost:15672
</span><span style="color: rgba(255, 0, 0, 1)">OUTPUT_FORMAT</span><span style="color: rgba(0, 0, 255, 1)">=JSON
</span><span style="color: rgba(255, 0, 0, 1)">Type</span><span style="color: rgba(0, 0, 255, 1)">=simple
</span><span style="color: rgba(255, 0, 0, 1)">User</span><span style="color: rgba(0, 0, 255, 1)">=prometheus
</span><span style="color: rgba(255, 0, 0, 1)">Group</span><span style="color: rgba(0, 0, 255, 1)">=prometheus
</span><span style="color: rgba(255, 0, 0, 1)">Restart</span><span style="color: rgba(0, 0, 255, 1)">=always
</span><span style="color: rgba(255, 0, 0, 1)">ExecStart</span><span style="color: rgba(0, 0, 255, 1)">=/opt/prometheus/rabbitmq_exporter/rabbitmq_exporter
</span><span style="color: rgba(255, 0, 0, 1)">
WantedBy</span><span style="color: rgba(0, 0, 255, 1)">=multi-user.target
</span><span style="color: rgba(255, 0, 0, 1)">EOF</span></pre>
</div>
</div>
<p>docker-compose安装rabbitmq</p>
<div class="cnblogs_code">
<pre>cd /data/<span style="color: rgba(0, 0, 0, 1)">rabbitmq
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> >>docker-compose.yaml<<<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
rabbitmq:
image: rabbitmq:</span><span style="color: rgba(128, 0, 128, 1)">3.7</span>.<span style="color: rgba(128, 0, 128, 1)">15</span>-<span style="color: rgba(0, 0, 0, 1)">management
container_name: rabbitmq
restart: always
volumes:
</span>- /data/rabbitmq/data:/var/lib/<span style="color: rgba(0, 0, 0, 1)">rabbitmq
</span>- /data/rabbitmq/log:/var/log/<span style="color: rgba(0, 0, 0, 1)">rabbitmq
ports:
</span>- <span style="color: rgba(128, 0, 128, 1)">5672</span>:<span style="color: rgba(128, 0, 128, 1)">5672</span>
- <span style="color: rgba(128, 0, 128, 1)">15672</span>:<span style="color: rgba(128, 0, 128, 1)">15672</span><span style="color: rgba(0, 0, 0, 1)">
EOF
# 启动
docker</span>-compose up -d</pre>
</div>
<h4>2.2 安装 rabbitmq_exporter方式</h4>
<p>docker安装rabbitmq_exporter</p>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># docker直接安装
docker run -d --restart=always -p 9419:9419--name rabbitmq_exporter -e RABBIT_URL=http://192.168.10.100:15672 -e RABBIT_USER=guest -e RABBIT_PASSWORD=guest kbudde/rabbitmq-exporter
# docker-compose安装
cat >docker-compose.yaml </span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)"><EOF
</span><span style="color: rgba(255, 0, 0, 1)">version: '3.3'
services:
rabbitmq_exporter:
image: kbudde/rabbitmq-exporter
container_name: rabbitmq_exporter
restart: always
environment:
RABBIT_URL: "http://192.168.10.100:15672"
RABBIT_USER: "guest"
RABBIT_PASSWORD: "guest"
PUBLISH_PORT: "9419"
OUTPUT_FORMAT: "JSON"
ports:
- "9419:9419"
EOF
# 启动
docker-compose up -d<br><br># 参数解释</span></pre>
</div>
<div class="lake-content">
<table class="ne-table" style="height: 283px; width: 764px" align="left">
<tbody>
<tr>
<td width="250">
<p id="u94df1243" class="ne-p"><span class="ne-text">Environment variable</span></p>
</td>
<td width="250">
<p id="u2b92ac84" class="ne-p"><span class="ne-text">default</span></p>
</td>
<td width="250">
<p id="u894ea34d" class="ne-p"><span class="ne-text">description</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ua5ef808a" class="ne-p"><span class="ne-text">RABBIT_URL</span></p>
</td>
<td width="250">
<p id="u7b759306" class="ne-p"><span class="ne-text">http://127.0.0.1:15672</span></p>
</td>
<td width="250">
<p id="ud3497486" class="ne-p"><span class="ne-text">rabbitMQ管理插件的url(必须以http(s)://开头)</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ufa92b247" class="ne-p"><span class="ne-text">RABBIT_USER</span></p>
</td>
<td width="250">
<p id="u96ac0100" class="ne-p"><span class="ne-text">guest</span></p>
</td>
<td width="250">
<p id="uf50a87a3" class="ne-p"><span class="ne-text">rabbitMQ 管理插件的用户名。</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ubbcc4b72" class="ne-p"><span class="ne-text">RABBIT_PASSWORD</span></p>
</td>
<td width="250">
<p id="u39390404" class="ne-p"><span class="ne-text">guest</span></p>
</td>
<td width="250">
<p id="u5aaf9541" class="ne-p"><span class="ne-text">rabbitMQ 管理插件的密码。</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ue800805d" class="ne-p"><span class="ne-text">OUTPUT_FORMAT</span></p>
</td>
<td width="250">
<p id="u7bde0ca1" class="ne-p"><span class="ne-text">JSON</span></p>
</td>
<td width="250">
<p id="u57dc6997" class="ne-p"><span class="ne-text">输出格式</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ub4c1a9b3" class="ne-p"><span class="ne-text">PUBLISH_PORT</span></p>
</td>
<td width="250">
<p id="u957a2161" class="ne-p"><span class="ne-text">9419</span></p>
</td>
<td width="250">
<p id="ue3f6e729" class="ne-p"><span class="ne-text">运行端口(监听端口)</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>metrics地址:http://192.168.10.100:9419/metrics</p>
<h4>2.3 Prometheus配置</h4>
<div class="lake-content">
<p id="u38cff4a5" class="ne-p"><span class="ne-text">配置prometheus去采集(拉取)rabbitmq_exporter的监控样本数据</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd /data/docker-prometheus
#在scrape_configs(搜刮配置):下面增加如下配置:
cat >> prometheus/prometheus.yml </span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">< "EOF</span><span style="color: rgba(255, 0, 0, 1)">"
- job_name: 'rabbitmq_exporter'
static_configs:
- targets: ['192.168.10.100:9419']
labels:
instance: test服务器
EOF
# 重新加载配置
curl -X POST http://localhost:9090/-/reload</span></pre>
</div>
<p><img src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424183247882-359276597.png"></p>
<h4> 2.4 常用监控指标</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">rabbitmq_queue_messages_unacknowledged_global 队列中有未确认的消息总数(未被消费的消息)
rabbitmq_node_disk_free_limit使用磁盘大小
rabbitmq_node_disk_free 磁盘总大小
rabbitmq_node_mem_used 使用内存大小
rabbitmq_node_mem_limit 内存总大小
rabbitmq_sockets_used 使用sockets的数量
rabbitmq_sockets_available 可用的sockets总数
rabbitmq_fd_used 使用文件描述符的数量
rabbitmq_fd_available 可用的文件描述符总数</span></pre>
</div>
<h4>2.5 rabbitmq触发器告警规则</h4>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_4c5c46e6-9406-44f0-9c9f-7a5ffb432c3d" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_4c5c46e6-9406-44f0-9c9f-7a5ffb432c3d" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> > prometheus/rules/rabbitmq.yml <<<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">groups</span><span style="color: rgba(0, 0, 0, 1)">:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: Rabbitmq
rules:
</span>-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQDown
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_up != <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
labels:
severity: High
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Rabbitmq Down,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Rabbitmq_exporter连不上RabbitMQ! ! !</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQ有未确认消息
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_queue_messages_unacknowledged_global> <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 1m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ有未确认消息,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ未确认消息>0,当前值为:{{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">'</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQ可用磁盘空间不足告警
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_node_disk_free_alarm != <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
#</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_node_disk_free_limit / rabbitmq_node_disk_free *<span style="color: rgba(128, 0, 128, 1)">100</span> > <span style="color: rgba(128, 0, 128, 1)">90</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ可用磁盘空间不足,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ可用磁盘空间不足,请检查</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQ可用内存不足告警
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_node_mem_alarm != <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
#</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_node_mem_used / rabbitmq_node_mem_limit * <span style="color: rgba(128, 0, 128, 1)">100</span> > <span style="color: rgba(128, 0, 128, 1)">90</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ可用内存不足,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ可用内存不足,请检查</span><span style="color: rgba(128, 0, 0, 1)">"</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQ_socket连接数使用过高告警
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_sockets_used / rabbitmq_sockets_available * <span style="color: rgba(128, 0, 128, 1)">100</span> > <span style="color: rgba(128, 0, 128, 1)">60</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ_socket连接数使用过高,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ_sockets使用>60%,当前值为:{{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">'</span>
-<span style="color: rgba(0, 0, 0, 1)"> alert: RabbitMQ文件描述符使用过高告警
</span><span style="color: rgba(0, 0, 255, 1)">expr</span>: rabbitmq_fd_used / rabbitmq_fd_available * <span style="color: rgba(128, 0, 128, 1)">100</span> > <span style="color: rgba(128, 0, 128, 1)">60</span>
<span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">: 0m
labels:
severity: critical
annotations:
summary: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ文件描述符使用过高,实例:{{ $labels.instance }}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
description: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RabbitMQ文件描述符使用>60%,当前值为:{{ $value }}</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
EOF</span></pre>
</div>
<span class="cnblogs_code_collapse">rabbitmq报警规则</span></div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 检查配置
docker exec </span>-it prometheus promtool check config /etc/prometheus/<span style="color: rgba(0, 0, 0, 1)">prometheus.yml
#重新加载配置
curl </span>-X POST http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:9090/-/reload</span>
<span style="color: rgba(0, 0, 0, 1)">
# 查看
http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.14:9090/rules</span>
http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.14:9090/alerts?search=</span></pre>
</div>
<h4>2.6 grafana dashboard展示</h4>
<div class="lake-content">
<p id="uc68e6d20" class="ne-p"><span class="ne-text">grafana展示prometheus从rabbitmq_exporter收集到的的数据</span></p>
<p class="ne-p"><span class="ne-text">id:4279</span></p>
</div>
</div>
<p><img alt="" loading="lazy" src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424184339903-1584281263.png"></p>
<h3> 3.监控mongodb</h3>
<p>安装方式自己定</p>
<h4>3.1 docker-compose安装mongo</h4>
<div class="cnblogs_code">
<pre>cd /data/<span style="color: rgba(0, 0, 0, 1)">mongodb
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> >>docker-compose.yaml<<<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
mongo:
image: mongo:</span><span style="color: rgba(128, 0, 128, 1)">4.2</span>.<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">
container_name: mongo
restart: always
volumes:
</span>- /data/mongo/db:/data/<span style="color: rgba(0, 0, 0, 1)">db
ports:
</span>- <span style="color: rgba(128, 0, 128, 1)">27017</span>:<span style="color: rgba(128, 0, 128, 1)">27017</span><span style="color: rgba(0, 0, 0, 1)">
command: [</span>--<span style="color: rgba(0, 0, 0, 1)">auth]
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: </span><span style="color: rgba(128, 0, 128, 1)">123456</span><span style="color: rgba(0, 0, 0, 1)">
EOF
docker</span>-compose up -d</pre>
</div>
<h4>3.2 监控mongodb</h4>
<h5>3.2.1 创建监控用户</h5>
<div class="lake-content">
<p id="u3e529c76" class="ne-p"><span class="ne-text">登陆mongodb创建监控用户,权限为“readAnyDatabase”,如果是cluster环境,需要有权限“clusterMonitor”</span></p>
<p class="ne-p"><span class="ne-text">docker exec -it mongo mongo admin</span></p>
<p class="ne-p"><span class="ne-text">创建监控用户</span></p>
<div class="cnblogs_code">
<pre>> db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">1</span>
> db.createUser({ user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">exporter</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(0, 0, 255, 1)">pwd</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">password</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[ { role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">readAnyDatabase</span><span style="color: rgba(128, 0, 0, 1)">'</span>, db: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">'</span>},{ role: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">clusterMonitor</span><span style="color: rgba(128, 0, 0, 1)">"</span>, db: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> }]});
#测试 使用上面创建的用户信息进行连接。
</span>> db.auth(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">exporter</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">password</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
#表示成功
</span>> exit</pre>
</div>
<h5>3.2.2 安装mongodb_exporter</h5>
<h6>3.2.2.1 mongodb_exporter安装方式自选</h6>
<p>二进制安装:</p>
<div class="lake-content">
<p id="u6e74bb52" class="ne-p"><span class="ne-text">mongodb_exporter地址:<span class="ne-text">https://github.com/percona/mongodb_exporter/releases</span></span></p>
<p id="u475e9a8f" class="ne-p"><span class="ne-text">或:<span class="ne-text">https://github.com/prometheus/mysqld_exporter/releases</span></span></p>
<p class="ne-p"><span class="ne-text"><span class="ne-text">systemd服务</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> <<EOF >/usr/lib/systemd/system/<span style="color: rgba(0, 0, 0, 1)">mongodb_exporter.service
Description</span>=<span style="color: rgba(0, 0, 0, 1)">mongodb_exporter
Documentation</span>=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/percona/mongodb_exporter</span>
After=<span style="color: rgba(0, 0, 0, 1)">network.target
Type</span>=<span style="color: rgba(0, 0, 0, 1)">simple
User</span>=<span style="color: rgba(0, 0, 0, 1)">prometheus
Environment</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">MONGODB_URI=mongodb://exporter:password@localhost:27017/admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
ExecStart</span>=/opt/prometheus/mongodb_exporter/mongodb_exporter --log.level=error --collect-all --compatible-<span style="color: rgba(0, 0, 0, 1)">mode
Restart</span>=on-<span style="color: rgba(0, 0, 0, 1)">failure
WantedBy</span>=multi-<span style="color: rgba(0, 0, 0, 1)">user.target
EOF</span></pre>
</div>
<p>docker 安装方式:</p>
<div class="cnblogs_code">
<pre>docker run -d --restart=always -p <span style="color: rgba(128, 0, 128, 1)">9216</span>:<span style="color: rgba(128, 0, 128, 1)">9216</span> -p <span style="color: rgba(128, 0, 128, 1)">17001</span>:<span style="color: rgba(128, 0, 128, 1)">17001</span> --restart=always --name=mongodb-exporterbitnami/mongodb-exporter:latest --collect-all --compatible-mode --mongodb.uri=mongodb:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">exporter:password@192.168.10.100:27017/admin?ssl=false</span></pre>
</div>
<p>docker-compose安装方式</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> >docker-compose.yaml <<<span style="color: rgba(0, 0, 0, 1)">EOF
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3.3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
mongodb_exporter:
image: bitnami</span>/mongodb-<span style="color: rgba(0, 0, 0, 1)">exporter:latest
container_name: mongodb_exporter
restart: always
environment:
MONGODB_URI: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodb://exporter:password@192.168.11.62:27017/admin?ssl=false</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
command:
</span>- <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">--collect-all</span><span style="color: rgba(128, 0, 0, 1)">'</span>
- <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">--compatible-mode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9216:9216</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
EOF</span></pre>
</div>
<p>参数解释</p>
<div class="lake-content">
<table id="c1ed3f8c" class="ne-table">
<tbody>
<tr>
<td width="250">
<p id="ud76edc28" class="ne-p"><span class="ne-text">Flag</span></p>
</td>
<td width="250">
<p id="u33c9aabc" class="ne-p"><span class="ne-text">含义</span></p>
</td>
<td width="250">
<p id="u45f71625" class="ne-p"><span class="ne-text">案例</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u37990fa4" class="ne-p"><span class="ne-text">-h, --help</span></p>
</td>
<td width="250">
<p id="u75e57b83" class="ne-p"><span class="ne-text">显示上下文相关的帮助</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u8472dbde" class="ne-p"><span class="ne-text">--compatible-mode</span></p>
</td>
<td width="250">
<p id="u08ad6772" class="ne-p"><span class="ne-text">启用旧的 mongodb-exporter 兼容指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="ufd56c7c6" class="ne-p"><span class="ne-text">--discovering-mode</span></p>
</td>
<td width="250">
<p id="u5482d844" class="ne-p"><span class="ne-text">启用自动发现集合</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u33bebe90" class="ne-p"><span class="ne-text">--mongodb.collstats-colls</span></p>
</td>
<td width="250">
<p id="u57374093" class="ne-p"><span class="ne-text">逗号分隔的 databases.collections 列表以获取 $collStats</span></p>
</td>
<td width="250">
<p id="ud56d7bdb" class="ne-p"><span class="ne-text">--mongodb.collstats-colls=db1,db2.col2</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u6fcf3f7e" class="ne-p"><span class="ne-text">--mongodb.indexstats-colls</span></p>
</td>
<td width="250">
<p id="ud754b8d7" class="ne-p"><span class="ne-text">逗号分隔的 databases.collections 列表以获取 $indexStats</span></p>
</td>
<td width="250">
<p id="uaaf74815" class="ne-p"><span class="ne-text">--mongodb.indexstats-colls=db1.col1,db2.col2</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u2bfd72af" class="ne-p"><span class="ne-text">--mongodb.direct-connect</span></p>
</td>
<td width="250">
<p id="ub93adff6" class="ne-p"><span class="ne-text">是否应该进行直接连接。如果指定了多个主机或使用了 SRV URI,则直接连接无效</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u661ba4a7" class="ne-p"><span class="ne-text">--mongodb.global-conn-pool</span></p>
</td>
<td width="250">
<p id="udd9dd506" class="ne-p"><span class="ne-text">使用全局连接池而不是为每个 http 请求创建新池</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u5f80f8bc" class="ne-p"><span class="ne-text">--mongodb.uri</span></p>
</td>
<td width="250">
<p id="u6679fedd" class="ne-p"><span class="ne-text">MongoDB 连接 URI ($MONGODB_URI)</span></p>
</td>
<td width="250">
<p id="ue1d29a39" class="ne-p"><span class="ne-text">--mongodb.uri=mongodb://user:pass@127.0.0.1:27017/admin?ssl=true</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="uad8aecb8" class="ne-p"><span class="ne-text">--web.listen-address</span></p>
</td>
<td width="250">
<p id="ude03887c" class="ne-p"><span class="ne-text">用于侦听 Web 界面和遥测的地址</span></p>
</td>
<td width="250">
<p id="u2a5371b9" class="ne-p"><span class="ne-text">--web.listen-address=":9216"</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u0c1f9cdf" class="ne-p"><span class="ne-text">--web.telemetry-path</span></p>
</td>
<td width="250">
<p id="ub8ac83e9" class="ne-p"><span class="ne-text">指标公开路径</span></p>
</td>
<td width="250">
<p id="u437400c2" class="ne-p"><span class="ne-text">--web.telemetry-path="/metrics"</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="ucc3dfcb0" class="ne-p"><span class="ne-text">--web.config</span></p>
</td>
<td width="250">
<p id="u94e78949" class="ne-p"><span class="ne-text">具有用于基本身份验证的 Prometheus TLS 配置的文件的路径</span></p>
</td>
<td width="250">
<p id="u00fcf803" class="ne-p"><span class="ne-text">--web.config=STRING</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="uf179e1a0" class="ne-p"><span class="ne-text">--log.level</span></p>
</td>
<td width="250">
<p id="ua8fdc41f" class="ne-p"><span class="ne-text">仅记录具有给定严重性或更高严重性的消息。有效级别:[调试、信息、警告、错误、致命]</span></p>
</td>
<td width="250">
<p id="u9dedb992" class="ne-p"><span class="ne-text">--log.level="error"</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u50aa622b" class="ne-p"><span class="ne-text">--collector.diagnosticdata</span></p>
</td>
<td width="250">
<p id="uc3708339" class="ne-p"><span class="ne-text">启用从 getDiagnosticData 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="ua1313bd7" class="ne-p"><span class="ne-text">--collector.replicasetstatus</span></p>
</td>
<td width="250">
<p id="u2af335cc" class="ne-p"><span class="ne-text">启用从 replSetGetStatus 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u3e482b50" class="ne-p"><span class="ne-text">--collector.dbstats</span></p>
</td>
<td width="250">
<p id="u5c1b1767" class="ne-p"><span class="ne-text">启用从 dbStats 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u40801195" class="ne-p"><span class="ne-text">--collector.topmetrics</span></p>
</td>
<td width="250">
<p id="u331fcff2" class="ne-p"><span class="ne-text">启用从 top admin command 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="ufd9cbec4" class="ne-p"><span class="ne-text">--collector.indexstats</span></p>
</td>
<td width="250">
<p id="u710557e8" class="ne-p"><span class="ne-text">启用从 $indexStats 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u701a08ef" class="ne-p"><span class="ne-text">--collector.collstats</span></p>
</td>
<td width="250">
<p id="u9cbd519d" class="ne-p"><span class="ne-text">启用从 $collStats 收集指标</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u151eb5e5" class="ne-p"><span class="ne-text">--collect-all</span></p>
</td>
<td width="250">
<p id="uebd8934d" class="ne-p"><span class="ne-text">启用所有收集器。与指定所有 --collector. 相同</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="u2ee00f40" class="ne-p"><span class="ne-text">--collector.collstats-limit=0</span></p>
</td>
<td width="250">
<p id="u3f97788e" class="ne-p"><span class="ne-text">如果有超过 个集合,请禁用 collstats、dbstats、topmetrics 和 indexstats 收集器。0=无限制</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="ud4cfa8be" class="ne-p"><span class="ne-text">--metrics.overridedescendingindex</span></p>
</td>
<td width="250">
<p id="u37dc0ccb" class="ne-p"><span class="ne-text">启用降序索引名称覆盖以将 -1 替换为 _DESC</span></p>
</td>
<td width="250"> </td>
</tr>
<tr>
<td width="250">
<p id="ucf0719fa" class="ne-p"><span class="ne-text">--version</span></p>
</td>
<td width="250">
<p id="u2f1df220" class="ne-p"><span class="ne-text">显示版本并退出</span></p>
</td>
<td width="250"> </td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>metrics地址:http://192.168.10.100:9216/metrics</p>
<h4>3.3 Prometheus配置</h4>
<div class="lake-content">
<p id="u9b23f784" class="ne-p"><span class="ne-text">配置prometheus去采集(拉取)mongodb_exporter的监控样本数据</span></p>
<div class="cnblogs_code">
<pre>cd /data/docker-<span style="color: rgba(0, 0, 0, 1)">prometheus
#在scrape_configs(搜刮配置):下面增加如下配置:
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> >> prometheus/prometheus.yml << <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EOF</span><span style="color: rgba(128, 0, 0, 1)">"</span>
- job_name: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mongodb_exporter</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
static_configs:
</span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">192.168.10.100:9216</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
labels:
instance: test服务器
EOF</span></pre>
</div>
<p>检查:</p>
<p><img src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424185859877-1667283778.png"></p>
<h4> 3.4 常用的监控指标</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mongodb_ss_connections{conn_type="available"} 可用的连接总数
mongodb_ss_mem_virtual
mongodb_ss_mem_resident
# 关于 server status
mongodb_up # 服务器是否在线
mongodb_ss_ok{cl_id="", cl_role="mongod", rs_state="0"} # 服务器是否正常运行,取值为 1、0 。标签中记录了 Cluster、ReplicaSet 的信息
mongodb_ss_uptime # 服务器的运行时长,单位为秒
mongodb_ss_connections{conn_type="current"} # 客户端连接数
# 关于主机
mongodb_sys_cpu_num_cpus # 主机的 CPU 核数
# 关于 collection
mongodb_collstats_storageStats_count{database="xx", collection="xx"}# collection 全部文档的数量
mongodb_collstats_storageStats_size # collection 全部文档的体积,单位 bytes
mongodb_collstats_storageStats_storageSize # collection 全部文档占用的磁盘空间,默认会压缩
delta(mongodb_collstats_latencyStats_reads_ops) # collection 读操作的数量(每分钟)
delta(mongodb_collstats_latencyStats_reads_latency) # collection 读操作的延迟(每分钟),单位为微秒
mongodb_collstats_latencyStats_write_ops
mongodb_collstats_latencyStats_write_latency
# 关于 index
mongodb_collstats_storageStats_nindexes # collection 的 index 数量
mongodb_collstats_storageStats_totalIndexSize # collection 的 index 占用的磁盘空间
delta(mongodb_indexstats_accesses_ops) # index 被访问次数
# 关于操作
delta(mongodb_ss_opcounters) # 执行各种操作的数量
delta(mongodb_ss_opLatencies_latency) # 执行各种操作的延迟,单位为微秒
delta(mongodb_ss_metrics_document) # 各种文档的变化数量
# 关于锁
delta(mongodb_ss_locks_acquireCount{lock_mode="w"}) # 新加锁的数量。R 表示共享锁,W 表示独占锁,r 表示意向共享锁,w 表示意向独占锁
mongodb_ss_globalLock_currentQueue{count_type="total"}# 被锁阻塞的操作数</span></pre>
</div>
<h4>3.5 mongodb触发器告警规则配置</h4>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_a914b98a-da35-4336-bdcd-f4d4b5fb5d99" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_a914b98a-da35-4336-bdcd-f4d4b5fb5d99" class="cnblogs_code_hide">
<pre>cat >> prometheus/rules/mongodb.yml <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)"><"EOF</span><span style="color: rgba(255, 0, 0, 1)">"
groups:
- name: PerconaMongodbExporter
rules:
- alert: MongodbDown
expr: 'mongodb_up </span><span style="color: rgba(0, 0, 255, 1)">== </span><span style="color: rgba(255, 0, 0, 1)">0'
for: 0m
labels:
severity: critical
annotations:
summary: "MongoDB Down 容器: $labels.instance"
description: "MongoDB 容器 is down, 当前值:{{ $value }}"
- alert: MongodbNumberCursorsOpen
expr: 'mongodb_ss_metrics_cursor_open{csr_type</span><span style="color: rgba(0, 0, 255, 1)">="total"</span><span style="color: rgba(255, 0, 0, 1)">} </span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)"> 10 * 1000'
for: 2m
labels:
severity: warning
annotations:
summary: "MongoDB 数字有标打开告警 容器: $labels.instance"
description: "MongoDB 为客户端打开的游标过多 > 10k, 当前值:{{ $value }}"
- alert: MongodbCursorsTimeouts
expr: 'increase(mongodb_ss_metrics_cursor_timedOut) > 100'
for: 2m
labels:
severity: warning
annotations:
summary: "MongoDB 游标超时 容器: $labels.instance"
description: "太多游标超时, 当前值:{{ $value }}"
- alert: MongodbTooManyConnections
expr: 'avg by(instance) (rate(mongodb_ss_connections{conn_type="current"})) / avg by(instance) (sum (mongodb_ss_connections) by (instance)) * 100 > 80'
for: 2m
labels:
severity: warning
annotations:
summary: "MongoDB 太多连接 容器: $labels.instance"
description: "MongoDB 连接数 > 80%, 当前值:{{ $value }}"
- alert: MongodbVirtualMemoryUsage
expr: '(sum(mongodb_ss_mem_virtual) BY (instance) / sum(mongodb_ss_mem_resident) BY (instance)) > 3'
for: 2m
labels:
severity: warning
annotations:
summary: "MongoDB虚拟内存使用告警 容器: $labels.instance"
description: "虚拟内存使用过高, 当前值:{{ $value }}"
EOF</span></pre>
</div>
<span class="cnblogs_code_collapse">mongodb告警规则</span></div>
<p>检查并重新加载配置</p>
<div class="cnblogs_code">
<pre>docker exec -it prometheus promtool check config /etc/prometheus/<span style="color: rgba(0, 0, 0, 1)">prometheus.yml
curl </span>-X POST http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:9090/-/reload</span></pre>
</div>
<p>页面检查:</p>
<p>http://192.168.10.14:9090/alerts?search=</p>
<p>http://192.168.10.14:9090/rules</p>
<h4>3.6 grafana dashboard展示</h4>
<div class="lake-content">
<p id="u42094cf1" class="ne-p"><span class="ne-text">grafana展示prometheus从mongodb_exporter收集到的的数据</span></p>
<p class="ne-p"><span class="ne-text">https://github.com/percona/grafana-dashboards/tree/main/dashboards/MongoDB</span></p>
<p><img alt="" loading="lazy" src="https://img2024.cnblogs.com/blog/1523753/202404/1523753-20240424190421388-1820930961.png"></p>
<p> </p>
</div>
<p> </p>
<p> </p>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/yangmeichong/p/18156069
頁:
[1]