opensips.chart.sh 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. # shellcheck shell=bash disable=SC1117,SC2154,SC2086
  2. # no need for shebang - this file is loaded from charts.d.plugin
  3. # SPDX-License-Identifier: GPL-3.0-or-later
  4. # netdata
  5. # real-time performance and health monitoring, done right!
  6. # (C) 2016 Costa Tsaousis <costa@tsaousis.gr>
  7. #
  8. opensips_opts="fifo get_statistics all"
  9. opensips_cmd=
  10. opensips_update_every=5
  11. opensips_timeout=2
  12. opensips_priority=80000
  13. opensips_get_stats() {
  14. run -t $opensips_timeout "$opensips_cmd" $opensips_opts |
  15. grep "^\(core\|dialog\|net\|registrar\|shmem\|siptrace\|sl\|tm\|uri\|usrloc\):[a-zA-Z0-9_-]\+[[:space:]]*[=:]\+[[:space:]]*[0-9]\+[[:space:]]*$" |
  16. sed \
  17. -e "s|[[:space:]]*[=:]\+[[:space:]]*\([0-9]\+\)[[:space:]]*$|=\1|g" \
  18. -e "s|[[:space:]:-]\+|_|g" \
  19. -e "s|^|opensips_|g"
  20. local ret=$?
  21. [ $ret -ne 0 ] && echo "opensips_command_failed=1"
  22. return $ret
  23. }
  24. opensips_check() {
  25. # if the user did not provide an opensips_cmd
  26. # try to find it in the system
  27. if [ -z "$opensips_cmd" ]; then
  28. require_cmd opensipsctl || return 1
  29. opensips_cmd="$OPENSIPSCTL_CMD"
  30. fi
  31. # check once if the command works
  32. local x
  33. x="$(opensips_get_stats | grep "^opensips_core_")"
  34. # shellcheck disable=SC2181
  35. if [ ! $? -eq 0 ] || [ -z "$x" ]; then
  36. error "cannot get global status. Please set opensips_opts='options' whatever needed to get connected to opensips server, in $confd/opensips.conf"
  37. return 1
  38. fi
  39. return 0
  40. }
  41. opensips_create() {
  42. # create the charts
  43. cat << EOF
  44. CHART opensips.dialogs_active '' "OpenSIPS Active Dialogs" "dialogs" dialogs '' area $((opensips_priority + 1)) $opensips_update_every '' '' 'opensips'
  45. DIMENSION dialog_active_dialogs active absolute 1 1
  46. DIMENSION dialog_early_dialogs early absolute -1 1
  47. CHART opensips.users '' "OpenSIPS Users" "users" users '' line $((opensips_priority + 2)) $opensips_update_every '' '' 'opensips'
  48. DIMENSION usrloc_registered_users registered absolute 1 1
  49. DIMENSION usrloc_location_users location absolute 1 1
  50. DIMENSION usrloc_location_contacts contacts absolute 1 1
  51. DIMENSION usrloc_location_expires expires incremental -1 1
  52. CHART opensips.registrar '' "OpenSIPS Registrar" "registrations/s" registrar '' line $((opensips_priority + 3)) $opensips_update_every '' '' 'opensips'
  53. DIMENSION registrar_accepted_regs accepted incremental 1 1
  54. DIMENSION registrar_rejected_regs rejected incremental -1 1
  55. CHART opensips.transactions '' "OpenSIPS Transactions" "transactions/s" transactions '' line $((opensips_priority + 4)) $opensips_update_every '' '' 'opensips'
  56. DIMENSION tm_UAS_transactions UAS incremental 1 1
  57. DIMENSION tm_UAC_transactions UAC incremental -1 1
  58. CHART opensips.core_rcv '' "OpenSIPS Core Receives" "queries/s" core '' line $((opensips_priority + 5)) $opensips_update_every '' '' 'opensips'
  59. DIMENSION core_rcv_requests requests incremental 1 1
  60. DIMENSION core_rcv_replies replies incremental -1 1
  61. CHART opensips.core_fwd '' "OpenSIPS Core Forwards" "queries/s" core '' line $((opensips_priority + 6)) $opensips_update_every '' '' 'opensips'
  62. DIMENSION core_fwd_requests requests incremental 1 1
  63. DIMENSION core_fwd_replies replies incremental -1 1
  64. CHART opensips.core_drop '' "OpenSIPS Core Drops" "queries/s" core '' line $((opensips_priority + 7)) $opensips_update_every '' '' 'opensips'
  65. DIMENSION core_drop_requests requests incremental 1 1
  66. DIMENSION core_drop_replies replies incremental -1 1
  67. CHART opensips.core_err '' "OpenSIPS Core Errors" "queries/s" core '' line $((opensips_priority + 8)) $opensips_update_every '' '' 'opensips'
  68. DIMENSION core_err_requests requests incremental 1 1
  69. DIMENSION core_err_replies replies incremental -1 1
  70. CHART opensips.core_bad '' "OpenSIPS Core Bad" "queries/s" core '' line $((opensips_priority + 9)) $opensips_update_every '' '' 'opensips'
  71. DIMENSION core_bad_URIs_rcvd bad_URIs_rcvd incremental 1 1
  72. DIMENSION core_unsupported_methods unsupported_methods incremental 1 1
  73. DIMENSION core_bad_msg_hdr bad_msg_hdr incremental 1 1
  74. CHART opensips.tm_replies '' "OpenSIPS TM Replies" "replies/s" transactions '' line $((opensips_priority + 10)) $opensips_update_every '' '' 'opensips'
  75. DIMENSION tm_received_replies received incremental 1 1
  76. DIMENSION tm_relayed_replies relayed incremental 1 1
  77. DIMENSION tm_local_replies local incremental 1 1
  78. CHART opensips.transactions_status '' "OpenSIPS Transactions Status" "transactions/s" transactions '' line $((opensips_priority + 11)) $opensips_update_every '' '' 'opensips'
  79. DIMENSION tm_2xx_transactions 2xx incremental 1 1
  80. DIMENSION tm_3xx_transactions 3xx incremental 1 1
  81. DIMENSION tm_4xx_transactions 4xx incremental 1 1
  82. DIMENSION tm_5xx_transactions 5xx incremental 1 1
  83. DIMENSION tm_6xx_transactions 6xx incremental 1 1
  84. CHART opensips.transactions_inuse '' "OpenSIPS InUse Transactions" "transactions" transactions '' line $((opensips_priority + 12)) $opensips_update_every '' '' 'opensips'
  85. DIMENSION tm_inuse_transactions inuse absolute 1 1
  86. CHART opensips.sl_replies '' "OpenSIPS SL Replies" "replies/s" core '' line $((opensips_priority + 13)) $opensips_update_every '' '' 'opensips'
  87. DIMENSION sl_1xx_replies 1xx incremental 1 1
  88. DIMENSION sl_2xx_replies 2xx incremental 1 1
  89. DIMENSION sl_3xx_replies 3xx incremental 1 1
  90. DIMENSION sl_4xx_replies 4xx incremental 1 1
  91. DIMENSION sl_5xx_replies 5xx incremental 1 1
  92. DIMENSION sl_6xx_replies 6xx incremental 1 1
  93. DIMENSION sl_sent_replies sent incremental 1 1
  94. DIMENSION sl_sent_err_replies error incremental 1 1
  95. DIMENSION sl_received_ACKs ACKed incremental 1 1
  96. CHART opensips.dialogs '' "OpenSIPS Dialogs" "dialogs/s" dialogs '' line $((opensips_priority + 14)) $opensips_update_every '' '' 'opensips'
  97. DIMENSION dialog_processed_dialogs processed incremental 1 1
  98. DIMENSION dialog_expired_dialogs expired incremental 1 1
  99. DIMENSION dialog_failed_dialogs failed incremental -1 1
  100. CHART opensips.net_waiting '' "OpenSIPS Network Waiting" "kilobytes" net '' line $((opensips_priority + 15)) $opensips_update_every '' '' 'opensips'
  101. DIMENSION net_waiting_udp UDP absolute 1 1024
  102. DIMENSION net_waiting_tcp TCP absolute 1 1024
  103. CHART opensips.uri_checks '' "OpenSIPS URI Checks" "checks / sec" uri '' line $((opensips_priority + 16)) $opensips_update_every '' '' 'opensips'
  104. DIMENSION uri_positive_checks positive incremental 1 1
  105. DIMENSION uri_negative_checks negative incremental -1 1
  106. CHART opensips.traces '' "OpenSIPS Traces" "traces / sec" traces '' line $((opensips_priority + 17)) $opensips_update_every '' '' 'opensips'
  107. DIMENSION siptrace_traced_requests requests incremental 1 1
  108. DIMENSION siptrace_traced_replies replies incremental -1 1
  109. CHART opensips.shmem '' "OpenSIPS Shared Memory" "kilobytes" mem '' line $((opensips_priority + 18)) $opensips_update_every '' '' 'opensips'
  110. DIMENSION shmem_total_size total absolute 1 1024
  111. DIMENSION shmem_used_size used absolute 1 1024
  112. DIMENSION shmem_real_used_size real_used absolute 1 1024
  113. DIMENSION shmem_max_used_size max_used absolute 1 1024
  114. DIMENSION shmem_free_size free absolute 1 1024
  115. CHART opensips.shmem_fragments '' "OpenSIPS Shared Memory Fragmentation" "fragments" mem '' line $((opensips_priority + 19)) $opensips_update_every '' '' 'opensips'
  116. DIMENSION shmem_fragments fragments absolute 1 1
  117. EOF
  118. return 0
  119. }
  120. opensips_update() {
  121. # the first argument to this function is the microseconds since last update
  122. # pass this parameter to the BEGIN statement (see below).
  123. # do all the work to collect / calculate the values
  124. # for each dimension
  125. # 1. get the counters page from opensips
  126. # 2. sed to remove spaces; replace . with _; remove spaces around =; prepend each line with: local opensips_
  127. # 3. egrep lines starting with:
  128. # local opensips_client_http_ then one or more of these a-z 0-9 _ then = and one of more of 0-9
  129. # local opensips_server_all_ then one or more of these a-z 0-9 _ then = and one of more of 0-9
  130. # 4. then execute this as a script with the eval
  131. # be very careful with eval:
  132. # prepare the script and always grep at the end the lines that are useful, so that
  133. # even if something goes wrong, no other code can be executed
  134. unset \
  135. opensips_dialog_active_dialogs \
  136. opensips_dialog_early_dialogs \
  137. opensips_usrloc_registered_users \
  138. opensips_usrloc_location_users \
  139. opensips_usrloc_location_contacts \
  140. opensips_usrloc_location_expires \
  141. opensips_registrar_accepted_regs \
  142. opensips_registrar_rejected_regs \
  143. opensips_tm_UAS_transactions \
  144. opensips_tm_UAC_transactions \
  145. opensips_core_rcv_requests \
  146. opensips_core_rcv_replies \
  147. opensips_core_fwd_requests \
  148. opensips_core_fwd_replies \
  149. opensips_core_drop_requests \
  150. opensips_core_drop_replies \
  151. opensips_core_err_requests \
  152. opensips_core_err_replies \
  153. opensips_core_bad_URIs_rcvd \
  154. opensips_core_unsupported_methods \
  155. opensips_core_bad_msg_hdr \
  156. opensips_tm_received_replies \
  157. opensips_tm_relayed_replies \
  158. opensips_tm_local_replies \
  159. opensips_tm_2xx_transactions \
  160. opensips_tm_3xx_transactions \
  161. opensips_tm_4xx_transactions \
  162. opensips_tm_5xx_transactions \
  163. opensips_tm_6xx_transactions \
  164. opensips_tm_inuse_transactions \
  165. opensips_sl_1xx_replies \
  166. opensips_sl_2xx_replies \
  167. opensips_sl_3xx_replies \
  168. opensips_sl_4xx_replies \
  169. opensips_sl_5xx_replies \
  170. opensips_sl_6xx_replies \
  171. opensips_sl_sent_replies \
  172. opensips_sl_sent_err_replies \
  173. opensips_sl_received_ACKs \
  174. opensips_dialog_processed_dialogs \
  175. opensips_dialog_expired_dialogs \
  176. opensips_dialog_failed_dialogs \
  177. opensips_net_waiting_udp \
  178. opensips_net_waiting_tcp \
  179. opensips_uri_positive_checks \
  180. opensips_uri_negative_checks \
  181. opensips_siptrace_traced_requests \
  182. opensips_siptrace_traced_replies \
  183. opensips_shmem_total_size \
  184. opensips_shmem_used_size \
  185. opensips_shmem_real_used_size \
  186. opensips_shmem_max_used_size \
  187. opensips_shmem_free_size \
  188. opensips_shmem_fragments
  189. opensips_command_failed=0
  190. eval "local $(opensips_get_stats)"
  191. # shellcheck disable=SC2181
  192. [ $? -ne 0 ] && return 1
  193. [ $opensips_command_failed -eq 1 ] && error "failed to get values, disabling." && return 1
  194. # write the result of the work.
  195. cat << VALUESEOF
  196. BEGIN opensips.dialogs_active $1
  197. SET dialog_active_dialogs = $opensips_dialog_active_dialogs
  198. SET dialog_early_dialogs = $opensips_dialog_early_dialogs
  199. END
  200. BEGIN opensips.users $1
  201. SET usrloc_registered_users = $opensips_usrloc_registered_users
  202. SET usrloc_location_users = $opensips_usrloc_location_users
  203. SET usrloc_location_contacts = $opensips_usrloc_location_contacts
  204. SET usrloc_location_expires = $opensips_usrloc_location_expires
  205. END
  206. BEGIN opensips.registrar $1
  207. SET registrar_accepted_regs = $opensips_registrar_accepted_regs
  208. SET registrar_rejected_regs = $opensips_registrar_rejected_regs
  209. END
  210. BEGIN opensips.transactions $1
  211. SET tm_UAS_transactions = $opensips_tm_UAS_transactions
  212. SET tm_UAC_transactions = $opensips_tm_UAC_transactions
  213. END
  214. BEGIN opensips.core_rcv $1
  215. SET core_rcv_requests = $opensips_core_rcv_requests
  216. SET core_rcv_replies = $opensips_core_rcv_replies
  217. END
  218. BEGIN opensips.core_fwd $1
  219. SET core_fwd_requests = $opensips_core_fwd_requests
  220. SET core_fwd_replies = $opensips_core_fwd_replies
  221. END
  222. BEGIN opensips.core_drop $1
  223. SET core_drop_requests = $opensips_core_drop_requests
  224. SET core_drop_replies = $opensips_core_drop_replies
  225. END
  226. BEGIN opensips.core_err $1
  227. SET core_err_requests = $opensips_core_err_requests
  228. SET core_err_replies = $opensips_core_err_replies
  229. END
  230. BEGIN opensips.core_bad $1
  231. SET core_bad_URIs_rcvd = $opensips_core_bad_URIs_rcvd
  232. SET core_unsupported_methods = $opensips_core_unsupported_methods
  233. SET core_bad_msg_hdr = $opensips_core_bad_msg_hdr
  234. END
  235. BEGIN opensips.tm_replies $1
  236. SET tm_received_replies = $opensips_tm_received_replies
  237. SET tm_relayed_replies = $opensips_tm_relayed_replies
  238. SET tm_local_replies = $opensips_tm_local_replies
  239. END
  240. BEGIN opensips.transactions_status $1
  241. SET tm_2xx_transactions = $opensips_tm_2xx_transactions
  242. SET tm_3xx_transactions = $opensips_tm_3xx_transactions
  243. SET tm_4xx_transactions = $opensips_tm_4xx_transactions
  244. SET tm_5xx_transactions = $opensips_tm_5xx_transactions
  245. SET tm_6xx_transactions = $opensips_tm_6xx_transactions
  246. END
  247. BEGIN opensips.transactions_inuse $1
  248. SET tm_inuse_transactions = $opensips_tm_inuse_transactions
  249. END
  250. BEGIN opensips.sl_replies $1
  251. SET sl_1xx_replies = $opensips_sl_1xx_replies
  252. SET sl_2xx_replies = $opensips_sl_2xx_replies
  253. SET sl_3xx_replies = $opensips_sl_3xx_replies
  254. SET sl_4xx_replies = $opensips_sl_4xx_replies
  255. SET sl_5xx_replies = $opensips_sl_5xx_replies
  256. SET sl_6xx_replies = $opensips_sl_6xx_replies
  257. SET sl_sent_replies = $opensips_sl_sent_replies
  258. SET sl_sent_err_replies = $opensips_sl_sent_err_replies
  259. SET sl_received_ACKs = $opensips_sl_received_ACKs
  260. END
  261. BEGIN opensips.dialogs $1
  262. SET dialog_processed_dialogs = $opensips_dialog_processed_dialogs
  263. SET dialog_expired_dialogs = $opensips_dialog_expired_dialogs
  264. SET dialog_failed_dialogs = $opensips_dialog_failed_dialogs
  265. END
  266. BEGIN opensips.net_waiting $1
  267. SET net_waiting_udp = $opensips_net_waiting_udp
  268. SET net_waiting_tcp = $opensips_net_waiting_tcp
  269. END
  270. BEGIN opensips.uri_checks $1
  271. SET uri_positive_checks = $opensips_uri_positive_checks
  272. SET uri_negative_checks = $opensips_uri_negative_checks
  273. END
  274. BEGIN opensips.traces $1
  275. SET siptrace_traced_requests = $opensips_siptrace_traced_requests
  276. SET siptrace_traced_replies = $opensips_siptrace_traced_replies
  277. END
  278. BEGIN opensips.shmem $1
  279. SET shmem_total_size = $opensips_shmem_total_size
  280. SET shmem_used_size = $opensips_shmem_used_size
  281. SET shmem_real_used_size = $opensips_shmem_real_used_size
  282. SET shmem_max_used_size = $opensips_shmem_max_used_size
  283. SET shmem_free_size = $opensips_shmem_free_size
  284. END
  285. BEGIN opensips.shmem_fragments $1
  286. SET shmem_fragments = $opensips_shmem_fragments
  287. END
  288. VALUESEOF
  289. return 0
  290. }