<div class="gmail_quote">On Sun, Jun 12, 2011 at 11:24 PM, Edmond Begumisa <span dir="ltr"><<a href="mailto:ebegumisa@hysteria-tech.com">ebegumisa@hysteria-tech.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
My interpretation of your question is that you want to do one-off message tracing. <br></blockquote><div><br>Um, not too sure. What I want to do is to identify event-patterns in real time, and take some action. For example, I am processing event-A from source S1. At this time I have no context so I will probably do some minimal work and "remember" occurrence of event-A (i.e. update context). Then event-B might arrive (also from S1), and in this case . <br>
 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
1. You want to trace particular massages passed in your system over a period Y, you are particularly interested in 'EXIT' messages, but not necessarily:<br>
<br>
You could use the trace BIFs/dbg tool for this. Start an appropriate tracer with dbg:tracer, specify which processes you want to trace with dbg:p with one of the m|s|r flags to log the events, watch your system for a while, turn the tracer off (keep in mind the negative impact such tracing might have on a live system.) Analyse the trace output. You could also use your own tracer handler fun to filter/process the messages.<br>
</blockquote><div><br>My usage is not naturally process-tracing, but if I am able to draw a parallel or use the concept, happy to explore. So far, I am not able to imagine the mapping of what I'd like to do with this approach. If there is some example to illustrate, it'd help.<br>
 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

2. You want to trace massages over a number of nodes:<br>
<br>
Though I haven't used it, I believe this is what the Inviso OTP tool is for. You could also have a look at the ttb OTP tool.<br>
<br>
3. You want to trace "cascading" messages in your system:<br>
<br>
Have a look at erlang:seq_trace. I believe dbg and ttb both have support for sequential tracing (I don't think Inviso does.)<br>
<br>
4. You want a convenient way of walking through traces:<br>
<br>
The OTP et_viewer is a really nice tool I use a lot. Though the OTP Event Tracer can output ordinary trace data produced by dbg, where it really gets fun is when you feed it trace data by calling et:trace_me in your code (I normally wrap this in a ?TRACE macro). I like to think of it as a replacement for using io:format to print debug messages. The "detail" argument is really nice for "zooming" in/out as you page through trace data. You might find that useful for analysing a large number of messages.<br>

<br>
In short, I'm not sure you need any special "architectural design patterns". Just design your system as you normally would, using processes to model what you observe in the world, then trace it when it misbehaves or when you want to observe it. The traces *are* your sliding windows... unless I've completely mis-understood your question!<br>

<br>
- Edmond -<div><div></div><div class="h5"><br>
<br>
On Mon, 13 Jun 2011 01:38:20 +1000, Banibrata Dutta <<a href="mailto:banibrata.dutta@gmail.com" target="_blank">banibrata.dutta@gmail.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
gr8 questions, and they certainly need clarification.<br>
cc'ing the group s.t. others could contribute too.<br>
<br>
On Sun, Jun 12, 2011 at 8:48 PM, Mihai Balea <<a href="mailto:mihai@hates.ms" target="_blank">mihai@hates.ms</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On Jun 12, 2011, at 10:51 AM, Banibrata Dutta wrote:<br>
<br>
Prematurely sent.<br>
<br>
On Sun, Jun 12, 2011 at 7:59 PM, Banibrata Dutta <<br>
<a href="mailto:banibrata.dutta@gmail.com" target="_blank">banibrata.dutta@gmail.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What would be a good way to correlate asynchronous events, spot patterns<br>
over a sliding window (s.a. of no. of events elapsed or time elapsed), with<br>
millions of events occurring simultaneously, using Erlang ?<br>
<br>
The set of possible events is known, and any unknown event is just flagged<br>
as 'unknown' (so all unknowns are similar). The set of possible event<br>
patterns can be enumerated, but is possibly quite a large set of patterns.<br>
<br>
</blockquote>
<br>
Was wondering as to what could be the approach taken to implement such a<br>
thing in pure Erlang. My initial thoughts were along the line of maintaining<br>
FSMs per event source, but with so many events and so many possible/valid<br>
patterns, the thing seems kind of unwieldy. Also, I'd like a non-programmer<br>
to be able to define new events and valid event patterns.<br>
<br>
I believe 'Complex Event Processing' is quite likely to be the standard<br>
approach for such things, as I've found from some posts, and solutions exist<br>
in Java world for same, but both as an academic exercise (for the fun of<br>
learning) and for a potentially simpler + better solution, would like to try<br>
doing this is Erlang.<br>
<br>
<br>
I think you need to define your problem better.<br>
<br>
</blockquote>
<br>
Sure, let me try.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
What exactly do you mean by "millions of events occurring simultaneously"?<br>
<br>
</blockquote>
<br>
Okay, so I can say something like 500 events/second handled for correlation<br>
would be a more realistic number.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
At exactly the same time?<br>
<br>
</blockquote>
<br>
Yes... some of the events might be from same source, but spaced by as little<br>
as 50ms, but mostly from different sources. There could be some heirarchical<br>
relationship between sources. Very typical case of network management<br>
scenario. E.g. a fault port on a switch, could probably cause hundreds of<br>
destination unreachable events, application response timeouts, heartbeat<br>
losses etc..<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Millions of events per second? Minute? Is that peak rate, average rate or<br>
minimum rate?<br>
<br>
</blockquote>
<br>
Okay, I got over-enthusiastic :-) . Say 100 events/second typical, 500<br>
events/second peak, no real minimum.<br>
<br>
What exactly is a pattern?<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
</blockquote>
<br>
Node-A failed, Power in room-X where Node-A is kept failed, Nodes B,C,D<br>
which are served thru Node-A became unreachable, due to which Services L & M<br>
became unavailable, and due to which another dependent service N started<br>
giving inconsistent answers. So this is a pattern. However in this case,<br>
there's a possibility that Power-failure had nothing to do with Noda-A's<br>
failure, as backup power was available.<br>
<br>
Another pattern is, Power in room X failed, then Noda A failed, leading to<br>
failure of only Node D, because somehow Nodes B & C were dynamically<br>
configured to reroute. This is another pattern.<br>
<br>
What do you mean by "quite a large set of patterns"? Hundreds, thousands,<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
millions?<br>
<br>
</blockquote>
<br>
Several hundreds is a distinct possibility, and thousands are not<br>
impossible, but millions -- probably not.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
How long is that sliding window?<br>
<br>
</blockquote>
<br>
>From few minutes (for certain type of events), to few days (for another type<br>
of events).<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Can patterns encompass events coming from multiple sources or just one<br>
source?<br>
<br>
</blockquote>
<br>
Yes, indeed. However in this case, there needs to a "relationship" between<br>
the event sources, that is pre-defined. E.g. some sense of "topology"<br>
exists. However it is likely that only 2% of the event sources are<br>
interrelated.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Are patterns concerned only with event ordering and occurrence or there are<br>
timing issues involved as well?<br>
<br>
</blockquote>
<br>
Ordering, Timing, or any kind of causal relationship.<br>
</blockquote>
<br>
<br></div></div><font color="#888888">
-- <br>
Using Opera's revolutionary e-mail client: <a href="http://www.opera.com/mail/" target="_blank">http://www.opera.com/mail/</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>regards,<br>Banibrata<br><a href="http://www.linkedin.com/in/bdutta">http://www.linkedin.com/in/bdutta</a><br><a href="http://twitter.com/edgeliving">http://twitter.com/edgeliving</a><br>