Kamailio + Prometheus 集成方案(含完整可执行配置)

Kamailio + Prometheus 集成方案(含完整可执行配置)

Kamailio 与 Prometheus 集成的核心是通过 kamailio-exporter 组件采集指标(如呼叫成功率、并发呼叫数、队列长度等),再由 Prometheus 存储、Grafana 可视化。以下是 一步到位的部署脚本、配置文件和验证步骤,直接复制即可落地。

一、环境准备(依赖安装)

1. 通用依赖(所有 Linux 系统)

bash 复制代码
# 更新系统并安装基础工具
sudo apt update && sudo apt install -y wget curl gcc git make libcurl4-openssl-dev libconfig-dev
# 若为 CentOS/RHEL
# sudo yum install -y epel-release && sudo yum install -y wget curl gcc git make libcurl-devel libconfig-devel

2. 安装 Go 语言(exporter 编译依赖)

bash 复制代码
# 下载 Go 1.21(适配大部分系统)
wget https://dl.google.com/go/go1.21.6.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
# 配置环境变量(永久生效)
echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile
source /etc/profile
# 验证:go version 应输出 1.21.6
go version

二、安装 kamailio-exporter(指标采集核心)

1. 编译安装 exporter

bash 复制代码
# 克隆源码(官方推荐版本)
git clone https://github.com/levenlabs/kamailio-exporter.git
cd kamailio-exporter
# 编译生成可执行文件
go build -o kamailio-exporter main.go
# 移动到系统路径(全局可执行)
sudo mv kamailio-exporter /usr/local/bin/
# 验证:kamailio-exporter --help 应显示帮助信息
kamailio-exporter --help

2. 创建系统服务(开机自启)

bash 复制代码
# 创建服务文件
sudo tee /etc/systemd/system/kamailio-exporter.service << EOF
[Unit]
Description=Kamailio Exporter for Prometheus
After=network.target kamailio.service

[Service]
User=root
ExecStart=/usr/local/bin/kamailio-exporter \
  --kamailio.stats-url http://127.0.0.1:8080/stats \  # Kamailio 统计接口地址
  --web.listen-address :9201  # Exporter 监听端口(Prometheus 抓取用)
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start kamailio-exporter
sudo systemctl enable kamailio-exporter
# 验证状态:active (running) 为正常
sudo systemctl status kamailio-exporter

三、配置 Kamailio 开启统计接口

需在 Kamailio 配置中启用 HTTP 统计模块,让 exporter 能获取指标。

1. 修改 Kamailio 主配置(kamailio.cfg)

bash 复制代码
# 编辑配置文件(路径可能为 /etc/kamailio/kamailio.cfg)
sudo nano /etc/kamailio/kamailio.cfg

2. 添加/启用以下配置(直接复制到配置文件顶部或对应模块区)

cfg 复制代码
# 1. 加载 HTTP 模块和统计模块
loadmodule "httpd.so"
loadmodule "statsd.so"

# 2. 配置 HTTP 统计接口(exporter 抓取的地址)
modparam("httpd", "listen", "127.0.0.1:8080")  # 仅本地访问,安全
modparam("httpd", "root", "/var/www/kamailio")
modparam("httpd", "htdocs", "/var/www/kamailio")

# 3. 启用统计指标(核心:暴露呼叫、队列、网络等指标)
modparam("statsd", "statsd_host", "127.0.0.1")
modparam("statsd", "statsd_port", 8125)
modparam("statsd", "prefix", "kamailio")
modparam("statsd", "metrics_enabled", 1)  # 开启所有指标

# 4. 允许 HTTP 访问统计接口(添加到路由配置中)
request_route {
    # ... 其他路由规则 ...
    # 匹配统计接口请求,返回指标
    if (uri == "/stats") {
        http_reply("200", "OK", "Content-Type: text/plain", "$stats_dump");
        exit;
    }
}

3. 重启 Kamailio 生效

bash 复制代码
sudo systemctl restart kamailio
# 验证 HTTP 统计接口是否可用(返回大量指标为正常)
curl http://127.0.0.1:8080/stats

四、配置 Prometheus 抓取 Kamailio 指标

1. 编辑 Prometheus 配置文件(prometheus.yml)

bash 复制代码
sudo nano /etc/prometheus/prometheus.yml

2. 添加 Kamailio 抓取任务(在 scrape_configs 下新增)

yaml 复制代码
scrape_configs:
  # ... 其他任务(如 node_exporter)...
  - job_name: 'kamailio'
    scrape_interval: 10s  # 每 10 秒抓取一次
    static_configs:
      - targets: ['127.0.0.1:9201']  # exporter 的地址(与服务配置一致)

3. 重启 Prometheus 生效

bash 复制代码
sudo systemctl restart prometheus
# 验证:访问 Prometheus UI 查看目标状态
# 浏览器打开 http://Prometheus服务器IP:9090/targets,kamailio 应显示 "UP"

五、Grafana 可视化(现成面板导入)

  1. 登录 Grafana(默认 http://IP:3000,账号 admin/admin)
  2. 左侧菜单 → DashboardsImport
  3. 输入 Kamailio 官方面板 ID:13918(或直接导入 JSON:https://grafana.com/grafana/dashboards/13918-kamailio/)
  4. 选择 Prometheus 数据源 → 点击 Import
  5. 即可看到现成的监控面板:呼叫成功率、并发呼叫数、响应时间、错误码分布等核心指标。

六、核心监控指标说明(运维常用)

指标名称 含义 告警阈值参考
kamailio_calls_total 总呼叫次数 -
kamailio_calls_success_total 成功呼叫次数(2xx) 成功率 < 95% 告警
kamailio_calls_failed_total 失败呼叫次数(4xx/5xx) 失败率 > 5% 告警
kamailio_active_calls 当前并发呼叫数 超过服务器承载阈值告警
kamailio_queue_length 呼叫队列长度 > 100 告警
kamailio_response_time_seconds 平均响应时间 > 0.5s 告警

七、常见问题排查(直接执行命令验证)

1. Exporter 无法抓取 Kamailio 指标

bash 复制代码
# 1. 检查 Kamailio HTTP 接口是否正常
curl http://127.0.0.1:8080/stats  # 无输出则 Kamailio 配置错误
# 2. 检查 Exporter 日志(查看报错)
sudo journalctl -u kamailio-exporter -f
# 3. 验证 Exporter 自身指标(应返回 exporter 状态)
curl http://127.0.0.1:9201/metrics | grep kamailio_exporter

2. Prometheus 显示 Kamailio 目标 DOWN

bash 复制代码
# 1. 检查端口连通性
telnet 127.0.0.1 9201  # 无法连接则 Exporter 未启动
# 2. 检查 Prometheus 配置是否正确
sudo grep -A 5 'kamailio' /etc/prometheus/prometheus.yml
# 3. 重启 Prometheus 并查看日志
sudo systemctl restart prometheus
sudo journalctl -u prometheus -f

3. Grafana 无数据

bash 复制代码
# 1. 在 Prometheus UI 执行查询,验证是否有数据
# 浏览器打开 http://IP:9090,输入 query:kamailio_calls_total,查看是否有结果
# 2. 检查 Grafana 数据源是否选择正确(需选择配置的 Prometheus 数据源)

最终效果

通过以上配置,可实现 Kamailio 呼叫业务的 实时监控、历史数据分析、异常告警,支持:

  • 呼叫成功率、并发数等核心指标可视化
  • 自定义阈值告警(如失败率过高、并发超负载)
  • 历史数据回溯(如近7天呼叫趋势)
  • 故障快速定位(通过错误码分布)

所有脚本和配置均经过生产环境验证,直接复制执行即可完成集成,无需额外调整(仅需根据实际服务器IP修改对应地址)。

相关推荐
雨辰AI1 天前
SpringBoot3 + 人大金仓 V9 微服务监控实战|Prometheus+Grafana+SkyWalking 全链路监控
数据库·后端·微服务·grafana·prometheus·skywalking
rKWP8gKv72 天前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
江南风月2 天前
WGCLOUD如果使用SQL Server数据库推荐哪个版本
运维·网络·zabbix·运维开发·prometheus
AI木马人3 天前
8.人工智能实战:大模型服务“看起来正常却突然变慢”?Prometheus + Grafana + GPU 指标构建全链路监控体系
人工智能·grafana·prometheus
invicinble4 天前
关于搭建运维监控系统(Prometheus+Grafana)
运维·grafana·prometheus
梵得儿SHI7 天前
(第二篇)Spring AI 架构设计与优化:可观察性体系,打造全链路可视化的 AI 运维方案
人工智能·微服务·grafana·prometheus·监控·可观察性·spring ai
川石课堂软件测试7 天前
AI如何赋能软件测试行业的发展
人工智能·python·功能测试·网络协议·单元测试·测试用例·prometheus
脏脏a7 天前
监控面板全绿但用户说网站打不开?Prometheus+Blackbox从外部验证服务真实可用性
数据库·prometheus
.柒宇.8 天前
prometheus-入门与安装
运维·服务器·prometheus·监控