监控和指标指南
SMPP网关监控的完整参考
概述
SMPP网关以Prometheus格式公开指标,用于监控连接健康、消息吞吐量和系统性能。
关键:由于网关是无状态的,并依赖于OmniMessage Core,OmniMessage连接性是最重要的监控指标。请监控以下两项:
- SMPP网关指标 - 协议级健康
- OmniMessage API指标 - 后端连接性和健康
指标端点
URL:http://your-server:4000/metrics
格式:Prometheus文本格式
访问:默认对localhost开放(配置防火墙以进行远程访问)
快速测试
curl http://localhost:4000/metrics
可用指标
所有指标都以smpp_为前缀,并包含用于识别的标签。
许可证指标
omnimessage_smpp_license_status
类型:Gauge
描述:当前许可证状态
值:
1= 有效许可证0= 无效/过期许可证
标签:无
示例:
omnimessage_smpp_license_status 1
用途:
- 当值为0时发出警报(无效许可���)
- 当许可证无效时,出站队列处理停止,但SMPP绑定保持连接
- Web UI仍然可访问以进行故障排除
产品名称:omnimessage_smpp
备注:
- 当许可证无效(
license_status == 0)时,网关停止处理出站队列 - SMPP绑定(客户端和服务器)保持连接并接受绑定请求
- 入站消息仍然被接收但不被处理
- 无论许可证状态如何,UI和监控仍然可访问
警报示例:
- alert: SMPP_License_Invalid
expr: omnimessage_smpp_license_status == 0
for: 1m
labels:
severity: critical
annotations:
summary: "SMPP网关许可证无效或过期"
description: "许可证状态无效 - 出站消息处理被阻止"
连接状态指标
smpp_connection_status
类型:Gauge
描述:SMPP绑定的当前连接状态
值:
1= 已连接0= 已断开
标签:
bind_name- 连接名称(例如,“vodafone_uk”)mode- 连接类型(“client”或“server”)host- 远程主机(仅客户端模式)port- 远程端口(仅客户端模式)bind_type- SMPP绑定类型(仅客户端模式)system_id- 使用的系统ID
示例:
smpp_connection_status{bind_name="vodafone_uk",mode="client",host="smpp.vodafone.co.uk",port="2775",bind_type="transceiver",system_id="user1"} 1
用途:
- 当值为0时发出警报(已断开)
- 跟踪连接正常运行时间百分比
- 监控重新连接频率
消息计数器
smpp_messages_sent_total
类型:Counter
描述:通过SMPP绑定发送的消息总数
单位:消息
标签:与connection_status相同
示例:
smpp_messages_sent_total{bind_name="vodafone_uk",mode="client",...} 150234
用途:
- 计算消息速率(消息/秒)
- 跟踪每日/月度量
- 比较实际与预期吞吐量
smpp_messages_received_total
类型:Counter
描述:通过SMPP绑定接收的消息总数
单位:消息
标签:与connection_status相同
示例:
smpp_messages_received_total{bind_name="partner_acme",mode="server",...} 45123
用途:
- 监控入站消息量
- 跟踪移动发起(MO)流量
- 对意外的流量变化发出警报
投递指标
smpp_delivery_failures_total
类型:Counter
描述:消息投递失败的总数
单位:失败
标签:与connection_status相同
示例:
smpp_delivery_failures_total{bind_name="vodafone_uk",mode="client",...} 234
用途:
- 计算投递成功率
- 对高失败率发出警报
- 识别问题连接
成功率计算:
success_rate = (messages_sent - delivery_failures) / messages_sent * 100
绑定操作指标
smpp_bind_success_total
类型:Counter
描述:成功绑定操作的总数
单位:绑定尝试
示例:
smpp_bind_success_total{bind_name="vodafone_uk",...} 45
用途:
- 跟踪绑定稳定性
- 监控身份验证成功
smpp_bind_failures_total
类型:Counter
描述:绑定操作失败的总数
单位:绑定尝试
示例:
smpp_bind_failures_total{bind_name="vodafone_uk",...} 3
用途:
- 对身份验证失败发出警报
- 识别凭据问题
- 跟踪运营商连接问题
连接事件指标
smpp_connection_attempts_total
类型:Counter
描述:连接尝试的总数
单位:尝试
示例:
smpp_connection_attempts_total{bind_name="vodafone_uk",...} 48
用途:
- 跟踪连接流失
- 监控重新连接频率
smpp_disconnection_total
类型:Counter
描述:断开的总数
单位:断开
示例:
smpp_disconnection_total{bind_name="vodafone_uk",...} 3
用途:
- 对频繁断开发出警报
- 识别网络问题
- 跟踪连接稳定性
查询链指标
smpp_enquire_link_sent_total
类型:Counter
描述:发送的查询链PDU总数,用于验证连接的活跃性
单位:PDU
标签:与connection_status相同
示例:
smpp_enquire_link_sent_total{bind_name="vodafone_uk",mode="client",...} 1440
用途:
- 跟踪保持活动的活动
- 与接收的数量进行比较以检测单向故障
smpp_enquire_link_received_total
类型:Counter
描述:从远程对等方接收的查询链响应PDU总数
单位:PDU
标签:与connection_status相同
示例:
smpp_enquire_link_received_total{bind_name="vodafone_uk",mode="client",...} 1438
用途:
- 检测无响应的对等方(发送 >> 接收)
- 监控连接健康状况,超出简单状态
正常运行时间指标
smpp_uptime_seconds
类型:Gauge
描述:SMPP绑定的当前正常运行时间(以秒为单位)
单位:秒
示例:
smpp_uptime_seconds{bind_name="vodafone_uk",...} 86400
用途:
- 跟踪连接稳定性
- 计算正常运行时间百分比
- 对最近的重启发出警报
消息缓存指标
这些指标在一个或多个绑定上启用消息缓存时可用。有关缓存配置的详细信息,请参见MESSAGE_CACHE.md。
smpp_cache_size
类型:Gauge
描述:每个绑定的本地缓存中当前消息的数量
单位:消息
标签:
bind_name- 连接名称mode- 连接类型(“client”或“server”)
示例:
smpp_cache_size{bind_name="partner_acme",mode="server"} 42
用途:
- 监控缓存利用率
- 当接近
cache_max_size时发出警报
smpp_cache_delivered_total
类型:Counter
描述:成功交付到后端API的缓存消息总数
单位:消息
示例:
smpp_cache_delivered_total{bind_name="partner_acme"} 1234
smpp_cache_retry_total
类型:Counter
描述:缓存消息的重试尝试总数
单位:尝试
示例:
smpp_cache_retry_total{bind_name="partner_acme"} 56
smpp_cache_permanent_failures_total
类型:Counter
描述:超过最大重试次数并被标记为永久失败的消息总数
单位:消息
示例:
smpp_cache_permanent_failures_total{bind_name="partner_acme"} 2
用途:
- 当 > 0 时发出警报(需��手动审核)
smpp_cache_overflow_total
类型:Counter
描述:缓存溢出事件的总数,其中最旧的消息被驱逐以腾出空间
单位:事件
示例:
smpp_cache_overflow_total{bind_name="partner_acme"} 0
用途:
- 当增加时发出警报(缓存太小或API中断时间过长)
OmniMessage API健康指标
虽然网关本身公开与SMPP相关的指标,但OmniMessage API健康至关重要。您还应监控:
来自OmniMessage的指标(如果可用)
omnimessage_api_requests_total- 从网关发出的API请求总数omnimessage_api_request_duration_seconds- API响应时间omnimessage_queue_depth- OmniMessage队列中待处理的消息
来自网关日志(如果未公开指标)
查找这些模式以检测API问题:
- "api.*connection refused" - 无法连接到OmniMessage
- "api.*timeout" - OmniMessage未响应
- "api.*http 503" - OmniMessage暂时不可用
- "api.*parse error" - 响应格式问题
Prometheus配置
基本抓取配置
添加到/etc/prometheus/prometheus.yml:
scrape_configs:
- job_name: 'omnimessage-smpp'
scrape_interval: 15s
static_configs:
- targets: ['your-server:4000']
labels:
environment: 'production'
service: 'omnimessage-smpp'
多个网关
scrape_configs:
- job_name: 'omnimessage-smpp-instances'
scrape_interval: 15s
static_configs:
- targets:
- 'smpp-gw-1:4000'
- 'smpp-gw-2:4000'
- 'smpp-gw-3:4000'
labels:
environment: 'production'
服务发现
使用基于文件的发现:
scrape_configs:
- job_name: 'omnimessage-smpp-instances'
file_sd_configs:
- files:
- '/etc/prometheus/targets/smpp-*.json'
文件/etc/prometheus/targets/smpp-production.json:
[
{
"targets": ["smpp-gw-1:4000", "smpp-gw-2:4000"],
"labels": {
"environment": "production",
"datacenter": "us-east"
}
}
]
Grafana仪表板
示例仪表板面板
连接状态面板
查询:
smpp_connection_status{job="omnimessage-smpp"}
可视化:Stat
阈值:
- 红色:值 < 1(已断开)
- 绿色:值 == 1(已连接)
消息速率面板
查询:
rate(smpp_messages_sent_total{job="omnimessage-smpp"}[5m])
可视化:Graph
单位:消息/秒
图例:{{bind_name}}
投递成功率面板
查询:
100 * (1 - (
rate(smpp_delivery_failures_total{job="omnimessage-smpp"}[5m])
/
rate(smpp_messages_sent_total{job="omnimessage-smpp"}[5m])
))
可视化:Gauge
单位:百分比(0-100)
阈值:
- 红色:< 95%
- 黄色:95-98%
- 绿色:> 98%
连接正常运行时间面板
查询:
smpp_uptime_seconds{job="omnimessage-smpp"} / 3600
可视化:Stat
单位:小时
警报规则
Prometheus警报规则
保存到/etc/prometheus/rules/smpp-alerts.yml:
groups:
- name: smpp_gateway
interval: 30s
rules:
# 连接断开
- alert: SMPPConnectionDown
expr: smpp_connection_status == 0
for: 2m
labels:
severity: critical
annotations:
summary: "SMPP连接{{ $labels.bind_name }}已断开"
description: "连接{{ $labels.bind_name }}已断开超过2分钟。"
# 高失败率
- alert: SMPPHighFailureRate
expr: |
(
rate(smpp_delivery_failures_total[5m])
/
rate(smpp_messages_sent_total[5m])
) > 0.05
for: 5m
labels:
severity: warning
annotations:
summary: "在{{ $labels.bind_name }}上高投递失败率"
description: "投递失败率在{{ $labels.bind_name }}上为{{ $value | humanizePercentage }}。"
# 绑定失败
- alert: SMPPBindFailures
expr: increase(smpp_bind_failures_total[10m]) > 3
labels:
severity: warning
annotations:
summary: "在{{ $labels.bind_name }}上多次绑定失败"
description: "{{ $labels.bind_name }}在过去10分钟内绑定失败{{ $value }}次。"
# 没有消息发送(预期时)
- alert: SMPPNoTraffic
expr: rate(smpp_messages_sent_total[10m]) == 0
for: 30m
labels:
severity: warning
annotations:
summary: "在{{ $labels.bind_name }}上没有消息发送"
description: "{{ $labels.bind_name }}在30分钟内没有发送任何消息。"
# 频繁断开
- alert: SMPPFrequentDisconnections
expr: increase(smpp_disconnection_total[1h]) > 5
labels:
severity: warning
annotations:
summary: "在{{ $labels.bind_name }}上频繁断开"
description: "{{ $labels.bind_name }}在过去一小时内断开{{ $value }}次。"
# OmniMessage API无法访问
- alert: OmniMessageAPIUnreachable
expr: |
count(count_over_time({job="omnimessage-smpp"} |= "api.*connection refused"[5m])) > 0
for: 1m
labels:
severity: critical
annotations:
summary: "OmniMessage API无法访问"
description: "SMPP网关无法访问OmniMessage API。检查API_BASE_URL配置和网络连接。"
# OmniMessage API超时
- alert: OmniMessageAPITimeout
expr: |
count(count_over_time({job="omnimessage-smpp"} |= "api.*timeout"[5m])) > 5
for: 2m
labels:
severity: warning
annotations:
summary: "OmniMessage API超时"
description: "检测到多个API超时。OmniMessage可能很慢或超载。"
# 没有消息流(API问题)
- alert: NoMessageFlow
expr: rate(smpp_messages_sent_total[10m]) == 0 and rate(smpp_messages_received_total[10m]) == 0
for: 30m
labels:
severity: warning
annotations:
summary: "未检测到消息流 - 检查OmniMessage连接性"
description: "30分钟内没有发送或接收任何消息。检查OmniMessage API连接性和队列状态。"
在prometheus.yml中加载规则:
rule_files:
- '/etc/prometheus/rules/smpp-alerts.yml'
Web仪表板监控
内置的Web UI提供实时监控,无需Prometheus。
��问
URL:https://your-server:8087
实时状态页面
导航:SMPP → 实时状态
功能:
- 实时连接状态
- 消息计数器
- 连接正常运行时间
- 手动重连/断开控制
- 每5秒自动刷新
用途:
- 快速状态检查
- 手动干预
- 实时故障排除

仪表板显示:
- 总绑定:所有客户端和服务器连接的组合计数
- 客户端绑定:到运营商的出站连接(显示连接/断开计数)
- 服务器绑定:来自合作伙伴的入站连接(显示活动/等待计数)
- 服务器监听:入站服务器套接字的配置(主机、端口、最大连接数)
日志监控
系统日志
查看日志:
# 实时跟踪日志
sudo journalctl -u omnimessage-smpp -f
# 最近100行
sudo journalctl -u omnimessage-smpp -n 100
# 从特定时间开始
sudo journalctl -u omnimessage-smpp --since "1 hour ago"
# 按级别过滤
sudo journalctl -u omnimessage-smpp -p err
Web UI日志
导航:Web UI中的日志选项卡
功能:
- 实时日志流
- 按级别过滤(调试、信息、警告、错误)
- 搜索日志
- 暂停/恢复
- 清除日志

日志视图允许您:
- 级别过滤:选择日志级别(所有、调试、信息、警告、错误)
- 搜索:通过文本内容查找特定日志条目
- 自动滚动:启用/禁用新日志到达时的自动滚动
- 暂停/恢复:暂停日志更新以查看特定条目
- 清除:清除所有显示的日志
关键绩效指标(KPI)
连接健康
指标:连接正常运行时间百分比
avg_over_time(smpp_connection_status[24h]) * 100
目标:> 99.9%
消息投递率
指标:每秒投递的消息
rate(smpp_messages_sent_total[5m])
目标:匹配预期量
投递成功率
指标:成功投递的百分比
100 * (1 - rate(smpp_delivery_failures_total[5m]) / rate(smpp_messages_sent_total[5m]))
目标:> 98%
绑定稳定性
指标:每小时绑定尝试
rate(smpp_bind_success_total[1h]) * 3600
目标:< 10每小时(表示连接稳定)
监控最佳实践
1. 设置警报
- 为关键指标配置Prometheus警报
- 使用PagerDuty/OpsGenie进行24/7警报
- 定期测试警报
2. 创建仪表板
- 为每个网关构建Grafana仪表板
- 在一个仪表板上包含所有连接
- 添加容量规划面板
3. 定期审查
- 每周审查指标
- 识别趋势和模式
- 计划容量调整
4. 记录基线
- 记录正常的消息量
- 记录预期的TPS速率
- 注意高峰时间/天
5. 与后端关联
- 监控后端API指标
- 跟踪端到端消息流
- 识别瓶颈
使用指标进行故障排除
连接问题
检查:smpp_connection_status
- 值为0 = 审查日志,检查网络,验证凭据
- 频繁变化 = 网络不稳定
投递率低
检查:smpp_delivery_failures_total
- 高速率 = 检查运营商状态,审查消息格式
- 在连接之间进行比较 = 识别问题运营商
吞吐量低
检查:smpp_messages_sent_total速率
- 低于预期 = 检查TPS限制,队列可用性
- 检查后端API指标
绑定问题
检查:smpp_bind_failures_total
- 增加 = 身份验证问题,凭据问题
- 检查配置中的system_id和密码
相关文档
- CONFIGURATION.md - 配置监控设置
- USAGE.md - 操作程序
- TROUBLESHOOTING.md - 解决问题
- README.md - 概述和快速入门