今天我們來梳理一下常用的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