今天我們來梳理一下常用的OpenSIPS MI命令。
1、查看OpenSIPS當前支持哪些MI命令
/usr/local/opensips/sbin/opensipsctl fifo which
該方法輸出的結果跟opensips.cfg腳步中加載的模塊有關(結果樣例見下文‘附錄-1’)
如果opensips.cfg中沒有加載load_balancer.so, 那么就不會有lb_reload、lb_list相關的MI命令
2、查看OpenSIPS 版本
/usr/local/opensips/sbin/opensips -V
/usr/local/opensips/sbin/opensipsctl fifo version
3、load_balancer 負載均衡模塊相關命令
-
lb_reload : 根據load_balance表和當前dialog信息,重新加載負載均衡的配置(節點是否可用,當前處理的並發量等)
-
lb_list :獲取當前負載均衡列表狀態信息
-
lb_status :設置負載均衡節點的狀態, 調用方式: lb_status ${load_balance_id} ${status}
-
load_balance_id : 節點在數據庫load_balancer表中的ID值,如上面的 id=17
-
status :{ 0 : 禁用, 1 : 啟用 }
-
lb_resize :重置負載均衡節點各中資源支持的並發上限值,調用方式:lb_resize ${load_balance_id} ${resource_type} ${max}
-
load_balance_id : 同上
-
resource_type : 資源類型,如下面lb_list樣例中的 pstn
-
max : 並發上限
lb_list樣例:lb_list Destination:: sip:10.2.38.203:5060 id=17 group=50 enabled=yes auto-reenable=on Resources:: Resource:: pstn max=1000 load=10 lb_status樣例:lb_status 17 0 (將id=17的節點,拉出集群, 執行結果如下) Destination:: sip:10.2.110.102:5060 id=12 group=10 enabled=no auto-reenable=off Resources:: Resource:: pstn max=1000 load=0 lb_status樣例:lb_status 17 pstn 100 (將id=17的節點 pstn 的並發上限改成 100,原來是1000) Destination:: sip:10.2.110.102:5060 id=12 group=10 enabled=no auto-reenable=off Resources:: Resource:: pstn max=100 load=0
4、dialplan 撥號方案模塊相關命令
-
dp_reload : 重新加載數據庫dialplan表中的撥號方案到內存
-
dp_translate : 撥號方案解析,校驗文本否匹配某撥號方案,調用方式:dp_translate ${dpid} ${text}
-
如果不匹配:可能返回 404 No translation、 或者 404 No information available for dpid
-
如果匹配:則會返回匹配處理后的結果和撥號方案的屬性內容
+----+------+----+------------+---------------+--------------+----------------+----------+---------+----------+-------------+ | id | dpid | pr | match_op | match_exp | match_flags | subst_exp | repl_exp | timerec | disabled | attrs | +----+------+----+------------+---------------+--------------+----------------+----------+---------+----------+-------------+ | 17 | 0 | 30 | 1 | ^210001 | 0 | ^(210001)(.+) | \2 | NULL | 0 | 30:PRE_IVR | 按照上面dialplan表中撥號方案配置,執行 dp_translate 0 21000113801234567 后,得到的結果是: Output:: 13801234567 【注意:這里將210001去掉了,因為repl_exp的值表示只取第二個匹配部分】 ATTRIBUTES:: 30:PRE_IVR
5、dialog 會話模塊相關命令
-
dlg_list : 獲取會話列表,調用方式: dlg_list [${callid}] [${from_tag}] 或者 dlg_list [${index}] [${counter}] 所有參數都是可選值
-
callid : dialog的callid
-
from_tag : dialog的from tag
-
index : 偏移量,從第幾個開始獲取dialog列表
-
counter : 需要獲取多少個dialog
-
dlg_end_dlg : 終止會話,會掛斷電話【慎用】,調用方式: dlg_end_dlg ${dialog_uid} [${extra_hdrs}]
-
dialog_uid : 能唯一標識出dialog的值,比如 ID、callid 等
-
extra_hdrs : (可選) 需要加到BYE消息中的額外消息頭信息
-
dlg_db_sync : 將DB中的Dialog內容恢復至內存【OpenSIPS主備方式時,很有用,當發生主備切換,新機器將從DB中恢復Dialog】
-
dlg_cluster_sync : 如果dialog開啟了dialog_replication_cluster, 則可以從其他集群節點同步會話信息過來
-
dlg_restore_db : 將內存中的Dialog數據寫入DB,底層是先刪除dialog表中所有內容,再將內存中的數據寫入DB 【使用場景:OpenSIPS與DB發生異常斷連,等DB連接恢復后,執行該命令,已處理掉DB中的臟數據】
獲取會話列表:
dlg_list
opensipsctl fifo dlg_list abcdrssfrs122444@192.168.1.1 AAdfeEFF33
opensipsctl fifo dlg_list 40 10 【可以得到當前會話總數和會話列表明細】
會話信息:
dialog:: ID=6133613994830
state:: 4
user_flags:: 0
timestart:: 1596542689
datestart:: 2020-08-04 20:04:49
timeout:: 1596553488
dateout:: 2020-08-04 23:04:48
callid:: 88b5dd7b-50ed-1239-7f93-fa163ef93518
from_uri:: sip:9003@10.2.32.116
to_uri:: sip:9004@10.2.32.112:5060
caller_tag:: N3t06BZKX7UDD
caller_contact:: sip:mod_sofia@10.2.32.116:5080
callee_cseq:: 0
caller_route_set::
caller_bind_addr:: udp:10.2.32.112:5060
caller_sdp::
CALLEES::
callee::
callee_tag:: 7502e542
callee_contact:: sip:9004@10.32.26.19:62349
caller_cseq:: 23717551
callee_route_set::
callee_bind_addr:: udp:10.2.32.112:5060
callee_sdp::
6、address 地址模塊相關命令
-
address_reload : 重載permission模塊的address表到內存
-
address_dump
7、獲取OpenSIPS當前統計信息:如共享內存、私有內存、會話、注冊信息等的統計情況
-
get_statistics ${filter_1} ${filter_2} ${filter_N} : filter 過濾條件的取值如下,可以有多個過濾條件
-
all : 獲取所有統計信息
-
shmem: : 獲取共享內存使用情況
-
-
pkmem: : 獲取私有內存使用情況
-
dialog: : 獲取會話統計信息
-
usrloc: : 獲取SIP UA分機注冊統計信息
-
opensips 配置: children=1
啟動腳步:sudo /usr/local/opensips/sbin/opensips -P /var/run/opensips.pid -m 4096 -M 384 -u root -g root -f /usr/local/opensips242/etc/opensips/opensips.cfg
查看共享內存和私有內存情況:
sudo /usr/local/opensips/sbin/opensipsctl fifo get_statistics usrloc: dialog: shmem: pkmem:
輸出的結果如下:
usrloc:registered_users:: 39980 【共注冊39980個終端】
usrloc:location-users:: 39980
usrloc:location-contacts:: 39980
usrloc:location-expires:: 29995
dialog:active_dialogs:: 867 【當前有867個會話】
dialog:early_dialogs:: 5
dialog:processed_dialogs:: 484243
dialog:expired_dialogs:: 0
dialog:failed_dialogs:: 7637
dialog:create_sent:: 0
dialog:update_sent:: 0
dialog:delete_sent:: 0
dialog:create_recv:: 0
dialog:update_recv:: 0
dialog:delete_recv:: 0
shmem:total_size:: 4294967296 【共享內存配置:4096M】
shmem:used_size:: 7906624
shmem:real_used_size:: 9535880
shmem:max_used_size:: 9600968
shmem:free_size:: 4285431416
shmem:fragments:: 66443
pkmem:0-total_size:: 402653184 【私有內存配置:384M】
pkmem:0-used_size:: 93416
pkmem:0-real_used_size:: 144072
pkmem:0-max_used_size:: 144216
pkmem:0-free_size:: 402509112
pkmem:0-fragments:: 698
后面省略 pkmem:1 至 pkmem:14的內容
8、運維場景:
如果我們的OpenSIPS是主備模式,在發生主備切換時,我們可能需要執行下面命令,將數據進行同步
/usr/local/opensips/sbin/opensipsctl fifo dp_reload
/usr/local/opensips/sbin/opensipsctl fifo address_reload
/usr/local/opensips/sbin/opensipsctl fifo lb_reload
/usr/local/opensips/sbin/opensipsctl fifo dlg_db_sync
/usr/local/opensips/sbin/opensipsctl fifo ul_sync location
附錄1:/usr/local/opensips/sbin/opensipsctl fifo which 的輸出樣例:
get_statistics
list_statistics
reset_statistics
uptime
version
pwd
arg 【查看OpenSIPS的啟動參數】
which
ps 【查看OpenSIPS的進程信息】
kill
log_level
cache_store 【將數據存入本地NoSQL緩存中】,調用方式 cache_store local ${key} ${value}
cache_fetch 【獲取本地NoSQL緩存中的信息】,調用方式 cache_fetch local ${key}
cache_remove
event_subscribe
events_list
subscribers_list
list_tcp_conns
help
list_blacklists
t_uac_dlg
t_uac_cancel
t_hash
t_reply
ul_rm
ul_rm_contact
ul_dump
ul_flush
ul_add
ul_show_contact
ul_sync
ul_cluster_sync
rand_set_prob
rand_reset_prob
rand_get_prob
get_config_hash
check_config_hash
shv_get
shv_set
dlg_list
dlg_list_ctx
dlg_end_dlg
dlg_db_sync
dlg_restore_db
dlg_cluster_sync
profile_get_size
profile_list_dlgs
profile_get_values
list_all_profiles
profile_end_dlgs
dlg_set_sharing_tag_active
dlg_list_sharing_tags
domain_reload
domain_dump
lb_reload
lb_resize
lb_list
lb_status
dp_reload
dp_translate
dp_show_partition
address_reload
address_dump
subnet_dump
allow_uri
sip_trace
cache_remove_chunk
