[SR-Users] issues using evapi module

David Escartin descartin at sonoc.io
Thu Nov 26 11:03:30 CET 2020


Dear all, Daniel

we have been testing this module with the following setup
kamailio 5.3.2
evapi params
modparam("evapi", "workers", 4)
modparam("evapi", "netstring_format", 0)
modparam("evapi", "bind_addr", "127.0.0.1:8448")
modparam("evapi", "max_clients", 32)

then in the configuration we do evapi_relay of avp including a json data
(which can be quite long), like this
{"key" : "aarp2q0tcpqhs0cpucuhukjs2ah2j00q at 10.18.5.64" , "msg" :
{"rg_in":"701","ani_init":{"ani_source":"pai", ....... }}}

We have an application listening on the tcp socket and writing those
messages to a kafka cluster, and this works ok, and in the previous manual
tests we have done no issue was found.
But when making some load tests, and passing some live traffic we see some
issues

seems like some times, when there are messages to be sent to the tcp socket
at the same time, they are sent in the same message, when normally each
data sent using evapi_relay is sent in 1 message
We do sometimes see something like this on the application consuming from
the tcp socket
2020-11-25 15:20:01.744 UTC [error]
<0.706.0>@evapi_kafka_listener:handle_info:167 body "{\"key\" : \"
6142651aa63616c6c04a783cd at 72.21.24.130\" , \"msg\" :
{\"rg_in\":\"677\",\"ani_init\":{\"ani_source\":\"fro\",.......}}}{\"key\"
: \"isbc7caT4001915251VabcGhEfHdNiF0i at 172.16.120.1\" , \"msg\" :
{\"rg_in\":\"22\",\"ani_init\":{\"ani_source\":\"pai\", .......
,\"translate" not valid json; error = {691,invalid_trailing_data}
2020-11-25 15:20:01.745 UTC [error]
<0.706.0>@evapi_kafka_listener:handle_info:167 body
"dPartition\":\"-1\",......}}}" not valid json; error = {1,invalid_json}

and we do see that the application cannot parse the json message fine,
because we have like 2 json objects together
......{\"ani_source\":\"fro\",.......}}}{\"key\" :
\"isbc7caT4001915251Vabc............
This happens with 2 different UDP receivers processing messages and calling
evapi_relay at the same time. But i don't think this happens all the time.
Seems like some issue when several processes try to use evapi workers at
the same time.
We tried to increase evapi workers and it's the same

We also saw another issue I think. Seems when the avp sent to evapi socket
is bigger than ~1680 char, the json is also truncated, and also happens
when we use the socket in Lo interface which has an MTU of 65535.

Could you please take a look to see if there is any problem or limitation,
or if we are using something wrong?

thanks and best regards
david

El mar, 29 sept 2020 a las 13:40, David Escartin (<descartin at sonoc.io>)
escribió:

> hello Daniel
>
> thanks, finally i could do that, i was struggling with this because in
> kamailio 5.4 there was not being created a socket on the bindaddr param
> when starting kamailio. (that's why i even tried to start to listen on a
> regular tcp socket to connect there an application)
> But in 5.5 and 5.3 it does, so i could move forward and send the events to
> an external application
>
> best regards
> david
>
> El lun., 21 sept. 2020 a las 9:45, Daniel-Constantin Mierla (<
> miconda at gmail.com>) escribió:
>
>> Hello,
>>
>> you must have a different socket in modparam("evapi", "bind_addr", "...")
>> than the core listen parameter for sip tcp traffic. The connect with your
>> evapi app to the socket specified in modparam.
>>
>> Cheers,
>> Daniel
>> On 15.09.20 09:29, David Escartin wrote:
>>
>> hello Daniel
>>
>> i have tried the directive
>> listen=127.0.0.1:8448 and listen=tcp:127.0.0.1:8448
>> and i tried now  for example to connect with a tcp client from port 48583
>> (randomly selected when i made the tcp connect i guess)
>>
>> tcp        0      0 127.0.0.1:8448          127.0.0.1:48583
>> ESTABLISHED 4508/kamailio        keepalive (2.24/0/0)
>>
>> i configured the kernel to send keep alives 30secs after the tcp
>> connection
>>
>> should this be ok?
>>
>> best regards
>> david
>>
>> El lun., 14 sept. 2020 a las 18:50, Daniel-Constantin Mierla (<
>> miconda at gmail.com>) escribió:
>>
>>> Hello,
>>>
>>> to what port do you connect for evapi?
>>>
>>> The logs indicate connection to sip tcp port.
>>>
>>> Cheers,
>>> Daniel
>>> On 14.09.20 18:06, David Escartin wrote:
>>>
>>> Dear all
>>>
>>> We are trying to use the evapi module to send some data to an external
>>> application but I'm having problems getting the clients connected.
>>>
>>> I have the kamailio (version 5.3) running with a  tcp socket
>>> 127.0.0.1:8228, and the evapi params are just
>>> modparam("evapi", "workers", 4)
>>> modparam("evapi", "netstring_format", 0)
>>> modparam("evapi", "bind_addr", "127.0.0.1:8448")
>>> modparam("evapi", "max_clients", 32)
>>>
>>> I tried a different number of workers and netstring_format 1 too.
>>> When I start the kamailio i added some debug to the code, and seems when
>>> doing the mod init of the evapi dispatcher
>>> 38(4779) DEBUG: <core> [core/sr_module.c:779]: init_mod_child(): idx 38
>>> rank -2: evapi [EvAPI Dispatcher]
>>> it reaches to
>>>         while(1) {
>>>                 ev_loop (loop, 0);
>>>         }
>>> at evapi_run_dispatcher function.
>>> I guess if I connected to the tcp socket and sent some event, I would
>>> see the client accepted and the event route evapi:connection-new would be
>>> triggered. But i'm not able to do that.
>>> I tried to use the prime option, a tcp input client connection from
>>> logstash, so i could relay the data to the logstash using the evapi relay,
>>> but i only see the tcp socket being created but no client accepted.
>>> I also tried to connect with an erlang gen_tcp client, but it's the same
>>> i only see
>>>
>>> 47(4798) DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new:
>>> new tcp connection: 127.0.0.1
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:1174]: tcpconn_new(): on port
>>> 54537, type 2, socket 105
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:1497]: tcpconn_add(): hashes:
>>> 1117:1187:1505, 1
>>> 47(4798) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG:
>>> io_watch_add(0xad0880, 105, 2, 0x7fc211712d58), fd_no=53
>>> and if i try to send any data
>>>
>>> 47(4798) DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG:
>>> io_watch_del (0xad0880, 105, -1, 0x0) fd_no=54 called
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:4456]: handle_tcpconn_ev():
>>> sending to child, events 1
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:4129]: send2child(): selected
>>> tcp worker idx:0 proc:43 pid:4791 for activity on [tcp:127.0.0.1:8448],
>>> 0x7fc211712d58
>>> 43(4791) DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8
>>> con=0x7fc211712d58, fd=39
>>> 43(4791) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG:
>>> io_watch_add(0xb3c720, 39, 2, 0x7fc211712d58), fd_no=1
>>> 43(4791) DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG:
>>> io_watch_del (0xb3c720, 39, -1, 0x10) fd_no=2 called
>>> 43(4791) DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn():
>>> releasing con 0x7fc211712d58, state 1, fd=39, id=1 ([127.0.0.1]:54537 ->
>>> [127.0.0.1]:8448)
>>> 43(4791) DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn():
>>> extra_data (nil)
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:3559]: handle_tcp_child():
>>> reader response= 7fc211712d58, 1 from 0
>>> 47(4798) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG:
>>> io_watch_add(0xad0880, 105, 2, 0x7fc211712d58), fd_no=53
>>> 47(4798) DEBUG: <core> [core/tcp_main.c:3686]: handle_tcp_child():
>>> CONN_RELEASE  0x7fc211712d58 refcnt= 1
>>>
>>> and when i try to send any data
>>> 38(10867) DEBUG: evapi [evapi_dispatch.c:610]: evapi_recv_notify():
>>> received [0x7f17d23fc628] [{"test" : "1.1.1.1", "uuid" : "
>>> 1-31629 at 3.3.3.3" , "pdd" : "4"}] (75)
>>> 38(10867) DEBUG: evapi [evapi_dispatch.c:316]: evapi_dispatch_notify():
>>> the message was sent to 0 clients
>>>
>>> I don't know what i'm missing, or if i'm understanding the use of the
>>> module correctly
>>>
>>> could you please take a look?
>>> thanks a lot
>>> David
>>>
>>>
>>> --
>>> [image: Logo]
>>>
>>> David Escartín Almudévar
>>> VoIP/Switch Engineer
>>> descartin at sonoc.io
>>>
>>> *SONOC*
>>> C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
>>> Tlf: +34 917019888 · www.sonoc.io
>>>
>>> _______________________________________________
>>> Kamailio (SER) - Users Mailing Listsr-users at lists.kamailio.orghttps://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>> --
>>> Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda
>>> Funding: https://www.paypal.me/dcmierla
>>>
>>>
>>
>> --
>> [image: Logo]
>>
>> David Escartín Almudévar
>> VoIP/Switch Engineer
>> descartin at sonoc.io
>>
>> *SONOC*
>> C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
>> Tlf: +34 917019888 · www.sonoc.io
>>
>> --
>> Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda
>> Funding: https://www.paypal.me/dcmierla
>>
>>
>
> --
> [image: Logo]
>
> David Escartín Almudévar
> VoIP/Switch Engineer
> descartin at sonoc.io
>
> *SONOC*
> C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
> Tlf: +34 917019888 · www.sonoc.io
>


-- 
[image: Logo]

David Escartín Almudévar
VoIP/Switch Engineer
descartin at sonoc.io

*SONOC*
C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
Tlf: +34 917019888 · www.sonoc.io
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20201126/63780dd0/attachment.htm>


More information about the sr-users mailing list