背景
homer是一个开源的SIP分析工具, 它可以帮助我们分析SIP协议的数据包,从而了解SIP协议的工作原理。
其官方代码地址为: homer, 目前最新版本为homer10。
安装
官方安装文档为: homer10安装文档,
安装命令如下:
1
2
3
|
git clone https://github.com/sipcapture/homer-docker.git
cd all-in-one
docker-compose up -d
|
查看docker-compose.yaml,可以看到需要的组件有:
| 组件名称 |
组件介绍 |
必要性 |
| alertmanager |
告警组件 |
非必要 |
| clickhouse |
面向列的数据库组件 |
必要 |
| grafana |
web管理页面 |
必要 |
| docker-hepgen |
hep数据生成组件 |
非必要 |
| heplify-server |
hep数据收集组件 |
必要 |
| mailhog |
邮件组件 |
非必要 |
| node-exporter |
节点监控组件 |
必要 |
| qryn |
qryn组件 |
必要 |
| vector |
数据采集组件 |
必要 |
这些镜像直接从dockerhub拉取,然后运行docker-compose up -d 即可。
关于grafana组件, 我做了两点修改:
- 避免容器内下载
qxip-flow-pannel插件,提前本地下载。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
services:
grafana:
build:
context: ./grafana
dockerfile: Dockerfile
container_name: grafana
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
- ./grafana/plugins/k8spacket-nodegraphplugin-datasource:/var/lib/grafana/plugins/k8spacket-nodegraphplugin-datasource
environment:
- GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
- GF_USERS_DEFAULT_THEME=light
- GF_EXPLORE_ENABLED=true
- GF_ALERTING_ENABLED=false
- GF_UNIFIED_ALERTING_ENABLED=true
- GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=qxip-flow-panel
restart: unless-stopped
ports:
- 3000:3000
depends_on:
- clickhouse-server
logging:
options:
max-size: "10m"
|
grafana文件夹下的文件:
1
2
|
ls
defaults.ini Dockerfile plugins provisioning qxip-flow-panel-10.2.0.zip
|
qxip-flow-panel的下载地址: qxip-flow-pannel-10.2.0
Dockerfile内容为:
1
2
3
4
5
6
7
8
|
FROM grafana/grafana-oss:10.4.3
# 将提前下载好的插件 zip 包拷贝进镜像并解压
COPY qxip-flow-panel-10.2.0.zip /tmp/qxip-flow-panel.zip
COPY defaults.ini /usr/share/grafana/conf/
RUN mkdir -p /var/lib/grafana/plugins \
&& unzip /tmp/qxip-flow-panel.zip -d /var/lib/grafana/plugins/
|
- 因为
grafana的10+版本不再支持Angular, 为避免web页面出现this panel requires Angular (deprecated), 添加default.ini配置.
1
2
|
[feature_toggles]
autoMigrateOldPanels = true
|
该default.ini文件的位置在grafana容器内/usr/share/grafana/conf/defaults.ini, 可以从容器内copy出来该文件,修改之后,
在Dockerfile里COPY defaults.ini /usr/share/grafana/conf/ 。
之后, docker-compose build grafana重新编译grafana镜像包, docker-compose up -d grafana。
服务正常的状态:

可以看到hepgen-bad和hepgen两个容器会多次重启,这个是正常的, 不断重启生成hep数据。
体验
打开http://localhost:3000, 登录账号admin, 密码admin, 即可打开grafana管理页面。
可以看到的dashboard页面如下:

选择callflow查看调用流程:

选择hep flow中的一个sip信令, 即可查看该信令的详细信息:

在查看SIP Calls & Registers的dashboard页面, 可以看到调用流程:

实战
因为默认的docker-compose.yaml中使用hepgen和hepgen-bad不断生成hep数据, 不想随机生成sip,
停下这两个服务,然后使用opensips 3.5.5对接heplify-server。
停止hepgen和hepgen-bad服务
1
|
docker-compose down hepgen hepgen-bad
|
opensips 对接 heplify-server
可以参考opensips trace 模块文档, 配置opensips的trace模块, 将trace数据发送到heplify-server。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
socket=hep_udp:172.16.4.111:6000
...
loadmodule "dialog.so"
loadmodule "tracer.so"
loadmodule "proto_hep.so"
modparam("proto_hep", "hep_id","[hid] 172.16.4.111:9060;transport=udp;version=3")
modparam("tracer", "trace_id","[tid]uri=hep:hid")
route {
...
if (is_method("REGISTER")) {
trace("tid", "t","sip");
}
if (is_method("INVITE") && !has_totag()) {
trace("tid", "d", "sip");
}
}
|
使用软电话注册到opensips上,然后拨打电话,查看Call Flow:


这些信息正是opensips产生的数据。