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 可视化(现成面板导入)
- 登录 Grafana(默认 http://IP:3000,账号 admin/admin)
- 左侧菜单 → Dashboards → Import
- 输入 Kamailio 官方面板 ID:
13918(或直接导入 JSON:https://grafana.com/grafana/dashboards/13918-kamailio/) - 选择 Prometheus 数据源 → 点击 Import
- 即可看到现成的监控面板:呼叫成功率、并发呼叫数、响应时间、错误码分布等核心指标。
六、核心监控指标说明(运维常用)
| 指标名称 | 含义 | 告警阈值参考 |
|---|---|---|
| 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修改对应地址)。